使用 Nadio 播放 wav 的延迟。错误使用线程?

Posted

技术标签:

【中文标题】使用 Nadio 播放 wav 的延迟。错误使用线程?【英文标题】:Delays in wav playback using Naudio. Mis-use of threading? 【发布时间】:2014-02-01 21:00:52 【问题描述】:

我希望将 Naudio 用于我正在制作的游戏。

我编写了一个简单的初始化例程,目前有:

                IWavePlayer wavePlayer1;
                AudioFileReader file1;
                string filename1 = "D:\\Programming\\SFX\\MUSIC\\IN_GAME_1.wav";

                wavePlayer1 = new WaveOut();
                file1 = new AudioFileReader(filename1);
                wavePlayer1.Init(file1);
                Thread thread1 = new Thread(new ThreadStart(wavePlayer1.Play));
                thread1.Start();

当我运行游戏时,wav 文件可能会播放半秒,然后停止,一秒后又恢复。

如果我在启动线程后立即放置 System.Threading.Thread.Sleep(5000),则延迟会增加 5 秒。这似乎证明了 'thread1.Start();'实际上根本没有在它自己的线程中启动声音。

作为一个线程和 Naudio 菜鸟,谁能告诉我我在这里做错了什么?我对游戏的要求是简单地具有一次播放多个声音的能力。没什么大不了的。

有什么想法吗?

提前致谢!

【问题讨论】:

该线程运行了几微秒,只是为了调用 Play,然后退出。无论问题是什么,它都不是那个线程。也许你应该更频繁地调用这段代码,这很难说。 【参考方案1】:

调用Play 只是开始播放。在播放完成之前它不会阻塞。所以根本不需要线程。只需致电wavePlayer1.Play。您需要订阅PlaybackStopped,以便正确处理您的输入文件和播放设备。

【讨论】:

以上是关于使用 Nadio 播放 wav 的延迟。错误使用线程?的主要内容,如果未能解决你的问题,请参考以下文章

Win32 API 多线程播放 .wav 文件没有延迟

(Python/Linux) 通过 python 或 os.system 命令播放无延迟的 wav 文件

使用 MediaPlayer 类从内存播放 WAV 文件

如何使用 Nadio c# 使声音更大?

html如何播放wav文件?

Core Audio - 多样本播放/录音