繁体   English   中英

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

[英]Play sounds with the Symbol Developer Kit in C#

我们正在开发一个移动应用程序,其目标是由 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 Developer 工具包特有的?

我怎样才能避免这种更长的哔哔声?

编辑

我实现了 ctacke 解决方案:我在一个具有高优先级的单独线程中播放哔哔声。 此外,我增加了声音的持续时间(我把 30 毫秒而不是 15 毫秒:也许持续时间越长,系统在正确的时间内播放声音的效果就越好)。

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

我的猜测是,当音频正在播放时,你会得到一个 GC,这对开/关造成了严重破坏(尽管不知道 Symbol 是如何实现调用的,这很难说)。

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

如果事实证明它与 GC 相关(RPM 可能会帮助您确定这一点),那么我会创建一个本地库来处理音频并 P/Invoke 它。 GC 不会干扰本地线程,因此您可以保持确定性。

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

如果您遇到的问题是他们 SDK 中的错误,那么您遇到的问题可能已经得到解决(您可以在他们的支持网站上找到所有 SDK 的发行说明)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM