Anzeige

Audio Capture und splitting

ruNN0r

Erfahrenes Mitglied
#1
Hallo,
ich habe ein kleines Problem, dass ich mit einem Programm lösen möchte. Leider finde ich kein fertiges Programm, dass meine Anforderungen erfüllt, daher dachte ich mir: "schreibst es halt selbst".

Problemstellung:
Des öfteren möchte ich mit meiner Freundin einen Film schauen. Um leise zu sein und die Nachbarn nicht zu stören, nutzen wir dann Funk-Kopfhörer. Die Idee ist ganz gut (wenn man allein ist), aber Windoof unterstützt das Streamen identischer Signale auf verschiedene Ausgänge leider nicht.

Lösungsansatz:
Viele Programme haben die Möglichkeit, das Audiosignal eines speziellen Ausgangs zu kapern und aufzunehmen. Diese Funktion möchte ich nun auch nutzen, das Signal kapern, duplizieren und dann auf ein, zwei, oder mehrere andere Ausgänge weiterleiten.
- Ein Klinkensplitter kommt nicht in frage, da die Funk-Kopfhörer USB sind.
- Eine Extra Anlage möchten wir nicht verwenden, da es hier nicht nur um Filme geht, sondern auch um Konferenzen usw.

Was habe ich schon und was fehlt?
Zunächst habe ich mir die NAudio Lib angesehen die sehr schön finde. Damit habe ich es bereits geschafft, ein AudioFile abzuspielen und das Simultan auf verschiedenen Ausgängen. Soweit so gut, mir fehlt jetzt jedoch das Capture. Ich habe viel gesucht und stoße immer wieder auf WASAPILoopbackCapture und teilweise immer wieder darauf, dass es nur für Vista sei.

Mein Loopback sieht aktuell so aus:
Code:
loopback = new WasapiLoopbackCapture(endpoints[comboBox1.SelectedIndex]);
            loopback.DataAvailable += InputBufferToFileCallback;
            loopback.ShareMode = AudioClientShareMode.Shared;
            loopback.StartRecording();
und das Streamen des Buffers:
Code:
WaveOut waveout = new WaveOut(WaveCallbackInfo.FunctionCallback());//WaveCallbackInfo.FunctionCallback());
                IWaveProvider provider = new RawSourceWaveStream(new MemoryStream(e.Buffer), loopback.WaveFormat);
                waveout.DeviceNumber = dev;
                waveout.Init(provider);
                waveout.Play();
Jedoch erhalte ich immer nur rauschen. Irgendwie hat es teilweise schon eine Tonlage die dem eigentlichen Signal ähnelt, ABER es ist grausam.

Schön Programmiert ist hier noch nichts. Das mache ich wenn ich die Grundfunktion geschaffen habe.
Woran es nun jedoch liegt, dass der Stream so komisch ist, weiß ich allerdings nicht. Ob es wirklich an der WASAPI liegt oder am Abspielen.

Weiteres:
Die frage, ein Audiosignal auf zwei Ausgängen ausgeben zu können (unter Windows) kommt ja häufiger im Netz vor. Aber einfach abtun wollte ich das jetzt. Ich plane, wenn das Projekt abgeschlossen ist, jedem den Code und auch das fertige Programm Lizenzfrei zu überlassen.

Ich hoffe ihr könnt mir ein wenig bei der Umsetzung helfen und ich danke für jede Unterstützung.
 
Anzeige

Neue Beiträge

Anzeige