实时音频处理 Swift

Real time audio processing Swift

我们的应用持续记录和处理来自 iPhone 个麦克风的音频。

目前我使用 AVAudioRecorder 和 AVFoundation 并将音频输入输出录制到 8 秒的“.wav”文件中。

相反,我想连续记录音频输入到缓冲区并处理 8 秒长度的缓冲区块。

如何将音频输入记录到缓冲区以及如何从那里读取 8 秒长的块?

谢谢!

您可以通过多种方式接收原始 PCM(在 AV Foundation 中:来自 AVCaptureDevice 的 AVCaptureAudioDataOutput,或插入处理分接头的 AVAudioEngine;在音频工具箱中:音频队列服务,RemoteIO 音频单元),然后写入文件,您可以使用 Audio Toolbox 的 AudioFile 或 ExtAudioFile,只需计算您编写的帧数并决定何时开始一个新的 8 秒文件。

正如 Rhythmic Fistman 上面提到的那样,如果你这样做会更安全

捕获回调 --pushes-to--> ring buffer <--pulls-from-- 文件写入代码

因为当您关闭一个文件并打开另一个文件时,捕获回调仍会进入,如果您阻塞文件 I/O,您很有可能会丢失一些数据地板。

我想另一种方法是从回调中填充内存中的 8 秒缓冲区,当缓冲区已满时,让另一个线程写入该文件,同时分配一个新缓冲区并开始记录到其中(显然,文件编写器将在完成后处理旧缓冲区。

编辑:此外,我在你的问题中没有看到任何关于 Swift 的信息,但是任何这些都应该适用于 Swift 或 C/Obj-C。