Ich implementiere eine VOIP-Anwendung, die reines Java verwendet. Es gibt ein Echo-Problem, das auftritt, wenn Benutzer keine Headsets verwenden (hauptsächlich bei Laptops mit integrierten Mikrofonen).
Was passiert derzeit?
Das Wichtigste in der VOIP-Anwendung sind nur die einfachen Datalines des Java-Media-Frameworks. Im Wesentlichen möchte ich eine digitale Signalverarbeitung an Audiodaten durchführen, bevor ich sie zur Ausgabe an den Lautsprecher schreibe.
%Vor%Wie Sie sehen können, kommen die Audiodaten an und werden in einen Puffer eingereiht. Dies dient dazu, dubiose Verbindungen zu berücksichtigen und unterschiedliche Paketgrößen zu ermöglichen. Es bedeutet auch, dass ich auf so viele Audiodaten zugreifen kann, wie ich für irgendwelche ausgefallenen DSP-Operationen benötige, bevor ich die Audiodaten an die Lautsprecherlinie abspiele.
Ich habe einen Echokompensator gemanagt, der funktioniert, aber es erfordert eine Menge interaktiver Benutzereingaben und ich hätte gerne einen automatischen Echokompensator.
Manueller Echokompensator
%Vor%Adaptive Filter
Ich habe das adaptive Filter gelesen sind der Weg zu gehen. Insbesondere ein Least-Mean-Squares-Filter. Ich stecke jedoch fest. Die meisten Beispiele für die oben genannten sind in C und C ++ und sie nicht gut in Java übersetzen.
Hat jemand Tipps, wie man sie in Java implementiert? Alle anderen Ideen würden auch sehr geschätzt werden. Danke im Voraus.
Es ist schon ewig her! Hoffe das ist sogar die richtige Klasse, aber da gehts los:
%Vor%Falls jemand interessiert ist, habe ich es geschafft, einen fairen, funktionierenden Echokompensator zu bauen, indem ich im Grunde die Akustik umwandelt Echo Cancellation Methode von Paul R erwähnt , die ein verwendet Normalized Least Means Square Algorithmus und einige Filter von C in Java. Die JNI-Route ist wahrscheinlich immer noch ein besserer Weg, aber ich bleibe lieber bei reinem Java, wenn irgend möglich. Indem ich gesehen habe, wie ihre Filter funktionieren und viel über Filter auf DSP-Tutor lesen, habe ich es geschafft, etwas Kontrolle darüber zu bekommen, wie viel Geräusche werden entfernt und wie man hohe Frequenzen usw. entfernt.
Einige Tipps:
Hoffe das hilft jemand anderem!
Dies ist ein sehr komplexer Bereich und um eine brauchbare AEC-Lösung zum Laufen zu bringen, müssen Sie ziemlich viel R & amp; D machen. Alle guten AECs sind proprietär, und es gibt eine Menge mehr zur Echokompensation als nur die Implementierung eines adaptiven Filters wie LMS. Ich schlage vor, dass Sie Ihren Echokompensationsalgorithmus zuerst mit MATLAB (oder Octave) entwickeln - wenn Sie etwas haben, das mit "echten" Telecomms recht gut zu funktionieren scheint, dann können Sie den Algorithmus in C implementieren und in Echtzeit testen / evaluieren. Sobald dies funktioniert, können Sie JNI verwenden, um die C-Implementierung von Java aus aufzurufen.
Tags und Links java signal-processing javasound echo cancellation