c# - BufferedWaveProvider 在 Unity 中不起作用

标签 c# audio unity-game-engine 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 窗体中运行...

最佳答案

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

正如马克指出的:

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

关于c# - BufferedWaveProvider 在 Unity 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30443732/

相关文章:

c# - 如何使用MySql中的动态查询将数据插入临时表

iphone - VBR 音频的 MPMusicPlayer currentPlaybackTime 不准确

android - 更新时的 Unity persistentDataPath 问题

c# - 在datagridview c#中使一个单元格可编辑

c# - 如何在 XAML 中使用条件打印文本 block ?

ios - 后台 CallKit 音频初始化错误 - 第一次通话后音频无法正常工作

java - 添加声音java

c# - 非旧版动画无法停止/控制

android - 在 Unity 中为 Android 构建 Google VR 项目,重新打包资源时失败

c# - 是否可以从 wwwroot 文件夹外部提供静态文件?