J'essaie d'accéder aux données brutes pour un fichier audio sur l'iPhone/iPad. J'ai le code suivant qui est un début de base sur le chemin dont j'ai besoin. Cependant, je suis perplexe sur ce qu'il faut faire une fois que j'ai un AudioBuffer.Déterminer le nombre de trames dans un AudioBuffer Audio Core
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;
}
}
}
Essentiellement, je ne sais pas comment dire combien de cadres chaque tampon contient donc je ne peux pas extraire de manière fiable les données de leur part. Je suis nouveau à travailler avec des données audio brutes ainsi je suis ouvert à toutes les suggestions dans la façon de lire au mieux la propriété mData de la structure AudioBuffer. Je n'ai pas non plus fait grand-chose avec des pointeurs vides dans le passé, donc aider dans ce contexte serait génial aussi! AudioBuffer.mDataByteSize vous indique la taille de la mémoire tampon.
Excellente question! Votre question a aidé à résoudre mon problème similaire. – user523234
vous fuyez blockBuffer –