Swift 3 中的 AVAudioRecorder:获取字节流而不是保存到文件

问题描述 投票:0回答:2

我是 iOS 编程新手,我想使用 Swift 3 将 Android 应用程序移植到 iOS。该应用程序的核心功能是从麦克风读取字节流并实时处理该流。因此,将音频流存储到文件并在录音停止后对其进行处理是不够的。

我已经找到了可以工作的 AVAudioRecorder 类,但我不知道如何实时处理数据流(过滤、将其发送到服务器等)。 AVAudioRecorder 的 init 函数如下所示:

AVAudioRecorder(url: filename, settings: settings)

我需要一个类,我可以在其中注册一个事件处理程序或类似的东西,每次读取 x 个字节时都会调用该类,以便我可以处理它。

这可以用 AVAudioRecorder 实现吗?如果没有,Swift 库中是否还有另一个类可以让我实时处理音频流?在 Android 中我使用 android.media.AudioRecord 所以如果 Swift 中有一个等效的类那就太好了。

问候

ios swift microphone avaudiorecorder audio-processing
2个回答
2
投票

使用Core Audio框架中的Audio Queue服务。 https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html#//apple_ref/doc/uid/TP40005343-CH4-SW1

static const int kNumberBuffers = 3;                            // 1
struct AQRecorderState {
    AudioStreamBasicDescription  mDataFormat;                   // 2
    AudioQueueRef                mQueue;                        // 3
    AudioQueueBufferRef          mBuffers[kNumberBuffers];      // 4
    AudioFileID                  mAudioFile;                    // 5
    UInt32                       bufferByteSize;                // 6
    SInt64                       mCurrentPacket;                // 7
    bool                         mIsRunning;                    // 8
};

以下是该结构中字段的描述:

1 设置要使用的音频队列缓冲区的数量。 2 AudioStreamBasicDescription 结构(来自 CoreAudioTypes.h) 表示写入磁盘的音频数据格式。这种格式得到 由 mQueue 字段中指定的音频队列使用。 mDataFormat 字段最初由程序中的代码填充,如中所述 设置录音的音频格式。这是一个很好的做法 通过查询音频队列来更新该字段的值 kAudioQueueProperty_StreamDescription 属性,如中所述 从音频队列获取完整的音频格式。在 Mac OS X v10.5 上, 请改用 kAudioConverterCurrentInputStreamDescription 属性。

有关AudioStreamBasicDescription结构的详细信息,请参见Core 音频数据类型参考。

3 您的应用程序创建的录音音频队列。

4 一个数组,保存指向音频队列缓冲区的指针,该缓冲区由 音频队列。

5 一个音频文件对象,代表您的程序所放入的文件 记录音频数据。

6 每个音频队列缓冲区的大小(以字节为单位)。这个值是 在这些示例中,在 DeriveBufferSize 函数中计算后 音频队列已创建且在启动之前。请参阅写一个 导出录音音频队列缓冲区大小的函数。

7 从当前写入的第一个数据包的数据包索引 音频队列缓冲区。

8 一个布尔值,指示音频队列是否在 跑步。


0
投票

使用

AVAudioEngine.inputNode.installTap

这篇文章有帮助https://stackoverflow.com/a/48107265

© www.soinside.com 2019 - 2024. All rights reserved.