Ich versuche, auf die Rohdaten für eine Audiodatei auf dem iPhone/iPad zuzugreifen. Ich habe den folgenden Code, der ein grundlegender Anfang auf dem Weg ist, den ich brauche. Allerdings bin ich ratlos, was ich tun soll, wenn ich einen AudioBuffer habe.Ermitteln der Anzahl der Frames in einem 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;
}
}
}
Im Grunde weiß ich nicht, wie zu sagen, wie viele Frames jeder Puffer enthält, so kann ich nicht zuverlässig die Daten aus ihnen extrahieren. Ich bin neu in der Arbeit mit rohen Audiodaten, daher bin ich offen für Vorschläge, wie man die mData-Eigenschaft der AudioBuffer-Struktur am besten liest. Ich habe auch in der Vergangenheit nicht viel mit Void-Zeigern gemacht, also wäre die Hilfe in diesem Zusammenhang auch großartig!
Ausgezeichnete Frage! Ihre Frage hat mir geholfen, mein ähnliches Problem zu lösen. – user523234
du leckst blockBuffer –