サウンドを録音する iPhone アプリケーションを作成しています。私は Audio Queue Services を利用していますが、録音にはすべてがうまく機能します。
問題は、ファイル書き込みにAudioFileWritePacketsを使用していて、同じ「AAC + ADTS」パケットをネットワークソケットに入れようとしているということです。
一部の「ヘッダー」または「adts ヘッダー」が欠落している可能性があるため、結果のファイルは異なります。ADTS ヘッダーや AAC ヘッダーの書き方についてアイデアを探していますか? コミュニティはこれについて私を支援してくれますか、またはこれを行う方法を示したガイドを紹介してくれますか?
現在、Buffer Handler メソッドがあります。
void Recorder::MyInputBufferHandler(void inUserData,
AudioQueueRefinAQ, AudioQueueBufferRefinBuffer,
const AudioTimeStamp*inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription*inPacketDesc) {
AQRecorder *aqr = (AQRecorder *)inUserData;
try {
if (inNumPackets > 0) {
// write packets to file
XThrowIfError(AudioFileWritePackets(aqr->mRecordFile,
FALSE,
inBuffer->mAudioDataByteSize,
inPacketDesc,
aqr->mRecordPacket,
&inNumPackets,
inBuffer->mAudioData),
"AudioFileWritePackets failed");
fprintf(stderr, "Writing.");
// We write the Net Buffer.
[aqr->socket_if writeData :(void *)(inBuffer->mAudioData)
:inBuffer->mAudioDataByteSize];
aqr->mRecordPacket += inNumPackets;
}
// if we're not stopping, re-enqueue the buffe so that it gets filled again
if (aqr->IsRunning()) {
XThrowIfError(AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
}
catch (CAXException e) {
char buf[256];
fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}
}