Frage

Ich arbeite an einer Audio-Anwendung, die in C geschrieben I Live-Audio-Wiedergabe unter Windows zur Verfügung stellen muß. Ich brauche die Audio-API zu verwenden, um zu entscheiden. Ich plane der Grund waveOut API verwenden , aber ich wollte überprüfen, um zu sehen, was hier die Gemeinschaft empfiehlt.

Ich möchte Code, der einfach auf jede neue Version von Windows funktionieren wird, ohne dass Bibliotheken installieren; und ich möchte minimale Latenz.

Ich brauche oder will keine „Effekte“, ich muss nur treu, was Welle tastet die Anwendung spielen erzeugt.

Mein Verständnis ist, dass die meisten der professionellen Audio-Anwendungen auf Windows verwenden, ASIO, die eine ausgezeichnete niedrige Latenz gibt, aber ich weiß nicht ASIO wollen, weil ich meinen Code einfach funktionieren soll, und die meisten Menschen ASIO nicht vorinstalliert auf ihren Computern. (Zu einem späteren Zeitpunkt kann ich gehe zurück und fügen Sie auch ASIO als Option, aber ich bin für die allgemeinste Lösung gehen zuerst.)

Gibt es irgendetwas gibt, die besser wäre als waveOut für meine Zwecke, oder ist das die beste Wahl?

War es hilfreich?

Lösung

Es hängt davon ab, was Sie zu tun versuchen. Das grundlegende waveOut Audio-API ist besser für Audio-Streaming. Damit können Sie mehrere Puffer Warteschlange und haben sie automatisch nacheinander gespielt. Aber wenn Audio spielt, und Sie wollen, es zu ändern, oder fügen Sie etwas, um es, das ist relativ hart.

DirectX Audio ist besser für ereignisbasierte Audio. Sie können ohne die selbst mischen zu tun haben zur gleichen Zeit spielen mehrere Dinge müssen. Sie können kleine Stücke von Audio-leicht hinzufügen oder entfernen - wie einen Ton zu spielen, wenn der Benutzer den Auslöser auf seine Waffe zieht. Aber Streaming (das heißt spielen 1-Puffer nach dem anderen) härter.

waveOut soll die Wiedergabe von Audio zu erleichtern, die konstant ist, wie eine MP3-Datei. DirectX ist für Audio ausgelegt, die intermittierend ist, wie Feedback in einem Spiel.

ASIO ist wie die schlimmsten waveOut und DirectX in Hinblick auf die Schwierigkeit der Programmierung. Und es ist nicht so stabil. Anwendungen in der Regel kann das Audiogerät nicht teilen. Aber es gibt Ihnen die niedrigste Latenz Zugriff auf diese Audio-Hardware.

ASIO gibt Ihnen auch eine Möglichkeit, die Wiedergabe auf mehreren Geräte zu synchronisieren.

Wenn Sie nicht in der Lage sein, zu Veränderung , was gespielt werden wird direkt bevor es gespielt wird, und Sie müssen nicht mehrere Geräte synchronisieren, dann brauchen Sie nicht ASIO .

Andere Tipps

Zur Zeit ich diese Frage gestellt, schrieb ich Code-Streaming der waveOut und WaveIn APIs. Seitdem habe ich eine nützliche Bibliothek entdeckt:

Portaudio http://www.portaudio.com/

Portaudio ist eine kostenlose Software mit einem kommerziellen freundlichen Lizenz. Wenn Sie Ihren Code schreiben Portaudio anrufen sollte es in der Lage sein, mit waveOut Geräten zu arbeiten, sondern auch mit ASIO-Geräten unter Windows; es kann dann für Linux neu kompiliert werden und mit ALSA-Geräten funktionieren soll; und es kann dann für den Mac neu kompiliert werden und soll mit Core Audio-Geräten. Ich habe nicht den Mac Teil getestet, aber mein Projekt arbeitet ausgezeichnet mit Windows und Linux.

zusätzlich zu den genannten Optionen von John Knoeller, gibt es WASAPI , die für viel niedrigere Latenzen als WaveOut erlaubt, aber leider nur von Windows Vista ab zur Verfügung.

eine Directsound-Streaming-Anwendung selbst geschrieben hat, ich es auf jeden Fall empfehlen für Low-Latency und einfache Bedienung. Außerdem ermöglicht es Ihnen, eine höhere Qualität Format für die Wiedergabe auf älteren Versionen von Windows zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top