2016-05-15 8 views
0

Ich versuche, Ton von mehreren Schnittstellen einzelner Audiokarte zu erfassen. Kann ich Arrays bekommen, die nicht relativ zueinander verschoben sind? Ich möchte 4 Mikrofone verwenden (2 Mikrofone in einer Schnittstelle für jeden Kanal), um die Position des Tonemitters zu erkennen. Ich benutze Fenster, damit ich kein aggregiertes Gerät erstellen kann. Ich nahm auch Ton von verschiedenen Threads auf, aber die Verzögerung zwischen den Arrays war sehr zufällig. Dies ist das Hauptproblem, weil ich Interkorrelationsfunktion für Array verwenden möchte, um Verzögerung (Shift) zu erhalten, die maximalen Wert gibt, definiert diese Verschiebung Winkel zu Tonquelle, so kann ich etwas anderes gegen ASIO verwenden, aber es muss für alle stabil sein Aufzeichnungsintervall. Wenn es keine Lösung für C# gibt, kenne ich C++. Bitte sag mir, wie ich mein Problem lösen kann.Asio, C#, Ton von Mikrofon- und Line-Eingängen simultan aufnehmen

Antwort

0

Wenn alle Mikrofone mit demselben Hardwaregerät verbunden sind, können Sie ASIO verwenden, vorausgesetzt, das Gerät hat tatsächlich ASIO-Treiber. Wenn nicht, können Sie entweder ASIO4All ausprobieren (aber ich habe keine Ahnung, ob es unabhängige Geräte synchronisiert) oder WASAPI verwenden und die Synchronisation manuell durchführen. Die IAudioCaptureClient :: GetBuffer-Methode von WASAPI gibt Ihnen sowohl die Stream-Position als auch die Stream-Zeit, in der die Position aufgezeichnet wurde. Von dort aus sollten Sie die Zeitverschiebung zwischen den vier Mikrofonen berechnen und dann das "Unshifting" selbst durchführen.

+0

Vielen Dank für die Antwort, ich löse mein Problem mit ASIO4ALL, es gibt meine Liste der Werte für jeden Eingangskanal, ich habe wenig Unterschied zwischen empfangenen Arrays (const Wert um 17 Proben und 1-6 Proben von zufälliger Verschiebung). Also entscheide ich mich, nur 3 Mikrofone zu verwenden (eines von ihnen sendet das gleiche Signal an den Line-Eingang und den Mikrofon-Eingang, so dass ich die Verschiebung zwischen den Arrays sehr gut erreichen kann). – roma2341