Las respuestas aquí no son genéricas. La llamada a CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
puede fallar cuando el tamaño AudioBufferList
necesita un tamaño diferente. Al tener muestras no intererleaved como ejemplo.
La forma correcta es llamar al CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
dos veces. La primera llamada consulta el tamaño necesario para el AudioBufferList
y el segundo realmente llena el AudioBufferList
.
size_t bufferSize = 0;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(
sampleBuffer,
&bufferSize,
NULL,
0,
NULL,
NULL,
0,
NULL
);
AudioBufferList *bufferList = malloc(bufferSize);
CMBlockBufferRef blockBuffer = NULL;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(
sampleBuffer,
NULL,
bufferList,
bufferSize,
NULL,
NULL,
kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment,
&blockBuffer
);
// handle audio here
free(bufferList);
CFRelease(blockBuffer);
En un ejemplo del mundo real debe realizar el control de errores y también que no debe malloc cada cuadro, en lugar caché el AudioBufferList
.
¡Muchas gracias! Esa era la parte que me faltaba. –
Cuando uso este método, mi sonido se vuelve agitado, cuando uso el método de @ amrox, que usa un char *, todo funciona bien cuando se altera el volumen haciendo algo como 'samples [i] * = 0.5;' ¿Alguna razón para esto? – Dex
¿Es posible obtener las muestras y luego escribirlas en otro archivo de audio? Intento revertir un archivo de audio. Por favor, eche un vistazo a [mi pregunta] (http://stackoverflow.com/questions/41310944/reverse-an-audio-file-swift-objective-c). Cualquier ayuda sería apreciada. –