使用c#中的Symbol Developer Kit播放声音

时间:2010-03-04 13:40:59

标签: c# audio windows-mobile compact-framework motorola-emdk

我们正在开发针对Symbol制造的设备的移动应用程序。在这些设备上,Windows Mobile就是系统。

我们的应用程序播放声音(实际上是简单的哔哔声):我们使用Symbol提供的开发工具包访问设备声卡以播放声音。

这是我们使用的代码:

Symbol.Audio.Device MyDevice = (Symbol.Audio.Device)Symbol.StandardForms.SelectDevice.Select(
      Symbol.Audio.Controller.Title,
      Symbol.Audio.Device.AvailableDevices);

Symbol.Audio.Controller sound_card = new Symbol.Audio.StandardAudio(MyDevice);

int Duration = 15;
int Frequency = 3000;
sound_card.PlayAudio(Duration, Frequency);

持续时间以毫秒为单位,频率以赫兹为单位。

几乎总是,声音被正确播放(我的意思是声音以正确的持续时间播放)。

但有时候,声音播放时间更长(播放时间约为一秒钟)。

我们希望避免这样的事情,因为这对用户来说是非常令人不安的。

我不知道为什么会出现这种情况:短音和长音之间的应用没有任何变化。应用程序数据是相同的,应用程序没有执行任何其他任务和后台任务。

当向用户显示特定屏幕时播放此蜂鸣声(我的意思是创建一个Form对象,并在初始化期间播放蜂鸣声)。 所以我认为,也许,在强烈使用设备cpu时播放声音。而且因为cpu很忙,所以在合适的时间内播放声音并不成功。

你以前遇到过这个问题吗? (也许它特定于Symbol Developper工具包,你们中的一些人可能已经使用过id。)

你知道如何避免这种更长的哔哔声吗?

编辑: 我实现了ctacke解决方案:我在高优先级的单独线程中播放蜂鸣声。 此外,我增加了声音的持续时间(我放30毫秒而不是15:可能持续时间越长,系统在正确的时间内播放声音的效果越好)。

我还不知道这个实现是否解决了这个问题:由于bug的不确定性,需要一些时间来确保问题得到解决。

感谢您的回答,这对我帮助很大。

2 个答案:

答案 0 :(得分:0)

我的猜测是你在播放音频的时候正在使用GC,并且正在打开/关闭(虽然不知道Symbol如何实现调用很难说)。

作为第一个尝试,我将声音播放到一个单独的线程中,并使用P / Invoke到CeSetThreadPriority(而不仅仅是托管的Thread.Priority属性)优先使用它。虽然暂停的长度表明它不是一个量子问题,但更可能是一个应用程序问题。这会排除你为一个驱动程序或其他东西丢失量子。

如果事实证明它与GC有关(RPM可能会帮助你确定),那么我将创建一个本地库来执行音频和P / Invoke它。 GC不能搞乱nati8ve线程,所以你要保持你的决定论。

答案 1 :(得分:0)

确保您使用的是最新的SDK。您可能已经知道Symbol现在是Motorola的一部分,他们的Symbol Developer Kit现在已重命名为Enterprise Mobility Developer Kit。 EMDK的最新版本为v2.3,并于1月发布。

如果您的SDK中存在错误(您可以在support website找到所有SDK的发行说明),也许您遇到的问题已经解决了。