簡體   English   中英

使用System.Media.SoundPlayer播放Windows系統聲音

[英]Playing Windows System Sounds with System.Media.SoundPlayer

System.Media.SoundPlayer是否可能無法播放c:\\ Windows \\ Media中找到的Windows系統聲音?

我有代碼:

using (var soundPlayer = 
       new SoundPlayer(@"c:\Windows\Media\Landscape\Windows Notify.wav")) 
{ 
    soundPlayer.Play(); 
}

但是,當我運行此代碼時,我得到了錯誤:

Sound API only supports playing PCM wave files.

我想念什么嗎? 有沒有辦法從WPF應用程序播放這些文件? (無需將它們轉換為PCM)

SystemSounds類包含以下預定義的系統聲音:

星號嗶叫感嘆號問題

因此,例如,播放停止:

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

所有其他聲音都需要您從注冊表中讀取所需的聲音,並使用以下代碼播放它:

SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\Landscape\Windows Notify.wav");

“風景”是指Windows的“聲音方案”,其中的wav文件由Windows OS使用。 您已經確定,這些文件不能直接使用。

Windows目錄下的Windows Notify.wav文件和基本Windows \\ Media目錄下的Windows Notify.wav文件大小的比較是相當大的。 222KB和25.5KB-

如果進入“聲音”控制面板小程序並瀏覽到“聲音”選項卡,您將看到“聲音方案:”的下拉列表,並且Windows \\ Media中的其他文件夾將顯示在該列表中。

我沒有支持此操作的鏈接,但是經過無數小時地以編程方式處理“控制面板聲音”的操作之后,我敢冒險猜測“聲音方案” wav文件僅包含在運行時消耗的相關數據(也許是效果數據)播放這些聲音的修改版本...對於最后一部分,我可能是完全錯誤的; 這只是一個猜測。 無論如何,您將無法直接在代碼中使用這些聲音方案文件。

如果您必須播放“通知”波形的“橫向”版本,則建議您播放聲音並將其保存到音頻編輯器中的新wave文件中。 您可以將wave文件添加到安裝程序/部署項目中,以將其播放到Windows \\ Media文件夾中,並以與您已經使用的相同的方式直接調用它。

這是一個有趣的問題,但是答案很簡單。 在閱讀了這個問題之后,我嘗試了您的代碼並遇到了同樣的問題,因此我在網上搜索了解決方案。 雖然沒有找到確切的解決方案,但我確實發現SoundPlayer沒有播放任何捆綁的Windows聲音 ,在StackOverflow上發布了PCM wav文件 ,其中顯示了一些代碼,這些代碼成功地播放了Windows\\Media文件夾中的音頻文件。

我嘗試了代碼,它起作用了,所以我只好弄清楚了為什么您的示例不起作用。 我檢查了音頻文件中確實起到和你在音頻編輯通知音頻文件之間的差異,但他們肯定WAV文件。

我嘗試播放Windows\\Media\\Landscape文件夾中的其他音頻文件,但遇到相同的錯誤。 然后,我嘗試播放Windows\\Media文件夾中其他子文件夾中的音頻文件,但仍然出現相同的錯誤。 但是,然后我注意到Windows\\Media文件夾中的許多文件夾都包含相同的音頻文件。

這讓我開始思考,最終我意識到這些文件夾中的所有音頻文件實際上都直接在Windows\\Media文件夾中。 因此,您可以播放聲音,但是只需要忽略子文件夾中的聲音,然后從Windows\\Media文件夾中播放聲音即可 這將起作用:

SoundPlayer soundPlayer = new SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
soundPlayer.Play();

但是,我不能告訴您為什么會出現這個奇怪的錯誤,但是我只能假設文件夾中的文件可能是Windows\\Media文件夾中實際文件的某種鏈接,並且僅由操作系統使用將它們分為幾類...或類似的東西。

由於聲音似乎是壓縮格式,因此必須先解壓縮聲音,然后才能使用SoundPlayer播放。 您可以使用Windows音頻壓縮管理器解壓縮聲音以進行播放:

https://msdn.microsoft.com/zh-CN/library/windows/desktop/dd742945(v=vs.85).aspx

但是,實現起來相當復雜,因此我發現了一個不錯的庫NAudio:

http://naudio.codeplex.com/

與使用System.Media.SoundPlayer相比,使用NAudio似乎要復雜得多,但它似乎還提供更多的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM