ios - 实时音频处理 Swift

标签 ios swift audio core-audio audio-streaming

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

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

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

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

谢谢!

最佳答案

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

正如 Rhythmic Fistman 上面提到的,如果你做类似的事情会更安全

捕获回调 --pushes-to--> 环形缓冲区 <--pulls-from-- 文件写入代码

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

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

编辑:此外,我在你的问题中没有看到任何关于 Swift 的内容,但是任何这些都应该在 Swift 或 C/Obj-C 中正常工作。

关于ios - 实时音频处理 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42745154/

相关文章:

Javascript 声音开始/停止和图像变化

c# - UWP MediaCapture-录制WAV音频,采样率16000,16位,单声道

ios - 如何使用 Carthage 构建仅适用于 ARM* 架构的框架?

ios - 在 UIViewController iOS 中获取 baseview 的引用

ios - Autolayout - 对齐表格单元格中的 View

ios - 如何在Appcelerator中使用父子关系更新 ImageView 的图像?

ios - 是否可以在没有索引的情况下使用 Realm 对象服务器实时同步?

swift - 将 Objective-C block 转换为 Swift 2.0

ios - iOS Dev- Hook 到应用程序音频输出

ios - UIView不会出现