今天项目需要创建一个FIFO队列,以前是自己写来实现,这次想通过GCD来做,写完后,感觉很是方便。
大概需求:UI界面可以不停的点击Button,然后进行不同操作的语音提示。一段语音结束了才能开始下段语音。上重要代码,走起。
1 创建dispatch_queue_t
_soundQueue=dispatch_queue_create("com.dispatch.playSound",DISPATCH_QUEUE_SERIAL);
2 �给UI界面提供往队列添加数据接口
- (void)addText:(NSString*)text {
dispatch_async(_soundQueue, ^{
[self playSound:text];
});
}
3 在playSound中创建信号量
_semaphore=dispatch_semaphore_create(0);
........
设置:AVSpeechSynthesizer的delegate
播放声音:[AVSpeechSynthesizer speakUtterance]
等待信号量释放:dispatch_semaphore_wait(_semaphore,DISPATCH_TIME_FOREVER);
4 在AVSpeechSynthesizer的delegate的didFinishSpeechUtterance中,释放信号量dispatch_semaphore_signal(_semaphore);