2012-12-02 40 views
0

我正在寫一個跨平臺的程序,它顯示一個計時器或者向上或向下計數到一個用戶設置的時間間隔。在這段時間結束時,我想播放聲音。我以爲使用類似的東西:我錯過了什麼,以停止在我的Mac 10.5.8(使用MonoDevelop 2.8.8.2)上發出嘟嘟聲?

System.Media.SystemSounds.Beep.Play(); 

會工作。除了我的Mac上沒有播放聲音,我沒有任何跡象表明失敗。當我用一個「按鈕」寫了一小段測試代碼來觸發「嘟嘟」聲音時,它沒有播放。不過,上面的代碼片段在我妻子的Windows Vista機器上工作正常(也使用MonoDevelop 2.8.8.4)。具有諷刺意味的是,它也適用於沙盒的Ubuntu 12.04 linux(MonoDevelop 2.8.6.3),我通過VirtualBox在我的Mac上進行了沙盒處理。

我環顧四周,在互聯網上,但我找不到任何令人滿意的答案這個難題。讓我再次提出這個問題。 「阻止我的Mac在我的Mac上播放我的程序中的」Beep「聲音,但在同一個Mac上的沙盒Linux沒有問題播放聲音?」

感謝您的任何幫助。

回答

1

看着Mono's implementation of System.Media,它似乎只適用於ALSA(Linux聲音系統之一)和Windows。我懷疑這是因爲System.Media是一個非常簡單的聲音API,不能做太多,所以很少使用。

我想不出任何好的平臺不可知的聲音播放器API,認爲GTK#UI工具包(由MonoDevelop使用)有一個Display.Beep() AFAIK在所有平臺上工作。如果你的應用程序是一個終端應用程序,你也可以嘗試System.Console.Beep()

+0

謝謝,這有助於很多。我想這也解釋了我在Mac上使用System.Media.SoundPlayer時遇到的問題!至於平臺不可知的聲音API,我可能會追逐。我也玩弄了用ALSA做點什麼的想法......我知道這與Linux內核有關,但也許有一些東西在那裏。看起來在MonoDevelop下的Mac上使用聲音工作時,缺少某種橋樑。 –

+0

OpenAL可能只是作爲一個可用於許多平臺的API來實現的技巧。 CHEERS –

+0

確認,「Display.Beep()」在我的Mac上正常工作,我沒有任何理由認爲它不適用於我的其他機器。 –

相關問題