5

我的目标是以 AAC 格式录制音频并将其作为流通过网络连接发送。

我正在使用音频队列服务,并且我的代码基于 SpeakHere 示例。我知道要写入文件,它使用 AudioFileWritePackets() 函数。

这是回调函数:

void MyInputBufferHandler(void* inUserData,
                          AudioQueueRef inAQ,
                          AudioQueueBufferRef inBuffer,
                          const AudioTimeStamp * inStartTime,
                          UInt32 inNumPackets,
                          const AudioStreamPacketDescription* inPacketDesc) {

    Recorder *aqr = (Recorder *)inUserData;

    if (inNumPackets > 0) {
        // write packets to file
        AudioFileWritePackets(aqr->mRecordFile, FALSE,
                              inBuffer->mAudioDataByteSize,
                              inPacketDesc, aqr->mRecordPacket, 
                              &inNumPackets, inBuffer->mAudioData);

        aqr->mRecordPacket += inNumPackets;
    }

    // if we're not stopping, re-enqueue the buffe so that it gets filled again
    if ([aqr IsRunning])
        AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);
}

起初我以为AudioFileWritePackets是通过直接写入inBuffer->mAudioData. 但是,当我手动将 mAudioData 的内容写入文件时,解码似乎不起作用。

在检查和比较AudioFileWritePackets写入文件的原始数据以及我只是将 mAudioData 写入文件的原始数据时,他们似乎已经附加了一个标题。

由于我不知道AudioFileWritePackets()内部是如何工作的,我的问题是,我怎样才能将录制的音频写入缓冲区(或流,如果你更喜欢这样称呼它)而不是文件,这样我就可以稍后通过网络连接发送它?

同样,简而言之,这就是我需要的:以 aac 格式录制音频并通过网络连接流式传输音频。

谢谢!我一直在寻找我的头蓝色...

PS:如果你指出我现有的项目,请确保它们是我需要的。我真的觉得我一直在寻找所有可能的项目>.<

4

1 回答 1

0

这应该会有所帮助。

检查“SpeechToTextModule.m”中的“HandleInputBuffer”方法。

于 2013-11-13T12:18:38.657 回答