【问题标题】:BufferedWaveProvider doesnt work in UnityBufferedWaveProvider 在 Unity 中不起作用
【发布时间】:2015-05-25 18:00:40
【问题描述】:

我正在尝试将 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 窗体...

【问题讨论】:

    标签: c# audio unity3d naudio


    【解决方案1】:

    尝试使用WaveOutEvent 而不是WaveOut,它至少在其中一个项目中对我有用。

    正如马克指出的那样:

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

    【讨论】:

    • 这似乎确实有效,但我不知道为什么,谢谢!
    • 之所以有效,是因为 WaveOut 默认使用 Windows 消息回调,所以如果您没有 gui 线程(例如您在控制台应用程序中),则无法使用它,应该首选 WaveOutEvent 跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多