iPhone/iPadでオーディオファイルの生データにアクセスしようとしています。私は必要なパスを基本的に開始する次のコードを持っています。しかし、AudioBufferがあれば、私は何をすべきか分かりません。Core Audio AudioBufferのフレーム数を確認してください
AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:urlAsset error:nil];
AVAssetReaderTrackOutput *assetReaderOutput = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:[[urlAsset tracks] objectAtIndex:0] outputSettings:nil];
[assetReader addOutput:assetReaderOutput];
[assetReader startReading];
CMSampleBufferRef ref;
NSArray *outputs = assetReader.outputs;
AVAssetReaderOutput *output = [outputs objectAtIndex:0];
int y = 0;
while (ref = [output copyNextSampleBuffer]) {
AudioBufferList audioBufferList;
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
for (y=0; y<audioBufferList.mNumberBuffers; y++) {
AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
SInt16 *frames = audioBuffer.mData;
for(int i = 0; i < 24000; i++) { // This sometimes crashes
Float32 currentFrame = frames[i]/32768.0f;
}
}
}
基本的に、各バッファに含まれるフレームの数を確認する方法がわからないため、データを確実に抽出できません。私は生のオーディオデータを扱うのが初めてであるので、AudioBufferの構造体のmDataプロパティを最もよく読み取る方法についての提案はすべて公開されています。私も過去には無効なポインタをあまり使っていないので、この文脈での助けも素晴らしいでしょう!
優れた質問!あなたの質問は、私の同様の問題を解決するのに役立ちました。 – user523234
blockBufferが漏れています –