BufferedWaveProvider在Unity中不起作用

时间:2015-05-25 18:00:41

标签: c# audio unity3d naudio

我正在尝试将NAudio实施到Unity中。我设法链接了NAudio dll,但是当我尝试用NAudio BufferedWaveProvider播放音乐时,我收到了一个奇怪的错误。

如果我这样:

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

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

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

    player.Play();
}

音乐播放正常,没有任何问题。

但是当我尝试使用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
}

它不玩!我真的进行了很多调试,发现BufferedWaveProvider正在使用样本(BufferedBytes正在降低),但我没有听到任何声音!

我使用的是BufferedWaveProvider,因为项目比较复杂,但在这么简单的例子中它已经成了问题。

我错过了什么?

注意: C#Windows窗体中的相同代码工作...

1 个答案:

答案 0 :(得分:3)

尝试使用WaveOutEvent代替WaveOut,它至少在我的其中一个项目中起作用。

正如马克指出的那样:

  

它的工作原理是因为WaveOut默认使用Windows消息回调,所以如果你没有gui线程(例如你在控制台应用程序中),那么就无法使用WaveOutEvent应该是首选的