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를 누출하고 있습니다 –