Search code examples
c#audiounity-game-enginenaudio

BufferedWaveProvider doesnt work in Unity


I am trying to implement NAudio into Unity. I managed to link the NAudio dll, but I am getting a strange error when I try to play music with NAudio BufferedWaveProvider.

If I to this:

WaveOut player;
BufferedWaveProvider buf;
AudioFileReader reader;
void Start () {

    reader = new AudioFileReader(@"..\music.mp3"); // some music

    player = new WaveOut();
    player.Init(reader );

    player.Play();
}

The music plays normal, without any problems.

But when I try use BufferedWaveProvider:

WaveOut player;
BufferedWaveProvider buf;
AudioFileReader reader;
void Start () {

    reader = new AudioFileReader(@"..\music.mp3"); // some music

    buf = new BufferedWaveProvider(reader.WaveFormat);

    byte[] tmp = new byte[50000];
    reader.Read(tmp, 0, tmp.Length); //read 50000 bytes

    buf.AddSamples(tmp, 0, tmp.Length); //add bytes to buf

    player = new WaveOut();
    player.Init(buf); //init the WaveOut with buff

    player.Play(); // play
}

It doesnt play! I debuged really a lot, and found out that the BufferedWaveProvider is using the samples (BufferedBytes are lowering), but I dont get any sound out of it!

I am using BufferedWaveProvider because of a more complex project, but its already a problem in such a simple example..

What am I missing?

Note: The same code WORKS in C# Windows Forms...


Solution

  • Try using WaveOutEvent instead of WaveOut, it worked at least for me in one of the projects.

    As Mark pointed out:

    it works because WaveOut uses Windows message callbacks by default, so if you have no gui thread (e.g. you are in a console app), then it can't be used and WaveOutEvent should be preferred