Mein kommerzielles eingebettetes C ++ Linux-Projekt erfordert das gleichzeitige Abspielen von WAV-Dateien und -Tönen auf individuellen Lautstärkepegeln. Ein paar Beispiele für die Sounds:
• "Klick" ertönt jedes Mal, wenn der Benutzer den Bildschirm drückt, der auf einem benutzerdefinierten Volume abgespielt wurde
• Warntöne werden bei maximaler Lautstärke abgespielt
• Warntöne, die von anderen Anwendungen auf der von der App angegebenen Lautstärke angefordert wurden (0-100%)
• Zukünftige Unterstützung für MP3-Player und / oder Videowiedergabe (mit Ton) auf benutzerdefinierter Lautstärke. Alle anderen Sounds sollten fortgesetzt werden, während der Song / das Video abgespielt wird.
Wir verwenden Qt als unser UI-Framework, das QtMultimedia und Phonon unterstützt. Allerdings habe ich gehört, dass das erstere eine solide Tonunterstützung unter Linux hat und das letztere eine ältere Version ist und in einer kommenden Qt-Version veraltet sein könnte.
Ich habe ein paar Nachforschungen angestellt und hier sind ein paar APIs, auf die ich gestoßen bin:
KDE Phonon
SFML
PortAudio
SDL_Mixer
OpenAL Soft
FMOD (obwohl ich Lizenzgebühren lieber vermeiden möchte)
ALSA (vielleicht ein bisschen zu niedrig ...)
Andere Überlegungen: Cross-Plattform ist nicht erforderlich, aber bevorzugt. Wir möchten Abhängigkeiten so weit wie möglich einschränken. Erweiterte Funktionen wie 3D-Audio oder Spezialeffekte sind in absehbarer Zeit nicht erforderlich. Mein Team hat nicht viel Audio-Erfahrung, also ist die Benutzerfreundlichkeit wichtig.
Sind diese Overkills für meine Bewerbung? Welche scheint am besten zu passen?
Aktualisierung: Es stellte sich heraus, dass wir aus anderen Gründen bereits von SDL abhängig waren, und entschieden uns für SDL_Mixer. Für andere Embedded-Anwendungen würde ich jedoch aufgrund ihrer minimalen Abhängigkeiten lange im PortAudio / libsndfile-Combo dauern.
Ich habe SDL_Mixer immer und immer wieder verwendet, schöne Bibliothek, es sollte gut für Ihre Bedürfnisse dienen, die Lizenz ist flexibel und es ist stark dokumentiert. Ich habe auch mit SFML experimentiert, während moderner und ziemlich dokumentiert, finde ich es ein bisschen sperrig und umständlich, mit zu arbeiten, obwohl beide Bibliotheken sehr ähnlich sind. imo SDL_Mixer ist der beste .
Aber vielleicht möchten Sie auch dieses hier finden, das ich vor ein paar Wochen Ссылка gefunden habe, ich habe mich nicht allzu sehr damit beschäftigt es ist aber sehr leicht und die Lizenz ist wieder flexibel.
libao ist einfach, Cross-Plattform-, Xiphy-Güte. Es gibt auch eine Dokumentation !
Die Verwendung ist hier hier beschrieben - die einfache Verwendung lautet wie folgt:
ao_initialize()
) ao_open_live()
oder ao_open_file()
ao_play()
ao_close()
und dann ao_shutdown()
zum Aufräumen. Gehen Sie für PortAudio. Für einfach Audio ohne unnötigen Overhead wie komplexe Streaming-Pipelines oder 3D, ist es die beste lib draußen. Außerdem hast du wirklich nette plattformübergreifende Unterstützung. Es wird von mehreren professionellen Audioprogrammen verwendet und hat eine wirklich hohe Qualität.
Vergessen Sie nicht:
FFmpeg : ist eine komplette, plattformübergreifende Lösung zum Aufzeichnen, Konvertieren und Streamen von Audio- und Videodateien.
GStreamer : ist eine Bibliothek zum Erstellen von Graphen von Medien-Handling-Komponenten. Die von ihm unterstützten Anwendungen reichen von einfacher Ogg / Vorbis-Wiedergabe über Audio- / Video-Streaming bis hin zu komplexer Audio- (Mischung) und Videoverarbeitung (nichtlineare Bearbeitung).