es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convirtiendo NSData a AVAudioPCMBuffer.

Tengo un flujo de datos, específicamente proveniente de un flujo MP3.
En un intento de convertirlo a un AVAudioPCBBuffer, estoy creando un AVAudioFormat para describirlo de la siguiente manera:

AVAudioFormat* format = [[AVAudioFormat alloc] initWithStreamDescription:&description];

al momento de imprimir format, el resultado es:

<AVAudioFormat 0x2818944b0:  2 ch,  48000 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame>

Ahora, cuando intento inicializar el AVAudioPCMBuffer de esta manera:

AVAudioPCMBuffer* pcbBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:format frameCapacity:frameCount];

Obtengo una excepción:

required condition is false: isPCMFormat(fmt)

¿Qué estoy haciendo mal?

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error, parece que el AVAudioFormat que estás utilizando no es un formato PCM (modulación de código de pulsos), que es necesario para el AVAudioPCMBuffer. MP3 es un formato de audio comprimido y necesita ser decodificado a un formato PCM antes de ser utilizado en un AVAudioPCMBuffer.

    Necesitarás primero decodificar el flujo de MP3 utilizando algo como AVAssetReader de AVFoundation o una biblioteca de terceros como libmp3lame, y luego crear un AVAudioPCMBuffer con los datos PCM resultantes.

    Alternativamente, puedes considerar usar AVAudioPlayer o AVPlayer para manejar la reproducción del flujo de MP3, ya que estas clases se encargarán de la decodificación y el almacenamiento en búfer de los datos de audio por ti.

Comments are closed.