0

Referring to this question, I have used the code from it: Play audio from a stream using C#

However, I get an error "Object reference not set to an instance of an object" running in debug. I have assigned Url's to a combo box, and when I choose the first choice, opening an ASX stream, the program crashes, giving me the above in debugger.

Any ideas? I have tried doing some fixing with the code below, but I don't think I'm getting the idea, since it still isn't working.

Edit:// It doesn't recognize Mp3FileReader however there are no errors/warnings, it isn't green as it normally would be, am I missing a library?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using NAudio.Wave;
using NAudio;

    public static void PlayMp3FromUrl(string url)
    {
        using (Stream ms = new MemoryStream())
        {
            using (Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream())
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
            }

            ms.Position = 0;

            Mp3FileReader fr = new Mp3FileReader(ms);
            WaveStream blockAlignedStream = new BlockAlignReductionStream(WaveFormatConversionStream.CreatePcmStream(fr));

            if(ms != null)
            {
                using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
                {
                    waveOut.Init(blockAlignedStream);
                    waveOut.Play();
                    while (waveOut.PlaybackState == PlaybackState.Playing)
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }
            }

            else
            {
                MessageBox.Show("blockAlignedStream variable was null!");
            }
        }
    } 
Community
  • 1
  • 1
zzwyb89
  • 472
  • 1
  • 7
  • 21

1 Answers1

1

The code sample you are using is not a good example of how to play an MP3 from a stream. There are multiple problems with the code. Either use the technique described in this article, or you may be able to make use of the new MediaFoundationReader which can play from a URL.

Mark Heath
  • 48,273
  • 29
  • 137
  • 194