使用 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 的延迟。错误使用线程?的主要内容,如果未能解决你的问题,请参考以下文章