2010-03-28 12 views
6

Quiero generar una onda de sonido programáticamente y reproducirla con AVAudioPlayer. Tengo el código para codificar mi forma de onda como PCM lineal, 44100Hz, mono, 8 bits por muestra.Generar un búfer LPCM en memoria para AVAudioPlayer initWithData

No tengo claro qué tipo de sobre necesito envolver alrededor de este búfer para que AVAudioPlayer lo reconozca como PCM.

Respuesta

4

Quizás agregar un WAV header ayudaría?

+0

Me pregunto si esto es hablar por experiencia o por especulación. – iter

+0

No lo intenté, pero tiene que funcionar. – zoul

+0

Gracias por su aclaración. Estoy pensando menos en rodar mi propio codificador WAV y más en la línea de usar AudioToolbox para hacer el levantamiento para mí. – iter

4

PCM es solo una representación digital de una señal de audio analógica. Desafortunadamente, no encapsula ninguno de los metadatos sobre los canales de audio, profundidad de bits o frecuencia de muestreo, todo lo necesario para leer correctamente dichos datos PCM. Asumiría que AVAudioPlayer aceptaría estos datos PCM envueltos en un objeto NSData siempre que usted pueda establecer esas variables manualmente en el objeto AVAudioPlayer. Desafortunadamente, esas variables son de solo lectura, por lo que, aunque la documentación dice que AVAudioPlayer puede manejar cualquier cosa que Core Audio pueda manejar, no tiene forma de manejar datos de LPCM sin formato.

Según lo declarado por zoul, me imagino que la forma más fácil de hacerlo es lanzar un encabezado WAV, ya que el encabezado informa a AVPlayer de las variables necesarias anteriores. Tiene 44 bytes, se burla fácilmente y se define muy bien: utilicé el mismo definition dado anteriormente para implementar la codificación y decodificación del encabezado wav. Además, está justo antes de su sin modificar datos LPCM.

Cuestiones relacionadas