2-Kanal-Convolving mit Linux (Ubuntu)

frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Pittiplatsch hat geschrieben: danke fuer die Info, ok, es ist also wirklich so das das pcm was ich z.B. von DRC bekomme 1:1 die Filterkoeffizienten enthaelt?
Hallo Tobias,
ja, genau so ist es. Das Format der Samples wird durch die Variable "PSOutFileType" in der Konfigurationsdatei (bzw. der Kommandozeilen-Option --PSOutFileType) bestimmt: F ist die Standardeinstellung und meint 32bit float, mit D sind es 64bit doubles und mit I sind es integers.
Pittiplatsch hat geschrieben: Wenn das so ist sollte ich auch hinbekommen das in Python auszulesen (meine bevorzugte Rhythmbox plugin Sprache). Dank Deiner Sox - Hilfe kann ich dann per des erzeugten Coeff files wunderbar ueberpruefen ob ich auch keinen Bloedsinn auslese :).

Ich hadere gerade mit mir welchen Weg ich gehe:

1) Gstreamer Fir filter ist gut und schoen, so wie sich die Doku liesst aber nur ein FIR filter fuer beide Kanaele.
Da werde ich den freundlichen Autor nochmal befragen.
2) Frontend plugin was Jack und bruteFIR bzw jconvolve cfg files auitomatisch generiert und diese started
Ich kenne mit damit nicht gut aus, weil ich das nicht benutze. Aber aus der Dokumentation für "audiofirfilter" (das meinst Du mit 1), oder?) würde ich auch vermuten, dass das hier nicht brauchbar ist. Es sieht in der Tat so aus, dass nur ein Filter benutzt wird, der auf beide Kanäle gleich angewendet wird. Außerdem hat das Beispiel nur 32 Taps (im Vergleich zu den 2^16 oder mehr in den Filtern aus DRC), das ist eventuell auch von der Performance nicht brauchbar.

Bei 2) weiß ich nicht genau, was Du meinst. Gibt es nicht ein generisches Plugin für gstreamer, das es erlaubt, eine beliebiges Programm per Pipes in eine Pipeline einzubauen?
Pittiplatsch hat geschrieben: gibt es eigentlich im Ergebnis einen Unterschied zwischen jconvole und bruteFir? BruteFIR ist zumindest flexibler weil er direct auf alsa ausgeben kann (auch wenn ich das noch nicht hinbekommen habe - ich nutze immer noch jack)
Das Ergebnis sollte bis auf verschiedene Rundungsfehler das gleiche sein. Ich benutze "brutefir" immer als (UNIX-)Filter, also stdin und stdout für Ein- und Ausgabe. Für das eigentliche Abspielen benutze ich "aplay". Jedes Programm soll das machen, was es richtig gut kann.

Viele Grüße,
Frank
Bild
Pittiplatsch
Aktiver Hörer
Beiträge: 489
Registriert: 26.02.2012, 10:48

Beitrag von Pittiplatsch »

HalloFrank,

Danke fuer die Hilfe!
Ich kenne mit damit nicht gut aus, weil ich das nicht benutze. Aber aus der Dokumentation für "audiofirfilter" (das meinst Du mit 1), oder?) würde ich auch vermuten, dass das hier nicht brauchbar ist. Es sieht in der Tat so aus, dass nur ein Filter benutzt wird, der auf beide Kanäle gleich angewendet wird. Außerdem hat das Beispiel nur 32 Taps (im Vergleich zu den 2^16 oder mehr in den Filtern aus DRC), das ist eventuell auch von der Performance nicht brauchbar.
ja das hat mir der Autor auch bestaetigt. Pertformancemaessig sollte es gehen hat er gemeint. Mein Plan ist also zunaechst mal zu versuchen es damit irgendwie zum Laufen zu bringen. Auf Basis der dort gesammelten Erfahrung werde ich dann mal sehen wie ich weiter mache.
Als simple Variante fuer einen Filter fuer beide Kanaele ohne Referenzkanal sollte es doch zumindest so gut sein wie z.B. Antimode um zumindest den Bass zu linearisieren.
Bei 2) weiß ich nicht genau, was Du meinst. Gibt es nicht ein generisches Plugin für gstreamer, das es erlaubt, eine beliebiges Programm per Pipes in eine Pipeline einzubauen?
wow das war ein bisschen mehr Aufwand als ich spendieren wollte :). Am Ende waere halt eine Art DRC Designer plugin mit gleichzeitiger Anwendung der Filter ganz schick. Nun noch als eigenes gstreamer plugin - puh ganz schoen viel fuer ein Feierabendprojekt - also erwartet nicht bis morgen eine Fertigstellung :).

Die Alternative waere halt ein UI fuer die measure scripts und DRC gewesen und eine Art UI - Setup hilfe fuer bruteFIR/Jack. Alles was es halt fuer einen Otto-normal user einacher/automatisierter handhaben laesst.

Eine Frage noch da du Dich gut auszukennen scheinst: ich habe gestern mal all Koeffizienten ausgelesen direct aus dem pcm (65535!!) - geht ueber ein paar Umwege auch in Python und mal direkt in den audiofirfilter gesteckt. -> klang sehr merkwuerdig :).
Sind die Filterkoeffizienten schon im Frequenzraum oder muss ich die vorher noch per inverse FFT umwandeln wie in dem audiofirfilter sample?

Danke und Viele Gruesse,
Tobias
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Pittiplatsch hat geschrieben: Eine Frage noch da du Dich gut auszukennen scheinst: ich habe gestern mal all Koeffizienten ausgelesen direct aus dem pcm (65535!!) - geht ueber ein paar Umwege auch in Python und mal direkt in den audiofirfilter gesteckt. -> klang sehr merkwuerdig :).
Sind die Filterkoeffizienten schon im Frequenzraum oder muss ich die vorher noch per inverse FFT umwandeln wie in dem audiofirfilter sample?
Hallo Tobias,

die Filterkoeffizienten aus DRC sind im Zeitbereich, die können direkt zum Falten eines Mono-Streams(!) von PCM Daten benutzt werden.

Da ich nicht weiß (und auf die Schnelle nicht herausgefunden habe) was der audiofirfilter exakt macht, kann ich auch nicht wirklich sagen, warum es in Deinem Versuch merkwürdig klang. Zwei Ideen: Hast Du mit den Filtern aus DRC (etwa mit brutefir) schon Dateien gefaltet, die ordentlich klangen? Falls ja, und somit Deine Bedienung von DRC in Ordnung zu sein scheint: Trennt der audiofirfilter auch die Musikdaten in links und rechts auf, um darauf jeweils den Filter anzuwenden (diese Daten enthalten immer abwechselnd ein Sample für den linken und einen für den rechten Kanal)? (Falls der Filter direkt auf den Stereo-Stream angewendet würde, müsste man zwischen alle Filterkoeffizienten noch eine 0.0 einfügen.)

Viele Grüße,
Frank
Bild
Pittiplatsch
Aktiver Hörer
Beiträge: 489
Registriert: 26.02.2012, 10:48

Beitrag von Pittiplatsch »

Super, Danke Frank. Sorry fuer die spaete Antwort: ich bleibe auch auf alle Faelle an dem Thema dran: im Moment habe ich beruflich andere Baustellen die mich erstmal privat ausbremsen (auch wenn das sicher das interessantere Project waere :) ).

Zum Thema: ja, meine BruteFIR filter funktionieren dort super : eigens zu diesem Zweck eingerichtet. Es sind allerdings wie du richtig vermutest Stereo - filter - sprich ein Mono filter fuer jeden Kanal. Ich werde bei Gelegenheit mal probieren ob der 0 - trick funktioniert. Das sollte recht schnell gehen. D.h. wenn ich das richtig verstanden habe und ich 2 Mono filter habe muesste ich die auch "nur" entspechend zu einem Stereo Filter mischen (immer abwechselnd ein Sample aus jedem)? Interessant wird dann ob der audiofirfilter dann bei 128k Stereo Filterkoeffeizienten in die Knie geht :).

Zumindest kann ich mit Deinen Infos wieder super auf den auch sehr hilfsbereiten audiofirfilter - Entwickler zugehen.

Danke und Viele Gruesse,
Tobias
Bild
Pittiplatsch
Aktiver Hörer
Beiträge: 489
Registriert: 26.02.2012, 10:48

Beitrag von Pittiplatsch »

Hallo Frank,

So, schliesslich und endlich das convolving mittels audiofirfilter laeuft (Fehler war wohl eher die mangelnde Python Dokumentation der Schnittstellen :) ). Natuerlich mit den Einschrenkungen des audiofirfilter (ein mono filter fuer alle Kanaele). Die Performance geht sogar. Beim Start verzoegert das Laden des Filters und setzen der Werte in den Filter schon um ein paar Sekunden.
Ich denke ich werde demnaechst mal versuchen ob ich mit DRC einen vernuenftigen 2Kanal Filter hinbekomme: sprich Testsweep auf beide LS und daraus dann sozusagen einen Filter fuer beide Kanaele. Bin gespannt wie weit ich damit komme. Zumindest einen geglaetteten Frequenzgang sollte es ja schon geben.

Danke und Viele Gruesse,
Tobias
Bild
Pittiplatsch
Aktiver Hörer
Beiträge: 489
Registriert: 26.02.2012, 10:48

Beitrag von Pittiplatsch »

so nach laengerer Pause der erste Wurf:

https://github.com/TheBigW/DRC

Was kann er: nun, nicht viel :). Zumindest kann man im py script selber einen 1 - Kanal Filter einhaengen der dann auf beide Stereo Kanaele angewendet wird. Soweit ist auch das klangliche Ergebnis ganz brauchbar.
Gemessen habe ich dafuer mit DRC beide Kanaele inclusive Sub gleichzeitig logischerweise ohne Verwendung eines Referenzkanales.

Naechste Schritte: ein UI waere schick mit dem man auch das Messen/Zielkurve etwas komfortabler gestalten kann. So eine "all in one" Loesung in Rhythmbox. Mein erster naiver Ansatz weaere einfach meine vorhandenen Scripte anzutriggern. Eine mic - Pegelanzeige waere auch ganz hilfreich. Mal sehen wie sich das im Rhythmbox mit gstreamer vertraegt :)...

Viele Gruesse,
Tobias
Bild
Antworten