7

I put music.mp3 in resources and then I added Windows Media Player to references. I wrote this code:

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

It doesn't work. How can I play .mp3 file from resources?

carck3r
  • 317
  • 1
  • 5
  • 17

3 Answers3

4

I did it:

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();

We have to delete this temporary file:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        File.Delete("C:\\temp.mp3");
    }
carck3r
  • 317
  • 1
  • 5
  • 17
  • Creating a temporary file like this should not be considered a valid solution. The MediaPlayer.Play method, for better or worse (I'd argue worse), does not take a stream as input. You're much better off to deploy the MP3 with your exe and pass the file location to that function. – Seanba Jul 29 '16 at 18:08
2

I wrapped mp3 decoder library and made it available for .net developers. You can find it here:

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

Included are the samples to convert mp3 file to PCM, and read ID3 tags.

Read your resource, convert it to PCM and output it to waveOut class that is available as interop .NET component. No need to create temp files.

waveOut classes available also on sourceforge:

http://windowsmedianet.sourceforge.net/

Daniel Mošmondor
  • 19,718
  • 12
  • 58
  • 99
-1

Or Tyr this;

        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();