首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时音频处理Swift

实时音频处理Swift
EN

Stack Overflow用户
提问于 2017-03-12 16:02:43
回答 1查看 2.4K关注 0票数 1

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

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

相反,我希望不断地将音频输入记录到缓冲区中,并处理8秒长度缓冲区的块。

如何将音频输入录制到buffer中,以及如何从其中读取8秒长度的块?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中,这些都应该工作得很好。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42745154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档