小编Bob*_*nny的帖子

如何产生精确定时的音调和沉默?

我有一个C#项目,为RSS提要播放摩尔斯电码.我使用Managed DirectX编写它,却发现Managed DirectX已经过时并且已弃用.我的任务是播放纯正的正弦波突发,其间穿插着静音期(代码),它们的持续时间精确定时.我需要能够调用一个播放纯音多少毫秒的函数,然后Thread.Sleep()然后播放另一个等等.最快,音调和空格可以短至40ms.

它在Managed DirectX中运行良好.为了获得精确定时的音调,我创造了1秒.将正弦波放入辅助缓冲器,然后播放一定持续时间的音调,我在缓冲结束的x毫秒内向前寻找然后播放.

我试过System.Media.SoundPlayer.这是一个失败者[编辑 - 请参阅下面的答案]因为你必须播放(),睡眠(),然后停止()任意音长.结果是音调太长,因CPU负载而异.实际停止音调需要不确定的时间.

然后,我踏上了漫长的尝试使用n音讯1.3.我最终得到了一个提供音调数据的内存驻留流,并再次向前搜索,留下流中剩余的所需音调长度,然后播放.这在DirectSoundOut类上工作了一段时间(见下文),但WaveOut类很快就死了,内部断言说尽管PlayerStopped = true,缓冲区仍在队列中.这是奇怪的,因为我玩到最后然后在音调结束和下一个开始之间等待相同的持续时间.您认为在开始播放40毫秒音调后80毫秒,队列中没有缓冲区.

DirectSoundOut运行良好一段时间,但它的问题是,对于每个音调突发Play()它旋转一个单独的线程.最终(5分钟左右)它就停止工作了.在VS2008 IDE中运行项目时,可以在"输出"窗口中退出线程后查看线程之后的线程.我不会在播放期间创建新对象,我只是Seek()音色流然后反复调用Play(),所以我认为这不是孤立缓冲区的问题/无论是什么堆积直到它被阻塞.

我对这一个没有耐心,所以我希望这里有人遇到类似的要求,并且可以引导我朝着一个可能的解决方案的方向前进.

.net c# directx audio directsound

22
推荐指数
1
解决办法
1826
查看次数

Mac PackageMaker - 允许重定位问题

我有两个问题,允许重定位(包:Xxx,组件):

  1. 它一直被魔法打开.我怎么能避免这个?我需要它(次优,我知道 - 见#2)

  2. 如果启用了"允许重定位",则安装程序首先将.app放入/ Applications,然后重新定位它,将其复制到我的开发树中的原始.app之上.如何在开发过程中防止这种情况发生,而不是在另一台机器上测试安装程序?

macos installer packagemaker

5
推荐指数
1
解决办法
1930
查看次数

Mac PackageMaker - 随机重置所有者/组/烫发

在使用PackageMaker(适用于Snow Leopard的XCode 3.2.1 1613)开发安装时,有时我在大多数(如果不是全部)文件上设置的权限,所有者和组都会蒸发.结果看起来我刚刚将文件添加到PackageMaker,然后在每个文件上设置文件perm/own/grp.

有点奇怪的是,.pmdoc文件夹中的大多数xml文件都会发生变化,甚至是index.xml,当没有任何变化时会强制出现大的SVN问题!当发生这种情况时,我只是SVN Revert,然后在建造之前检查所有内容(可能需要20分钟).

我怎么能避免这个?我可以做些什么来触发这种(不良)行为?我还没有能够将我的行为与问题联系起来.下次它发生并且我有松弛的时间,我会区分.pmdoc/xml的变化,看看我是否能找到一个模式.

同时,如果有人有一些提示,我很感激.

macos installer packagemaker

5
推荐指数
1
解决办法
1419
查看次数

标签 统计

installer ×2

macos ×2

packagemaker ×2

.net ×1

audio ×1

c# ×1

directsound ×1

directx ×1