Tag: Access News

如何在iOS上创建可暂停的音频录制应用

我们的应用程序允许志愿者记录盲人和印刷品受损人士的文章。 使用AVAudioRecorder非常简单AVAudioRecorder ,它还允许暂停,但是它没有提供任何方法来监听录音,直到过程暂停为止。 必须停止记录才能将数据写入磁盘,并使播放器(例如AVAudioPlayer , AVPlayer , AVQueuePlayer等)可以播放数据。 下图希望有助于突出显示本文中使用的类之间的联系。 NSObject隐式隐含为没有继承箭头的超类。 注意:黑色继承箭头的方向选择可能很不幸。 要解决此问题,请阅读下图, “ AVQueuePlayer 继承了 AVPlayer ” 要么 “ AVComposition 继承了 AVAsset ” 一个重要的推论是AVPlayerItem将在其init接受AVAsset , AVComposition和AVMutableComposition 。 (有关官方证明,请参阅AVMutableComposition的文档。) CAVEAT:该应用程序已经超出了这些控件的范围,但是仍然适用于一般用例(并且将提供全面的文档)。 发现这一事实后,很明显 在部分录音中必须保留参考(以最终由所选音频播放器控制的类型为准-参见下文),以及 阅读完文章后,使用AVAssetExportSession将它们连接起来。 所有这些都应在后台完成,使控件对用户透明: 记录 :实例化AVAudioRecorder对象,并开始记录。 STOP / PAUSE :停止录音,取消self.audioRecorder属性,并将音频追加到self.articleChunks数组。 播放 :用该点的部分录音实例化播放器(即self.articleChunks )并开始播放。 队列和提交 :除了目标略有不同外,它们都将连接录音片段,并使生成的音频文件充满元数据。 在使用RECORD,STOP / PAUSE和PLAY时,记录尚未完成,但在按QUEUE或SUBMIT后,将导出最终结果,并且UI会重置为其初始状态(即, self.articleChunks设置为空数组,没有发布)已选择,标题已清除等)。 AVQueuePlayer选择AVQueuePlayer作为播放器,是因为在我们的方案中,它是最简单,最快的管理方式。 反对其他玩家的原因: 可以直接使用URL或Data初始化AVAudioPlayer ,然后将播放器对象存储在数组中,但是需要花费大量精力才能实现连续播放。 AVPlayer有点高级,它仍然允许通过URL进行初始化,并且可以使用replaceCurrentItem替换当前播放的项目,因此一个对象就足够了。 缺点是后一种方法需要提供AVPlayerItem ,并且需要帮助方法来以正确的顺序连续播放音频块。 […]