gpt4 book ai didi

ios - 实时音频处理 Swift

转载 作者:搜寻专家 更新时间:2023-11-01 06:03:50 28 4
gpt4 key购买 nike

我们的应用持续记录和处理来自 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com