5

私の目標は、オーディオを AAC 形式で録音し、ネットワーク接続を介してストリームとして送信することです。

私は Audio Queue Services を使用しており、コードは 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 に答える