2012-04-02 24 views
9

Mi proyecto comercial C++ Linux requiere la reproducción simultánea de archivos wav y tonos en niveles de volumen individuales. Unos pocos ejemplos de los sonidos:Simple C++ Sound API

• “clic” suena cada vez que el usuario pulsa PANTALLA jugaron a un volumen especificado por el usuario
• Advertencia sonidos que se ejecutan en el máximo volumen
• Tonos de aviso solicitados por otras aplicaciones en app- nivel de volumen especificado (0-100%)
• Soporte futuro para reproductor de MP3 y/o reproducción de video (con sonido) a volumen especificado por el usuario. Todos los otros sonidos deben continuar mientras se reproduce la canción/video.

Estamos utilizando Qt como nuestro marco de interfaz de usuario que tiene soporte QtMultimedia y Phonon. Sin embargo, escuché que el primero tiene soporte de sonido irregular en Linux y este último es una versión anterior y puede ser desaprobado en una próxima versión de Qt.

que he hecho algunas investigaciones y aquí están algunas APIs que he encontrado:
KDE Phonon
SFML
PortAudio
SDL_Mixer
OpenAL Soft
FMOD (aunque yo prefiero evitar derechos de licencia)
ALSA (quizás un nivel demasiado bajo ...)

Otras consideraciones: No se requiere multiplataforma, pero se prefiere. Queremos limitar las dependencias tanto como sea posible. No hay necesidad de funciones avanzadas como audio 3D o efectos especiales en el futuro previsible. Mi equipo no tiene mucha experiencia de audio por lo que la facilidad de uso es importante.

¿Alguno de estos excede mi aplicación? ¿Cuál parece ser el mejor?

Actualización: Resulta que ya dependemos de SDL por otras razones, así que decidimos usar SDL_Mixer. Para otras aplicaciones Embedded, sin embargo, me tomaría un largo tiempo en el combo PortAudio/libsndfile también debido a sus mínimas dependencias.

+0

Estábamos haciendo audio comercial en Linux incorporado hace unos años 2005-2008, y cuando recuerdo mi pila de audio C++ habló directamente con ALSA. http://www.alsa-project.org/main/index.php/Main_Page –

Respuesta

0

he utilizado el tiempo SDL_mixer una y otra vez, preciosa biblioteca, debería servir también para sus necesidades, la licencia es flexible y está muy documentado. También he experimentado con SFML, aunque más moderno y bastante documentado, me resulta un poco voluminoso e incómodo de trabajar, aunque ambas bibliotecas son muy similares. imo SDL_Mixer es el mejor.

Sin embargo, es posible que también desee comprobar este que encontré hace unas semanas http://www.mpg123.de/, no he profundizado demasiado en él, pero es muy ligero y de nuevo la licencia es flexible.

+0

Creo que vamos a darle una oportunidad a SDL_Mixer ya que uno de mis compañeros de trabajo tiene cierta experiencia con él. Actualizaré esta pregunta cuando tengamos algo funcionando. ¡Gracias! – Rocky

+0

Resulta que ya dependemos de SDL por otro motivo, así que vamos con SDL_Mixer. Para otras lecturas esto, sin embargo, me tomaría un largo tiempo en PortAudio también, especialmente para proyectos integrados. – Rocky

0

No se olvide de:

  • FFmpeg: es una solución completa, multi-plataforma para grabar, convertir y transmitir audio y vídeo.

  • GStreamer: es una biblioteca para construir gráficos de componentes de manejo de medios. Las aplicaciones que admite abarcan desde la reproducción simple de Ogg/Vorbis, la transmisión de audio/video hasta el procesamiento complejo de audio (mezcla) y de video (edición no lineal).

+0

Gracias, volví a leer la pregunta y una cosa que está clara es que tienen espacio en disco para una de las soluciones que he sugerido. No son tan grandes y los he usado en un par de ocasiones en mis proyectos integrados. Y no hace falta decir que aprender una de estas tecnologías agrega una gran habilidad a su arsenal de programación. – karlphillip

2

libao es simple, multiplataforma, Xiphy bondad. ¡También está documentation!

uso se describe here - uso simple es la siguiente:

+1

Su licencia, sin embargo, es la GPL y, por lo tanto, probablemente no cumpla con los requisitos del OP. – quinmars

+0

Ah, es posible que tenga razón, a pesar de que actualmente no se especifica en la pregunta, "comercial" probablemente significa que GPL está fuera. – gnud

2

Ir a PortAudio. Para obtener un audio sencillo sin gastos indirectos innecesarios, como las tuberías de transmisión complejas, o 3D, es la mejor salida disponible. Además, tienes un soporte multiplataforma realmente agradable. Es utilizado por varios programas de audio profesionales y tiene una calidad realmente alta.

+0

Parece que PortAudio tiene solo unas pocas dependencias, lo que es bueno. La mayoría de nuestros sonidos son archivos wav, sin embargo, y no es compatible con leer o escribir archivos de audio formateados. – Rocky

+0

Puede usar [libsndfile] (http://www.mega-nerd.com/libsndfile/) para cargar archivos de onda. Su interfaz es esencialmente imitando los archivos de E/S estándar de archivos C con alguna funcionalidad de configuración de formato adicional (s/g). La combinación libsnfile + portaudio le brinda una forma muy flexible, portátil y liviana de reproducir archivos wav y es probablemente un buen compromiso para un sistema integrado. –