Reproducción de MP3 usando unidades IO y remoto de audio en el iPhone ... posible?

StackOverflow https://stackoverflow.com/questions/1857637

  •  13-09-2019
  •  | 
  •  

Pregunta

quiero reproducir un mp3 en lugar de un archivo sin comprimir usando RemoteIO / AudioUnit. El uso de archivos sin comprimir, obviamente, utiliza demasiado espacio en disco (30 MB vs 3 MB para mp3).

Es esto posible? Si es así, se puede proporcionar un poco de ventaja inicial código?

Un millón de gracias.

¿Fue útil?

Solución

Sí, es posible. Pero requiere múltiples uso API de audio y varios subprocesos.

Debido a las restricciones de tiempo real de la rosca de devolución de llamada buffer de unidad de audio, tendrá que hacer la conversión de archivos comprimidos a muestras de PCM primas fuera de la devolución de llamada unidad de audio. Usted podría utilizar los servicios de archivos de audio o AVAssetReader extendido para hacer la conversión a las muestras sin comprimir fuera de la devolución de llamada unidad de audio. Sin embargo, no es necesario descomprimir el archivo entero de una vez. Un búfer sin comprimir menos que una fracción de segundo probablemente hará, siempre y cuando mantenga llenándolo lo suficiente por delante de la tasa de consumo de líquido tampón de devolución de llamada unidad de audio. Esto se puede hacer en un hilo conducido temporizador independiente que monitorea el consumo de memoria intermedia, y descomprime suficiente de audio en consecuencia, tal vez en un búfer FIFO anillo o circular.

Lo que va a terminar con será similar a una reescritura de la capa de API de audio de cola, pero con más capacidad de personalización.

Otros consejos

¿Cómo bajo nivel quiere ir? Se podría utilizar la API AudioHardware:

err = AudioDeviceAddIOProc(deviceID, ioProc, self);

y en su IOProc llenar los amortiguadores ti mismo, escuchar los cambios de hardware, y tratar con rosca en tiempo real y un montón de otras cosas de bajo nivel.

Estoy asumiendo que ya está decodificar los datos de mp3 con AudioConverter y saber cómo hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top