gpt4 book ai didi

c# - 在 C# 中使用 Symbol Developer Kit 播放声音

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:06 25 4
gpt4 key购买 nike

我们正在开发一个移动应用程序,它针对 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 解决方案:我在一个具有高优先级的单独线程中播放蜂鸣声。此外,我增加了声音的持续时间(我将 15 毫秒改为 30 毫秒:也许持续时间越长,系统在正确的时间内播放声音的效果就越好)。

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

最佳答案

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

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

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

关于c# - 在 C# 中使用 Symbol Developer Kit 播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2379652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com