我將music.mp3放在資源中,然後我將Windows Media Player添加到引用中。我寫了這樣的代碼:如何從C#資源中播放.mp3文件?
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
wmp.URL = "music.mp3";
wmp.controls.play();
它不起作用。如何從資源播放.mp3文件?
我將music.mp3放在資源中,然後我將Windows Media Player添加到引用中。我寫了這樣的代碼:如何從C#資源中播放.mp3文件?
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
wmp.URL = "music.mp3";
wmp.controls.play();
它不起作用。如何從資源播放.mp3文件?
我做到了:
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PostGen.Resources.Kalimba.mp3");
using (Stream output = new FileStream ("C:\\temp.mp3", FileMode.Create))
{
byte[] buffer = new byte[32*1024];
int read;
while ((read= stream.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
wmp.URL = "C:\\temp.mp3";
wmp.controls.play();
我們要刪除這個臨時文件:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
File.Delete("C:\\temp.mp3");
}
我包的mp3解碼庫,並使其可用於.NET開發人員。你可以在這裏找到它:
http://sourceforge.net/projects/mpg123net/
包括對MP3文件轉換爲PCM,並讀取ID3標籤的樣本。
閱讀您的資源,將其轉換爲PCM並將其輸出到waveOut類,該類可作爲interop .NET組件提供。無需創建臨時文件。
可用waveout的類也sourceforge上:
或Tyr這一點;
var file = $"{Path.GetTempPath()}temp.mp3";
if (!File.Exists(file))
{
using (Stream output = new FileStream(file, FileMode.Create))
{
output.Write(Properties.Resources.Kalimba, 0, Properties.Resources.Kalimba.Length);
}
}
var wmp = new WindowsMediaPlayer { URL = file };
wmp.controls.play();
像這樣創建一個臨時文件不應該被認爲是一個有效的解決方案。 MediaPlayer.Play方法無論好還是壞(我認爲更糟糕),都不會將流作爲輸入。你用你的exe部署MP3並將文件位置傳遞給該功能要好得多。 – Seanba 2016-07-29 18:08:52