plattformübergreifende Sound-API [geschlossen]

8

Ich bin dabei, eine Anwendung zu entwickeln, die Live-Streaming von Audio erfordert. Ich würde es vorziehen, einige plattformübergreifende (Windows / Linux / BSD) Open-Source-Bibliothek in C oder C ++ geschrieben zu verwenden, obwohl das Schreiben mit den entsprechenden Sound-APIs des jeweiligen Betriebssystems immer noch eine Option ist.

Ich habe ein bisschen über verschiedene Sound-Bibliotheken gelesen, einschließlich SFML, SDL und PortAudio. Zugegeben, ich habe noch nicht genug über Sound in FreeBSD und Linux geforscht (wie ähnlich ist es zwischen diesen beiden?)

Die wichtigsten Anforderungen sind

  1. holen Sie Audio von einem ausgewählten Mikrofon / Mikrofonen, um über das Netzwerk zu senden,
  2. sendet Daten an eine Auswahl von Ausgabegeräten,
  3. verarbeite den Sound (Filterung, Rauschen aufräumen, Streams multiplexen usw.), aber das kann gemacht werden, sobald ich die Audiodaten habe, die Bibliothek selbst muss das NICHT können.
  4. haben eine relativ niedrige Latenz

Mein Hauptanliegen ist, dass diese erwähnten APIs hauptsächlich auf Spiele ausgerichtet sind (wo der Sound normalerweise von der Festplatte geladen wird und nicht viel Tonaufzeichnung involviert ist und nicht über das Netzwerk mit gleicher Wichtigkeit zwischen Aufnahme und Streaming gestreamt wird Wiedergabe.

Hat jemand irgendwelche Hinweise / Warnungen / Vorschläge zu diesen oder anderen Sound-APIs oder zu den Vor- und Nachteilen, den langen Weg zu gehen und dies in den APIs der jeweiligen Betriebssysteme zu implementieren?

HINWEIS: während dies: "Fragen, die uns bitten, ein Buch, ein Werkzeug, eine Softwarebibliothek, ein Tutorium oder eine andere Offsite-Ressource zu empfehlen oder zu finden, sind nicht Thema für Stack Overflow" macht die Frage off-topic, wenn man auch "wie sie tendiert" berücksichtigt um meine Meinung zu beantworten und Spam zu bekommen ", dann denke ich nicht, dass diese Frage geschlossen werden sollte. Jemand, der nach einer solchen Bibliothek wie beschrieben sucht, wird kaum etwas finden können und die Antworten auf diese Frage fassen praktisch alle verfügbaren Optionen zusammen. Dies ist also in der Regel "deckt allgemein Software-Tools, die häufig von Programmierern verwendet werden;" Kategorie der angenommenen Antworten.

    
msam 22.06.2012, 06:39
quelle

5 Antworten

7

PortAudio ist eine ausgezeichnete Wahl für die Anwendung, die Sie beschreiben - es läuft auf all diesen Plattformen, ist in C geschrieben, bietet niedrige Latenz und hat sowohl Callback- als auch blockierende I / O-Optionen. Es entspricht definitiv Ihren Anforderungen und ist nicht besonders auf Spiele ausgerichtet. In der Tat würde ich sagen, es gibt andere Apis, die besser für Spiele sind, während PortAudio besser für allgemeine Audio-I / O wie VoIP-ähnliche Anwendungen, Audio-Player, Pro-Audio-Anwendungen, Audio-Aufnahme, Software-Radios, usw.

Eine andere Option, die Sie in Betracht ziehen könnten, ist RTAudio, mit der ich nicht so vertraut bin. Mein Verständnis ist es ein bisschen einfacher (keine blockierende I / O AFAIK), und hat Unterstützung für mehr Plattformen, einschließlich mobiler Betriebssysteme, obwohl PortAudio Leute daran arbeiten.

Ihre Frage zu FreeBSD vs. Linux: Linux verwendet ALSA, während andere Unixe OSS verwenden. Sowohl OSS als auch ALSA bieten Kompatibilitätsebenen, so dass ALSA OSS-Kompatibilität hat und umgekehrt, aber meiner Erfahrung nach gibt es Fehler in beiden Kompatibilitätsschichten. Vielleicht sind die Dinge besser geworden, seit ich sie zum letzten Mal benutzt habe.

Einige Linux-Desktops verwenden PulseAudio zusätzlich zu ALSA. Ich bin mir nicht sicher, ob dies für FreeBSD zutrifft. Aus irgendeinem Grund wird ALSA auf den meisten Systemen standardmäßig im exklusiven Modus konfiguriert. Während dies in der Theorie leicht zu beheben ist, sind die Konfigurationsdateien seltsam und die meisten Benutzer haben es nicht getan und werden dies auch nie tun, was bedeutet, dass sobald Sie PulseAudio übernehmen, Sie nicht mehr direkt auf die ALSA-Geräte zugreifen können auch einen PulseAudio-Treiber, es sei denn, Sie möchten Ihre Benutzer dazu bringen, ihre Konfiguration zu ändern (was möglicherweise der Fall ist, wenn Ihre Anwendung eine sehr geringe Latenz benötigt).

Ich bin mir ziemlich sicher, dass PortAudio PulseAudio unterstützt, ungeachtet dessen, was es auf der Website zu sagen hat oder nicht. Ich werde auf der Mailing-Liste fragen und hier updaten.

UPDATE: Jemand auf der Mailing-Liste dachte, dass Sie als Treiber für den Zugriff auf PulseAudio verwenden können. Das sind (tolle!) Neuigkeiten für mich, aber da ist es.

    
Bjorn Roche 22.06.2012, 16:27
quelle
2

Ich halte SDL und OpenAL für sowohl verbreitet als auch allgemein unterstützt. Sofern diese nicht Ihren Anforderungen entsprechen, würde ich vorschlagen, nicht auf eine niedrigere Ebene zu gehen, da Sie die Plattformunabhängigkeit verlieren.

Der Grund, warum sie auf Spiele ausgerichtet zu sein scheinen, liegt einfach darin, dass dies einer der schwierigsten Anwendungsfälle ist. Also, wenn Sie Spiele unterstützen können, werden Sie wahrscheinlich alles unterstützen, was eine andere App wollen wird (kurz vor Studio-Software).

Betrachten Sie Ihr Ziel niedriger Latenz. Spiele erfordern eine sehr geringe Latenzzeit, um sicherzustellen, dass Soundeffekte gut mit Aktionen auf dem Bildschirm übereinstimmen. Ich nehme an, dies ist ein ähnlicher Grund, warum Sie dies möchten (damit Ihr Sound zu Ihrem Videostream passt und es keine Pausen im Sprachkanal gibt).

Übrigens ist Ihre Wahrnehmung von Spielen nicht korrekt. Viele Spiele haben Benutzer-Sprachkanäle für die Teamkommunikation. Zusätzlich können sie prozedurale Sound- und Soundeffekte enthalten.

Ich habe einen weiteren SFML gefunden, der Unterstützung bei der Aufnahme bietet. Ich weiß nicht viel darüber, aber ich habe gesehen, dass es SDL ersetzen kann.

    
edA-qa mort-ora-y 22.06.2012 07:20
quelle
2

libsoundio ist eine Low-Level-C-Bibliothek, die Ihren Anforderungen entspricht.

Eine Einschränkung: Es unterstützt noch nicht OSS (FreeBSD) oder Sndio (OpenBSD).

    
andrewrk 24.10.2015 19:30
quelle
0

Ich würde vorschlagen, dass Sie es auf dem plattformübergreifenden Qt-Framework (Linux / Mac / Windows) entwickeln und seine eigenen Qt-Bibliotheken verwenden. Im QtMultimedia-Modul können Sie QAudioInput verwenden, um Rohaudio von einem Mikrofon aufzunehmen Verwenden Sie QtMultimedia zum Verarbeiten.

Qt Framework ist sehr optimiert für Multimedia und Gaming-Anwendungen, so dass Sie nicht auf die Leistung verlieren.

    
Ashish Gaurav 22.06.2012 07:53
quelle
-1

linphone enthält mediastreamer2 für genau diesen Zweck

    
Boris 08.07.2012 10:36
quelle

Tags und Links