私は、オーディオを(C ++)分析アルゴリズムに渡すことができる形式でiPhoneに取り込む作業を行っています。もちろん、多くのオプションがあります。TrailsinthesandのAudioQueueチュートリアルは、物事を開始します。
オーディオコールバックは、しかし、を与えますAudioQueueRef
、そして私は物事のこちら側でAppleのドキュメントが薄いと感じています。ファイルに書き込むための組み込みメソッドですが、データを確認するために実際にパケット内をピアリングする場所はありません。
データが必要です。私はファイルに何も書きたくありません。それはすべてのチュートリアル、そしてAppleの便利なI/Oオブジェクトでさえも狙っているようです。AppleはAVAudioRecorder
(腹立たしいことに)あなたにレベルを与えてデータを書きますが、実際にはあなたにそれにアクセスすることはできません。私が何かを逃していない限り...
これを行う方法?以下のコードにinBuffer->mAudioData
は、興味をそそるほど近いものがありますが、この「データ」の形式やアクセス方法に関する情報は見つかりません。
AudioQueueコールバック:
void AudioInputCallback(void *inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription *inPacketDescs)
{
static int count = 0;
RecordState* recordState = (RecordState*)inUserData;
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
++count;
printf("Got buffer %d\n", count);
}
そして、オーディオをファイルに書き込むためのコード:
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData); // THIS! This is what I want to look inside of.
if(status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}