我们的应用程序持续记录和处理来自iPhone麦克风的音频。
目前,我使用AVAudioRecorder和AVFoundation,将音频输入输出到8秒的".wav“文件中。
相反,我希望不断地将音频输入记录到缓冲区中,并处理8秒长度缓冲区的块。
如何将音频输入录制到buffer中,以及如何从其中读取8秒长度的块?
谢谢!
发布于 2017-04-02 19:42:07
你可以通过多种方式接收原始的PCM (在AV基础中:从AVCaptureDevice获得AVCaptureAudioDataOutput,或插入处理轻击的AVAudioEngine;在音频工具箱:音频队列服务,RemoteIO音频单元),然后你可以使用Audio Toolbox的AudioFile或ExtAudioFile来写入文件,只需计算你已经写入了多少帧,并决定何时开始一个新的8秒文件。
正如上面提到的节奏型Fistman所说,如果你这样做会更安全
捕获回调--pushes to-->环形缓冲区<--pulls from-- file-writing代码
因为当您关闭一个文件并打开另一个文件时,捕获回调仍然会传入,如果您在文件I/O上阻塞,则很有可能会丢失一些数据。
我想另一种方法是从你的回调中填满一个8秒的内存缓冲区,当它满了,让另一个线程写那个文件,而你malloc一个新的缓冲区并开始记录到那个缓冲区中(显然,文件写入器会在完成后处理旧的缓冲区)。
编辑:另外,我在你的问题中没有看到任何关于Swift的东西,但在Swift或C/Obj-C中,这些都应该工作得很好。
https://stackoverflow.com/questions/42745154
复制相似问题