2012-04-02 24 views
9

Il mio progetto commerciale C++ Linux commerciale richiede la riproduzione simultanea di file e toni wav a livello di volume individuale. Alcuni esempi di suoni:Semplice API C++ Sound

• “Click” suoni ogni volta che l'utente preme schermata riprodotta a un volume specificato dall'utente
• Attenzione suoni riprodotti al massimo volume
• Toni di avviso richiesti da altre applicazioni in App-Il livello di volume specificato (0-100%)
• Supporto futuro per lettore MP3 e/o riproduzione video (con audio) al volume specificato dall'utente. Tutti gli altri suoni dovrebbero continuare mentre il brano/video è in riproduzione.

Utilizziamo Qt come framework UI che supporta QtMultimedia e Phonon. Tuttavia, ho sentito il primo ha il supporto audio spotty su Linux e il secondo è una versione precedente e può essere abbandonata in un imminente rilascio di Qt.

Ho fatto qualche ricerca e qui ci sono un paio di API che ho incontrato:
KDE Phonon
SFML
PortAudio
SDL_Mixer
OpenAL Soft
FMOD (anche se io preferirei di evitare i costi di licenza)
ALSA (forse un po 'troppo basso livello ...)

Altre considerazioni: La multipiattaforma non è richiesta ma è preferibile. Vorremmo limitare il più possibile le dipendenze. Non sono necessarie funzionalità avanzate come l'audio 3D o effetti speciali nel prossimo futuro. Il mio team non ha molta esperienza audio, quindi la facilità d'uso è importante.

Qualcuno di questi è eccessivo per la mia applicazione? Quale sembra la soluzione migliore?

Aggiornamento: Si scopre eravamo già dipendenti da SDL per altre ragioni così abbiamo deciso di SDL_mixer. Per le altre applicazioni Embedded, tuttavia, impiegherei molto tempo nel combo PortAudio/libsndfile anche a causa delle loro dipendenze minime.

+0

Stavamo facendo audio commerciale su Linux embedded qualche anno prima 2005-2008, e mentre ricordo il nostro stack audio C++ parlato direttamente con ALSA. http://www.alsa-project.org/main/index.php/Main_Page –

risposta

0

ho utilizzato di volta in SDL_mixer di nuovo, bella biblioteca, dovrebbe servire anche per le vostre esigenze, la licenza è flessibile e molto documentato. ho anche sperimentato con SFML, mentre più moderno e abbastanza documentato, lo trovo un po 'ingombrante e ingombrante da lavorare anche se entrambe le librerie sono molto simili. imo SDL_Mixer è il migliore.

tuttavia si potrebbe anche voler controllare questo uno ho trovato qualche settimana fa http://www.mpg123.de/, non ho approfondito troppo in esso, ma è molto leggero e di nuovo la licenza è flessibile.

+0

Penso che daremo SDL_Mixer da quando uno dei miei colleghi ha qualche esperienza con esso. Aggiornerò questa domanda una volta che avremo qualcosa di funzionante Grazie! – Rocky

+0

Si scopre che eravamo già dipendenti da SDL per altri motivi, quindi stiamo andando con SDL_Mixer. Per altre letture, tuttavia, mi piacerebbe molto anche PortAudio, specialmente per i progetti Embedded. – Rocky

0

Non dimenticare:

  • FFmpeg: è un completo, soluzione multi-piattaforma per registrare, convertire e lo streaming audio e video.

  • GStreamer: è una libreria per la costruzione di grafici di componenti di gestione dei supporti. Le applicazioni supportate vanno dalla semplice riproduzione Ogg/Vorbis, streaming audio/video a elaborazione audio complessa (mixaggio) e video (editing non lineare).

+0

Grazie, ho riletto la domanda e una cosa che è chiara è che hanno spazio nel disco per una delle soluzioni che ho suggerito. Non sono così grandi e li ho usati entrambi in un paio di occasioni nei miei progetti embedded. E va da sé che imparare una di queste tecnologie aggiunge una grande abilità al tuo arsenale di programmazione. – karlphillip

2

libao è semplice, multipiattaforma, Xiphy bontà. C'è anche documentation!

Usage è delineato here - utilizzo semplice è questa:

+1

La sua licenza, tuttavia, è la GPL e quindi probabilmente non soddisferà i requisiti dell'OP. – quinmars

+0

Ah, potreste avere ragione, anche se non è attualmente specificato nella domanda, "commerciale" probabilmente significa che GPL è fuori. – gnud

2

Vai per PortAudio. Per un semplice audio senza costi aggiuntivi non necessari, come le condutture di streaming complesse o il 3D, è la migliore soluzione disponibile. Inoltre, hai un bel supporto multipiattaforma. È utilizzato da diversi programmi audio professionali e ha davvero alta qualità.

+0

Sembra che PortAudio abbia solo poche dipendenze, il che è bello. La maggior parte dei nostri suoni sono file wav, tuttavia, e non supporta la lettura o la scrittura di file audio formattati. – Rocky

+0

È possibile utilizzare [libsndfile] (http://www.mega-nerd.com/libsndfile/) per caricare i file wave. La sua interfaccia sta essenzialmente imitando i file I/O standard del file C con alcune funzionalità di etting di formato aggiuntivo (s/g). La combinazione libsnfile + portaudio ti offre un modo molto flessibile, portatile e leggero per riprodurre file wav ed è probabilmente un buon compromesso per un sistema embedded. –