2014-07-13 66 views
0

好吧,我是一個noob,已經在Google上呆了4個小時。所以我會很感激一些幫助。我試圖播放聲音具有可變(有100+的聲音),我已經做了在本教程中的一切: http://www.codeproject.com/Articles/17422/Embedding-and-Playing-WAV-Audio-Files-in-a-WinFormSoundPlayer不能使用字符串

這工作:

System.Media.SoundPlayer soundPlayer = new System.Media.SoundPlayer (PROGRAM.Properties.Resources.audio); soundPlayer.Play();

這不起作用:

string file = "PROGRAM.Properties.Resources.audio";

System.Media.SoundPlayer soundPlayer = new System.Media.SoundPlayer (file); soundPlayer.Play();

錯誤:請確定聲音文件存在於指定的位置... System.Media:SoundPlayer.ValidateSoundFile(StringfileName)

字符串不能工作怎麼可能?

+0

對於接受一個字符串的SoundPlayer構造函數,它必須是一個文件路徑或網址.wav文件; 'PROGAM.Properties.Resources.Audio'是你的'PROGRAM'命名空間中的一個實例成員,不能用字符串表示。 – adaam

+0

但我不想在項目中嵌入wav文件。我如何使用變量播放嵌入式文件?我不能那麼努力嗎? –

+0

如果您閱讀上面提供的教程,它會詳細介紹如何將.wav文件等資源添加到項目中(請參閱標題爲「向音頻文件添加資源」一節) - 另請參閱http://msdn.microsoft.com/ en-gb/library/7k989cfy(v = vs.90).aspx – adaam

回答

1

當你在第一個例子中使用PROGRAM.Properties.Resources.audio時,你實際上得到了一個流的引用(它給你嵌入的音頻數據)。這由您的.resx生成的自動生成的代碼進行管理。

當您將"PROGRAM.Properties.Resources.audio"作爲字符串傳遞時,SoundPlayer會將其解釋爲文件名,然後顯然找不到它。

如果你想手動獲取從資源文件中的音頻流,請嘗試:

var stream = PROGRAM.Properties.Resources.ResourceManager.GetStream("audio"); 
var soundPlayer = new System.Media.SoundPlayer(stream); 
soundPlayer.Play(); 
+0

非常感謝克里斯!完美的作品。 –