2010-10-25 16 views
33

¿Podría alguien explicarme cómo encaja OpenAL con el esquema del sonido en el iPhone?iOS: Unidades de audio vs OpenAL vs Core Audio

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.

+0

[Gran información aquí] (https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html) – bobobobo

Respuesta

36

Esto es lo que he descubierto:

el substrato esté Core Audio. Específicamente, unidades de audio.

Por lo tanto, las Unidades de audio forman la capa base y, a continuación, se ha creado una estructura de bajo nivel. 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!

+0

+1, Buen resumen. Me gustaría agregar que, en mi experiencia, OpenAL es un poco raro en iOS y debe evitarse si es posible. CoreAudio no es fácil, pero eso se debe a que el procesamiento de audio en general no es fácil, pero al menos funciona de manera muy confiable. – DarkDust

+0

He tenido buenos resultados con OpenAL y Cocos2D también lo usa.¡No sabía que no era el API de nivel más bajo y debo decir que estoy un poco molesto! –

+6

Una cosa potencialmente más útil de saber: "La unidad de mezclador 3D [audio] es la base sobre la que se construye OpenAL" - de Apple Docs: http://developer.apple.com/library/ios/#DOCUMENTATION/MusicAudio /Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingFundamentals/AudioUnitHostingFundamentals.html –

34

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 brindarán acceso lo suficientemente profundo si desea realizar algún tipo de efecto, procesamiento de señal, etc.

+0

Gran explicación. –

+0

Buen trabajo. Debería ser la respuesta aceptada. – yothenberg

Cuestiones relacionadas