我们的应用程序不断记录和处理来自iPhone麦克风的音频。
目前我使用AVAudioRecorder和AVFoundation并将音频录制到8秒“.wav”文件中。
相反,我希望不断地将音频输入录制到缓冲区并处理8秒长度缓冲区的块。
如何将音频输入录制到缓冲区中,如何从那里读取8秒长的块?
谢谢!
答案 0 :(得分:5)
您可以通过多种方式接收原始PCM(在AV Foundation中:从AVCaptureDevice获取AVCaptureAudioDataOutput,或者插入处理抽头的AVAudioEngine;在Audio Toolbox中:Audio Queue Services,RemoteIO音频单元),然后写入文件,您可以使用Audio Toolbox的AudioFile或ExtAudioFile,只计算您编写的帧数,并决定何时开始新的8秒文件。
正如Rhythmic Fistman所说,如果你做了像
这样的事情会更安全捕获回调 - 推送到 - >环形缓冲区< - pulls-from--文件编写代码
因为当您关闭一个文件并打开另一个文件时,捕获回调仍然会进入,如果您阻止文件I / O,则很有可能丢弃一些数据。< / p>
我认为另一种方法是从回调中填充内存中的8秒缓冲区,当它已满时,让另一个线程写入该文件,同时你将新缓冲区malloc并开始记录(显然,文件编写器)在完成后会丢弃旧的缓冲区。)
编辑:另外,我在你的问题中没有看到任何关于Swift的内容,但是任何一个都可以在Swift或C / Obj-C中正常工作。