7

我将 music.mp3 放在资源中,然后将 Windows Media Player 添加到引用中。我写了这段代码:

WindowsMediaPlayer wmp = new WindowsMediaPlayer();
            wmp.URL = "music.mp3";
            wmp.controls.play();

它不起作用。如何从资源中播放 .mp3 文件?

4

3 回答 3

5

我做到了:

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");
    }
于 2010-07-26T18:17:29.467 回答
2

我包装了 mp3 解码器库,并将其提供给 .net 开发人员。你可以在这里找到它:

http://sourceforge.net/projects/mpg123net/

包括将 mp3 文件转换为 PCM 和读取 ID3 标签的示例。

读取您的资源,将其转换为 PCM 并将其输出到可用作互操作 .NET 组件的 waveOut 类。无需创建临时文件。

sourceforge 上也提供 waveOut 类:

http://windowsmedianet.sourceforge.net/

于 2010-08-24T19:52:07.890 回答
0

或者提尔这个;

        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();
于 2017-07-28T15:05:25.557 回答