ios 音频播放器:等待声音播放完毕

km0tfn4u  于 2023-02-10  发布在  iOS
关注(0)|答案(1)|浏览(168)

我正在尝试播放声音文件并等待其完成,然后退出调用 * AVAudioPlayer. play()* 的函数。
我知道有一个 * FinishedPlaying * 事件处理程序可以初始化,并将被相应地调用。
但是方法必须等待而不阻塞主线程......这是如何实现的呢?

    • 编辑1**:

我尝试过使用ManualResetEvent,但在播放结束时,AVAudioPlayer示例上的代理FinishedPlaying从未被调用...

NSError err;
ManualResetEvent playSoundFinished = new ManualResetEvent(false);    
var currentPlayer = new AVAudioPlayer(soundResource, "mp3", out err);
currentPlayer.FinishedPlaying += delegate { playSoundFinished.Set();};
currentPlayer.Play();
// This call should block until the event is set
DispatchQueue.DefaultGlobalQueue.DispatchSync(() => playSoundFinished.WaitOne(-1));
jecbmhm3

jecbmhm31#

您可以通过将布尔值传递给构造函数来控制ManualResetEvent的初始状态:true,如果用信号通知初始状态,否则为false
您可以通过如下更改来解决此问题:
ManualResetEvent playSoundFinished = new ManualResetEvent(true);

相关问题