我正試圖訪問iPhone/iPad上的音頻文件的原始數據。我有以下代碼,這是我需要的基本開始。然而,我有一個AudioBuffer後,我很難做什麼。確定核心音頻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 2012-07-19 22:20:34
你在泄漏blockBuffer – 2013-06-11 08:40:17