【问题标题】:Real time audio processing Swift实时音频处理 Swift
【发布时间】:2017-08-02 09:04:53
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 环形缓冲区可能是您正在寻找的。​​span>
  • 谢谢你的回答,你能举一些插入缓冲区代码的例子吗?
  • 老实说,如果您想实时处理音频,您可能希望使用比 AVAudioRecorder 更低级别的东西。 -> developer.apple.com/library/content/documentation/MusicAudio/…
  • 是的,正是我要找的,谢谢

标签: ios swift audio core-audio audio-streaming


【解决方案1】:

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

正如上面 Rhythmic Fistman 所说,如果您执行类似的操作会更安全

捕获回调 --pushes-to--> 环形缓冲区

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2011-01-16
    • 2018-01-17
    • 2015-12-09
    相关资源
    最近更新 更多