iOS: Unidades de audio vs OpenAL vs Core Audio
core-audio audiounit (2)
Core Audio cubre muchas cosas, como leer y escribir varios formatos de archivo, convertir codificaciones, sacar fotogramas de transmisiones, etc. Gran parte de esta funcionalidad se recopila como "Audio Toolbox". Core Audio también ofrece múltiples API para procesar flujos de audio, para reproducción, captura o ambos. El nivel más bajo es Audio Units, que funciona con audio sin comprimir (PCM) y tiene algunas cosas buenas para aplicar efectos, mezclar, etc. Las colas de audio, implementadas encima de unidades de audio, son mucho más fáciles porque funcionan con formatos comprimidos (no solo PCM) y lo salvan de algunos desafíos de enhebrado. OpenAL también se implementa encima de unidades de audio; usted todavía tiene que usar PCM, pero al menos el enhebrado no da miedo. La diferencia es que, dado que no es de Apple, sus convenciones de programación son totalmente diferentes de Core Audio y el resto de iOS (más obviamente, es una API de inserción: si quieres transmitir con OpenAL, sondeas tus fuentes para ver si agotaron sus búferes e introdujeron otros nuevos, por el contrario, las colas de audio y las unidades de audio se basan en el tirón, en el sentido de que se obtiene una devolución de llamada cuando se necesitan nuevas muestras para la reproducción).
El nivel superior, como has visto, es algo bueno como Media Player y AV Foundation. Estos son mucho más fáciles si solo está reproduciendo un archivo, pero probablemente no le darán acceso lo suficientemente profundo si desea realizar algún tipo de efectos, procesamiento de señales, etc.
¿Podría alguien explicarme cómo encaja OpenAL con el esquema del sonido en el iPhone?
Parece que hay API en diferentes niveles para manejar el sonido. Los de mayor nivel son fáciles de entender.
Pero mi comprensión se vuelve turbia hacia el fondo. Hay Core Audio, Audio Units, OpenAL.
¿Cuál es la conexión entre estos? ¿OpenAL es el substrato, sobre el cual descansa Core Audio (que contiene como uno de sus objetos de bajo nivel Audio Units)?
OpenAL no parece estar documentado por Xcode, sin embargo, puedo ejecutar código que usa sus funciones.
Esto es lo que he descubierto:
El substrato es Core Audio. Específicamente, unidades de audio.
Entonces, las Unidades de Audio forman la capa base, y se ha construido un marco de bajo nivel sobre esto. Y todo el caboodle se denomina Core Audio.
OpenAL es una API multiplataforma: los creadores intentan reflejar la portabilidad de OpenGL. Algunas compañías están patrocinando OpenAL, incluidos Creative Labs y Apple.
Así que Apple ha proporcionado esta API, básicamente como una envoltura delgada sobre Core Audio. Supongo que esto es para permitir que los desarrolladores puedan pasar el código fácilmente. Tenga cuidado, es una implementación incompleta, por lo que si quiere que OpenAL haga algo que Core Audio puede hacer, lo hará. Pero de lo contrario no lo hará.
Tipo de contra intuitivo: simplemente mirando la fuente, parece que OpenAL es de nivel inferior. ¡No tan!