如何从C#中的资源播放.mp3文件?
我把music.mp3放在资源中,然后我将Windows Media Player添加到参考资料中。 我写了这段代码:
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组件。 无需创建临时文件。
sourceforge上也提供了waveOut类:
或者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();