BufferedWaveProvider不能在Unity中工作

本文关键字:工作 Unity 不能 BufferedWaveProvider | 更新日期: 2023-09-27 17:50:38

我正在尝试将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 Forms中工作…

BufferedWaveProvider不能在Unity中工作

尝试使用WaveOutEvent代替WaveOut,它至少在一个项目中对我有效。

正如Mark指出的:

它的工作,因为WaveOut使用Windows消息回调默认情况下,所以如果你没有gui线程(例如,你在一个控制台应用程序),那么它不能被使用,WaveOutEvent应该首选