簡體   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