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

By simon at 2018-02-07 • 0人收藏 • 70人看过

我是iOS编程新手,我想使用iOS移植一个Android应用程序 Swift 3.应用程序的核心功能是读取从字节流 麦克风和现场处理这个流。所以存储是不够的 音频流到file并在记录停止后进行处理。 我已经找到了AVAudioRecorder类的工作,但我不知道如何 亲将数据流直播(过滤,发送到服务器等)。该 AVAudioRecorder的init函数如下所示:

AVAudioRecorder(url: filename, settings: settings)
我需要的是一个类,我可以注册一个事件处理程序或 类似于每次调用x的东西字节已被阅读,所以我可以 处理它。 这可能与AVAudioRecorder?如果不是的话,那里还有另外一个班 斯威夫特李能让我现场处理音频流吗?在Android我使用 android.media.AudioRecord所以这将是伟大的,如果有一个等同的班级 在Swift中。 问候

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

在Core Audio框架中使用Audio Queue服务。

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结构cture(来自CoreAudioTypes.h)表示 音频数据格式写入磁盘。该格式被音频队列使用 规范在mQueue领域。 mDataFormat字段最初被填充 代码在您的程序中,如设置音频中所述录制格式。它 通过查询音频来更新此字段的值是一种很好的做法 队列的kAudioQueueProperty_StreamDescription属性,如中所述 从音频队列中获取完整的音频格式。在Mac OS X v10.5上,使用 蛟而不是dioConverterCurrentInputStreamDescription属性。

有关AudioStreamBasicDescription结构的详细信息,请参阅Co重新音频 数据类型参考。

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

4一个数组,指针指向t他由音频管理的音频队列缓冲区 队列。

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

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

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

8布尔指示音频队列是否正在运行的值。

登录后方可回帖

Loading...