2010-03-04 40 views
2

我們正在開發一款移動應用程序,其目標是由Symbol製造的設備。在這些設備上,Windows Mobile就是這個系統。用c#中的符號開發工具包播放聲音#

我們的應用程序播放聲音(實際上是簡單的嘟嘟聲):我們使用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); 

以毫秒持續時間和頻率赫茲。

幾乎總是聲音正確播放(我的意思是聲音播放時間合適)。

但有時,聲音播放時間更長(播放時間約1秒)。

我們想避免這樣的事情,因爲這對用戶耳朵來說是相當令人不安的。

我不知道爲什麼會出現這種現象:短聲和長聲之間的應用程序沒有任何變化。應用程序數據是相同的,沒有其他任務和應用程序沒有執行後臺任務。

當向用戶顯示一個特定的屏幕(我的意思是一個Form對象被創建,並且在其初始化期間,發出嘟嘟聲)時播放此嘟嘟聲。 所以我認爲,也許,強烈使用設備cpu時會播放聲音。而且由於CPU繁忙,在合適的時間內播放聲音失敗。

您以前是否遇到過這個問題? (也許它是特定於Symbol Developper套件的,有些人可能已經使用了id)。

你知道一種方法來避免這種更長的嗶嗶聲嗎?

編輯: 我實現了ctacke解決方案:我在高優先級的單獨線程中播放蜂鳴聲。 此外,我增加了聲音的持續時間(我把30毫秒,而不是15:也許持續時間越長,系統在正確的時間內播放聲音越好)。

我不知道這個實現是否解決了這個問題,或者沒有:因爲bug的不確定性,需要一些時間才能確保問題得到解決。

謝謝你的回答,它幫了我很多。

回答

0

我的猜測是,當音頻播放時,你會得到一個GC,並且正在打開/關閉(儘管不知道Symbol如何實現這個調用很難說)。

作爲第一個刺,我會把聲音播放到一個單獨的線程中,然後使用P/Invoke到CeSetThreadPriority(不僅僅是託管的Thread.Priority屬性)來優先處理它。這可以排除你對驅動程序或其他東西的損失,儘管暫停的時間長度表明它不是量子問題,但更可能是應用程序問題。

如果事實證明它與GC相關(RPM可能會幫助你確定),那麼我會創建一個本地庫,它可以完成音頻和P /調用它。GC不能混淆nati8ve線程,所以你會保持你的決定論。

+0

聽起來不錯,我會試試看。 – OutOfBound 2010-03-05 13:14:44

0

確保您使用的是最新的SDK。正如你可能已經知道的Symbol現在是摩托羅拉的一部分,他們的Symbol Developer Kit現在已經重新命名爲Enterprise Mobility Developer Kit。最新版本的EMDK是v2.3,並於1月份發佈。

也許你遇到的問題已經被修復,如果它是他們的SDK中的錯誤(你可以在他們的support website上找到所有SDK的發行說明)。

+0

我正在使用v2.1,並且沒有相關的錯誤在新版本中被標記爲已解決。但請他們支持對我來說應該是個好主意。 – OutOfBound 2010-03-05 13:12:54