2014-03-30 70 views
4

我已經找到了解決方案,在這裏播放WPF中的聲音文件,我將其提取到方法中,並以另一種方法調用此方法。但是,當PlaySound()被稱爲聲音不播放。有沒有人有任何見解,爲什麼發生這種情況?此外,聲音文件被標記爲內容,但更改爲類型資源也不能解決問題嗎?如何播放聲音文件?

我的方法來播放聲音:

private void PlaySound() 
{ 
    Uri uri = new Uri(@"pack://application:,,,/Sounds/jabSound.wav"); 
    var player = new MediaPlayer(); 
    player.Open(uri); 
    player.Play(); 
} 

然後我把這樣的方法,但它不能播放聲音文件,PlaySound();

+1

'聲音不播放'是什麼意思?你有什麼異常嗎? –

+0

沒有例外,只是不播放聲音文件..調用方法內的其餘代碼執行良好,所以我知道它被調用。 –

+0

如何將'jabSound.wav'添加到項目中? –

回答

9

你也可以使用一個SoundPlayer

SoundPlayer player = new SoundPlayer(path); 
player.Load(); 
player.Play(); 

很自我解釋。

BONUS以下是如何把它遍歷異步。

bool soundFinished = true; 

if (soundFinished) 
{ 
    soundFinished = false; 
    Task.Factory.StartNew(() => { player.PlaySync(); soundFinished = true; }); 
} 

打開任務播放聲音,等待聲音結束,然後知道它完成並再次播放。

+0

如何定義的文件的路徑?我試過的完整路徑在引號中的debug文件夾中,但它提供了語法錯誤.. –

+0

@布賴恩這就像「「C://Users//name//sound.wav」' –

+0

我厭倦了這一點,但我越來越'錯誤無法識別的轉義序列 '的文件路徑,該路徑是完全按照我抄了一遍。 –

10

事實證明,MediaPlayer不嵌入資源,報價從Matthew MacDonald book: Pro WPF 4.5 in C#. Chapter 26播放的音樂文件:

你提供你文件的位置作爲一個URI。不幸的是,這可能不是 嵌入音頻文件並使用MediaPlayer類播放它。 限制是因爲MediaPlayer類是基於WPF原生的功能而不是 構建的,而是由Windows Media Player的獨立非託管組件提供的。

因此,儘量設置爲你的音樂文件的本地路徑:

private void PlaySound() 
{ 
    var uri = new Uri(@"your_local_path", UriKind.RelativeOrAbsolute); 
    var player = new MediaPlayer(); 

    player.Open(uri); 
    player.Play(); 
} 

對於解決方法,請參閱以下鏈接:

Playing embedded audio files in WPF

+1

這聽起來是對的......如果我確實知道,我會給它+1。 – kenny

+1

鏈接不再活躍。 – Sinatr

6

除了@阿納託利的答案,我會建議聆聽MediaFailed事件以檢查MediaPlayer故障(例如,由於指向.wav文件路徑錯誤而未找到文件)。 MediaPlayer如果無法加載媒體文件,則不會引發異常,而是觸發MediaFailed事件。

如果您嘗試使用相對uri,請記住它表示相對於您的可執行文件位置。在開發階段,它通常是裏面bin\debug文件夾。所以你的.wav文件的路徑應該是"../../Sounds/jabSound.wav"

Uri uri = new Uri("../../Sounds/jabSound.wav", UriKind.Relative); 
var player = new MediaPlayer(); 
player.MediaFailed += (o, args) => 
         { 
          //here you can get hint of what causes the failure 
          //from method parameter args 
         }; 
player.Open(uri); 
player.Play(); 
+0

感謝您的信息,在這種情況下,音頻文件應該設置爲「資源」還是「內容」? –

+0

@BrianJ您如何看待部署策略? –

+0

我試過你的上述解決方案,包括添加聲音文件調試,但它仍然沒有播放文件..任何想法? –