LoCo - Localization Correction

Hans-Martin
Aktiver Hörer
Beiträge: 9118
Registriert: 14.06.2009, 15:45

Beitrag von Hans-Martin »

Jahresprogramm hat geschrieben:Gibt es keine Beispiele für Äquivalenzstereofonie außer der Pfleiderer-Aufnahmen?
Hallo Alex
Äquivalenzstereofonie mit 3 Mikrofonen? Ich sehe bei den 3 Mikros eine Reminiszenz, die alten Mercury Living Presence waren mit 3 Mikros und 3 Tonspuren aufgenommen, auch RCA hat damit experimentiert und die umfangreichste Variation erfuhr das 3-Gestirn als DECCA-Tree.
Ob Pfleiderer das Rad neu erfunden hat?
Jedesmal, wenn ich auf seine Seite gehe, überkommt mich ein starker Zweifel, ob er nicht mit Milchmädchenrechnungen den Hörer an der Nase herumführt.
Da er das Centermikro in Linie mit den beiden anderen hat, das Signal auf beide Kanäle dann verteilt, ergeben sich zwangsläufig Kammfiltereffekte für alle Signale, die nicht phasengleich reinkommen. Phasengleich sind aber nur Instrumente auf der Mittelachse zwischen 2 Mikrofonen, alles, was schräg einfällt, hat Phasenfehler zwischen beiden Mikrofonen, Welligkeit im FG ist die Folge. Ein übliches Dilemma, was sich mit Koinzidenzaufstellung vermeiden lässt, mono-kompatibel ist, aber Laufzeitstereofonie nicht ermöglicht.

Beispiele für Äquivalenzstereofonie findet man bei Naim "True Stereo"(2 AKG 414 Mikrofone mit Ohrabstand, Ken Christianson),
in vielen DELOS (unter John Eargle, Achtung: Invertiert!), viele Reference Recordings (Doc Johnson), Aufnahmen von Tony Faulkner unter div. Labels,
Stereoplay Highlights CD4 (ORTF mit Schoeps mk4, Ben Bernfeldt),
Jazz At The Pawnshop wurde auf 20cm AB mit Neumann U47 + Hilfsmikros aufgenommen (Proprius, Gert Palmcrantz)
Das Problem ist, dass viele Aufnahmen zu trocken klingen, dann noch Raumhall hinzugemischt bekommen, schon ist es keine reine Äquivalenzstereofonie mehr
Hans-Martin hat geschrieben: Ich sehe das so:
Nah: Viel Direktschall, wenig Diffusschall...
Oh je, da habe ich noch grundsätzlichen Nachholbedarf. :oops:
Tröste dich, ich musste auch erst 50 werden, um das zu begreifen. :cheers:
Grüße Hans-Martin
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Hallo,

dieser Thread hat sich schon etwas verzettelt, bevor die "Arbeit" begonnen hat. Die Idee des Threads ist, innerhalb dieses Forums zu versuchen, die Idee hinter EMI Redd, Francinstein, oder der digitalen Version FLOW weiter zu verbessern. Wir sind uns alle einig, dass dies nicht auf alle Produktionen, aber auf viele (um diese soll es erstmal gehen), anwendbar ist.

Die älteren Referenzen, die hier im Thread schon angegeben wurden, hatten alle analoge Realisierungen im Hinterkopf. Die sind aber nicht so leicht praktisch zu testen und bringen unter Umständen Probleme mit Phasenverschiebungen mit sich. Mit DSP können wir dagegen beliebig genaue Korrekturen realisieren.

(1) Die erste Frage ist, ob sich im Forum genügend Interessenten finden, die die hier diskutierten Möglichkeiten ausprobieren. Ohne reale Tests auf verschiedenen Anlagen machen weitere Diskussionen nicht viel Sinn.

Als Teaser hatte ich ja im Eingangsbeitrag Musik-Beispiele mit dem dort vorgestellten Filter angeboten (PN, wer Interesse hat).

Für Leute mit sox und brutefir könnten Filter leicht verfügbar gemacht werden, damit sie selbst Musikstücke behandeln können.

Wie ist das für Acourate Nutzer? Könnten die auch leicht externe Filter auf ihre eigenen Musik anwenden? Falls ja, wie und welches Format müssen die Filter haben? So ein Setup wäre natürlich viel praktischer, als der umständliche Austausch von behandelten Musikdateien.

(2) Als erster Test wäre interessant, ob der im Eingangsbeitrag beschriebene Filter (der bei mir sehr gut funktioniert), auch bei anderen Leuten gute Ergebnisse bringt.

(3) Was wir benötigen, ist eine Tabelle, die für eine gewisse feste Richtung (welche, ist hoffentlich nicht so wichtig, sonst wird es schwierig) und möglichst viele Frequenzen, den für die Lokalisierung notwendigen Lautstärkeunterschied angibt. Die einzige Referenz, die ich für so eine Tabelle (oder Kurve als Graphik) kenne, ist die, aus der ich den im Eingangsbeitrag beschriebenen ("LoCo1") Filter generiert habe. Finden wir andere Referenzen? Wenn ja, sollten dazu auch Filter generiert und getestet werden. (Hans-Martin hat Wendt (1964) zitiert; ob es lohnt, daraus einen Filter zum Testen zu berechnen?)

(4) Wenn sich herausstellt, dass ein fester Filter nicht für viele Leute gut funktioniert, die Tabelle wie in (3) also stark vom individuellen Setup abhängt, wäre es interessant, bessere Methoden für die Messung einer solchen Tabelle zu diskutieren.

(5) Vermutlich viel schwieriger: Hans-Martins Idee, Lokalisierungsinformation durch Laufzeitunterschiede zu verbessern, klingt interessant. Beim Abmischen könnte man das ja machen. Aber nachträglich? Müssten wir dazu nicht in der Lage sein, den Musikanteil, der aus einer bestimmten Richtung erscheint, jeweils zu extrahieren? Ist das möglich?

(6) Als kleine Nebendiskussion: Ich hatte ja in Frage gestellt, ob das Übersprechen in einem Plattenspieler auch die hier gesuchte Korrektur bewirkt. Wenn man eine (lesbare!) Messung des Übersprechverhaltens eines guten Plattenspielers hätte, wäre es ja nicht schwierig, das per DSP zu simulieren. Dann könnte man vergleichen. Würde das jemanden interessieren?

Viele Grüße,
Frank
Hans-Martin
Aktiver Hörer
Beiträge: 9118
Registriert: 14.06.2009, 15:45

Beitrag von Hans-Martin »

frankl hat geschrieben:(6) Als kleine Nebendiskussion: Ich hatte ja in Frage gestellt, ob das Übersprechen in einem Plattenspieler auch die hier gesuchte Korrektur bewirkt. Wenn man eine (lesbare!) Messung des Übersprechverhaltens eines guten Plattenspielers hätte, wäre es ja nicht schwierig, das per DSP zu simulieren. Dann könnte man vergleichen. Würde das jemanden interessieren?
Hallo Frank
Offensichtlich wenig, sieht man die Resonanz der letzten Monate.
Das Übersprechen variiert individuell mit dem Tonabnehmersystem und schwankt sogar mit den Exemplaren und dem Einbau (Azimuth). Außerdem macht der Tonarm mit seinen Resonanzen Kuriose Nebeneffekte (FG, Phase). Das unsymmetrische Abtasten der beiden Rillenflanken bei Seitenschrift (Schub L entspricht Sog R, das eine wird dominiert von der Elastizität des Viny, das andere von der Nadelaufhängung) kommt noch hinzu und wird u.a. für die wärmere (k2) Wiedergabe von Vinyl vs CD herangezogen. Ich glaube, hier wird eine leichte Dekorrelation der Kanäle bewirkt, die sich in den klassischen Übersprechkurven nicht zeigt.

Da ich kein DSP Experte bin, habe ich noch keine Möglichkeit gesehen, Signale zwischen den Kanälen zu kreuzen. Mit geeigneter PC-Software ist das offenbar kein Problem.
Grüße Hans-Martin
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Hans-Martin hat geschrieben:
frankl hat geschrieben:(6) Als kleine Nebendiskussion: Ich hatte ja in Frage gestellt, ob das Übersprechen in einem Plattenspieler auch die hier gesuchte Korrektur bewirkt. Wenn man eine (lesbare!) Messung des Übersprechverhaltens eines guten Plattenspielers hätte, wäre es ja nicht schwierig, das per DSP zu simulieren. Dann könnte man vergleichen. Würde das jemanden interessieren?
Hallo Frank
Offensichtlich wenig, sieht man die Resonanz der letzten Monate.
Das Übersprechen variiert individuell mit dem Tonabnehmersystem und schwankt sogar mit den Exemplaren und dem Einbau (Azimuth). Außerdem macht der Tonarm mit seinen Resonanzen Kuriose Nebeneffekte (FG, Phase). Das unsymmetrische Abtasten der beiden Rillenflanken bei Seitenschrift (Schub L entspricht Sog R, das eine wird dominiert von der Elastizität des Viny, das andere von der Nadelaufhängung) kommt noch hinzu und wird u.a. für die wärmere (k2) Wiedergabe von Vinyl vs CD herangezogen. Ich glaube, hier wird eine leichte Dekorrelation der Kanäle bewirkt, die sich in den klassischen Übersprechkurven nicht zeigt.
Hallo Hans-Martin,

ich denke auch, dass das Übersprechen von System zu System ziemlich unterschiedlich ist und von vielen Parametern abhängt. Mir ging es ja damals um die Bemerkung in der FLOW Diskussion, die die Wirkungsweise von FLOW mit dem Übersprecheffekt beim Plattenspieler erklärt hat. Mir kam das nicht sehr plausibel vor und deswegen dachte ich, dass man das mal testen könnte.

Ich hatte damals dann auch für mich so einen Test gemacht. Dazu hatte ich dieses Diagramm genutzt, das auch mal in FLOW Thread verlinkt war, und das das Übersprechen eines Shure V15 Tonabnehmers beschreibt. Ich habe Filter für das Übersprechen der beiden Kanäle berechnet und diese auf verschiedene Musikstücke angewandt. Für mich klang dadurch nur alles etwas verwaschener (wenn ich den Filter verkaufen wollte, würde ich sagen "wärmer" und "analoger"), und es hatte gar nichts mit der besseren Lokalisierung zu tun, die durch FLOW oder LoCo erreicht werden soll.

Viele Grüße,
Frank
Bild
Hans-Martin
Aktiver Hörer
Beiträge: 9118
Registriert: 14.06.2009, 15:45

Beitrag von Hans-Martin »

Hallo Frank
Wie ich schon schrieb, verhält sich der Tonabnehmer im Bereich größerer Auslenkungen vermutlich nicht wie erwartet, der Verlauf der Kurven zwischen 400 und 4000 Hz ist schon recht ähnlich, wobei die Bereiche um 400 und 4000 Hz besonders bedeutend sind.
Verlängert man die Kurven der Tendenz folgend, ergibt sich doch eine verblüffende Ähnlichkeit zum Übersprechen des Shure. Ähnlichkeit, nicht Deckungsgleichheit, man muss allerdings die Vorzeichen der dB-Skala berücksichtigen, sonst denkt man, die Kurven laufen gegenläufig.
Die Charakteristik ist zufällig, wurde wohl nicht vorrangig bei der Konstruktion des Tonabnehmers ins Kalkül gezogen, aber wer weiß...

Uli war sehr um Nachvollziehbarkeit besorgt, und wenn hier ein Fehler vorliegen sollte, wäre er vor allem mir anzulasten.
Ich bitte jedoch zu bedenken, dass die Grundsätze des Gedankenguts seit gut über 70 Jahren bekannt sind (- ich habe nicht gesagt : seit über 70 Jahren gut bekannt sind- ), und wenn man betrachtet, wie wenig von dem in der Praxis seit Einführung von Stereo Ende der 1950er umgesetzt wurde, was wir hier diskutieren, können wir unbesorgt weiterplaudern. Die Profis haben das bisher ignoriert und werden es vermutlich auch weiterhin tun.
Das Volk wird sich weiter auf 192/24 stürzen und bejubeln, selbst wenn die zugrunde liegende Aufnahme schlecht, die Mixer/Mastering-Bearbeitung wider besseres Wissen nicht zur Aufhebung der Unpräzision führt.
Jeder darf für sich eine individuelle Lösung finden, die für ihn einen guten Kompromiss aus Abbildungsschärfe und Räumlichkeit darstellt.
Grüße Hans-Martin
Bild
Hans-Martin
Aktiver Hörer
Beiträge: 9118
Registriert: 14.06.2009, 15:45

Beitrag von Hans-Martin »

Nachstrag zur Übertragbarkeit einer Übersprechkurve auf das Hörempfinden:
Beim Abtasten von Vinyl mit normgerechter Seitenschrift, also horizontaler Auslenkung mit gleicher Phase, wird jegliche mechanische Welligkeit mit ihrer vertikalen Komponenze ein in den Kanälen gegenphasiges Signal erzeugen, welches sich mit dem Nutzsignal mischt und dieses zwischen den Kanälen dekorreliert.
Ein FG-Schrieb, der auch das Übersprechen auf den amderen Kanal darstellt, drückt das nicht aus, wohl wird ein Signal aufgezeigt, welches vom unmodulierten Teil der Rille nicht stammen kann, aber nicht der Phasenbezug der enthaltenen Komponenten.
Ich könnte vermuten, dass während der Aufzeichnung des Pegelschriebs der Papiervorschub mit der eingehenden Frequenz synchronisiert wird, viel einfacher wäre es, einen Logsweep genormter Zeitdauer zu verwenden und den Recorder mit konstanter Geschwindigkeit zu fahren.
Ich könnte vermuten, dass während der Aufzeichnung ein zu dem Locus passendes durchstimmbares Filter mitläuft, viel einfacher wäre es, die Vertikalauslenkung mit dem eingehenden Signal zu steuern, der Amplitude, die auch sämtliche Störungen beinhaltet. Ein erfahrener Messtechniker könnte es wissen, ich kann darüber nur spekulieren.

Wegen des Gleichrichtereffekts im Innenohr stimmt nun der Höreindruck mit der Messtechnik nicht mehr überein.
Vertikale Schwingungen des Feder-Masse Systems aus Nadelnachgiebigkeit-Tonabnehmer-eff.Tonarmmasse schwingen nach, typisch liegen solche Resonanzstellen zwischen 5 und 10 Hz, Liegen zwischen Einschwingen und Ausklingen nun 7 Schwünge, ist der Abstand zur nächsten Erregung nicht groß, 33 1/3 Upm entstspricht 0,45 Hz, ca 1,8 sec.
Phasenunterschiede im Musiksignal, auch größere Pegeldifferenzen, Rumpeld des Tellerlagers, Welligkeiten des Vinyls und standortbezogene Schwingungen erzeugen vertikale Abtastsignale, die eigentlich unerwünscht sind. Es gibt also viele Gründe für eine Dekorrelation der Kanäle beim Abtasten.

Wer einen vollständigeren Überblick über diese Vorgänge hat, möge mich ergänzen oder korrigieren.
Wer 2 Subwoofer betreibt und Vinyl spielt, kann die gegenphasigen Schwingungen sogar als solche sichtbar erkennen. Ein Monosubwoofer ist hingegen aktive Rumpelfilterung. Diese Erkenntnis habe ich in meinem Phonovorverstärker entsprechend umgesetzt.
Grüße Hans-Martin
Bild
KSTR
inaktiv
Beiträge: 1221
Registriert: 08.05.2008, 11:51

Beitrag von KSTR »

Das VST-Pluging "ConvolverVST" kann N inputs auf M outputs beliebig verteilen mit je einem Impulskern. Also bei Zweikanal auf Zweikanal dann mit 4 Kernen. Ist die Sache symmetrisch bzgl L und R, reichen zwei.
Bild
Daihedz
Aktiver Hörer
Beiträge: 793
Registriert: 25.06.2010, 15:09

Beitrag von Daihedz »

KSTR hat geschrieben:Das VST-Pluging "ConvolverVST" kann N inputs auf M outputs beliebig verteilen mit je einem Impulskern. Also bei Zweikanal auf Zweikanal dann mit 4 Kernen. Ist die Sache symmetrisch bzgl L und R, reichen zwei.
Das kann Brutefir auch, und darüber hinaus noch viel mehr. Als daheimgebliebener NAFT (= Nicht-Am-Forumtreffen-Teilnehmender) habe ich zwischenzeitlich eine Brutefir-Config gestrickt, welche eine universelle [L/R -> M/S -> L/R] - Matrix bereitstellt. Mit dieser Matrix lässt sich nach Belieben eine hübsche FLOW-Variante durchspielen.

Coeff_S ist ein mittels Acourate generiertes Shelving-Filter mit Tiefpasscharakterstik (-2dB/Okt) von 500Hz bis 4kHz, d.h. mit einer Absenkung von -6dB bei 4kHz. Dieses wird in den S-Zweig der Matrix eingeschleift und verschiebt/verengt im Bereich von 500Hz ... 4kHz die Stereobreite laufend nach innen. Selbstverständlich können nach Gusto ganz andere Charkteristika zur Anwendung kommen.

Das Resultat ist besser als was ich bisher mit meinen FLOW-Experimenten im reinen L/R-Modus erreichte. Ich möchte diesen Ansatz im Sinne des LoCo allen zum ausprobieren wärmstens empfehlen:

Code: Alles auswählen

#############################################
## brutefirconfig
## Filterlänge 64k
## Test
## Soundcard: Thinkpad Intern
## FLOW
#############################################
 

float_bits: 64;             # internal floating point precision
sampling_rate: 44100;       # sampling rate in Hz of audio interfaces
#filter_length: 32768,2;
#filter_length: 16384,4;
filter_length: 8192,8;
#filter_length: 4096,16;
#
allow_poll_mode: true;      # allow use of input poll mode
lock_memory: false;         # try to lock memory if realtime prio is set - set to false, dafür keine systemweite SWAP-file
max_dither_table_size: 0;   # maximum size in bytes of precalculated dither
powersave: false;            # pause filtering when input is zero - nur sinnvoll für Leistungsmessungen ohne Eingangssignal
sdf_length: 0;              # subsample filter half length in samples
#
overflow_warnings: true;    # echo warnings to stderr if overflow occurs
monitor_rate: true;         # monitor sample rate
show_progress: true;        # echo filtering progress to stderr
#safety_limit: -14.5;
#
convolver_config: "/home/privat/_fracon/brutefir_convolver"; # location of convolver config file
#config_file: "/home/privat/_fracon/brutefir_config"; # standard location of main config file
modules_path: "/usr/lib/brutefir"; # extra path where to find BruteFIR modules

 
## LOGIC ##

logic: "cli" { port: 3000; };


## COEFFS ##
 
#coeff <STRING: name | NUMBER: index> {
#	filename: <STRING: filename>; | <NUMBER: shmid>/<NUMBER: offset>/<NUMBER: blocks>[,...];
#	format: <STRING: sample format string | "text" | "processed">;
#	attenuation: <NUMBER: attenuation in dB>;
#	blocks: <NUMBER: length in blocks>;
#	skip: <NUMBER: bytes to skip in beginning of file>;
#	shared_mem: <BOOLEAN: allocate in shared mem>
#};

coeff "Coeff_S" {
	filename: "/home/privat/_fracon/filter/500-4000-2_044.dbl";
	format: "FLOAT64_LE";
	attenuation: 0.0;
	blocks: -1;
	skip: 0;
	shared_mem: false;
};


## INPUT ##

#input <STRING: name | NUMBER: index>[, ...] {
#       device: <STRING: I/O module name> { <I/O module settings>> };
#       sample: <STRING: sample format>;
#       channels: <NUMBER: open channels>[/<NUMBER: channel index>[, ...]];
#	delay: <NUMBER: delay in samples>[, ...];
#	subdelay: <NUMBER: additional delay in 1/100th samples (valid range -99 - 99)>[, ...];
#	maxdelay: <NUMBER: maximum delay for dynamic changes>;
#	individual_maxdelay: <NUMBER: maximum delay for dynamic changes>[, ...];;
#	mute: <BOOLEAN: mute channel>[, ...];
#	mapping: <NUMBER: channel index>[, ...];
#};

input "In_L", "In_R" {
#	device: "alsa" { device: "hw:0"; }; 		# ALSA 
	device: "file" { path: "/dev/stdin"; };
	sample: "S16_LE";
	channels: 2/0,1;
	delay: 0,0;
#	subdelay: 0,0;
#	maxdelay: -1;
#	individual_maxdelay: 0,0;
	mute: false, false;
};


## OUTPUT ##

#output <STRING: name | NUMBER: index>[, ...] {
#	device: <same syntax as for the input structure>;
#	sample: <same syntax as for the input structure>;
#	channels: <same syntax as for the input structure>;
#	delay: <same syntax as for the input structure>;
#	subdelay: <NUMBER: additional delay in 1/100th samples (valid range -99 - 99)>[, ...];
#	maxdelay: <same syntax as for the input structure>;
#	individual_maxdelay: <same syntax as for the input structure>;
#	mute: <same syntax as for the input structure>;
#	mapping: <same syntax as for the input structure>;
#	dither: <BOOLEAN: apply dither>;
#	merge: <BOOLEAN: merge discontinuities at coeff change>;
#};

output 	"Out_L","Out_R" {
	device: "alsa" { device: "hw:0,0"; };
#	device: "file" { path: "/dev/stdout"; };
	sample: "S16_LE";
	channels: 2/0,1;
	delay: 0,0;
#	maxdelay: -1;
#	individual_maxdelay: 0,0;
	mute: false,false;
	dither: true;
};

output 	"Out_Null" {
	device: "file" { path: "/home/privat/Downloads/nullfile.raw"; };
	sample: "S16_LE";
	channels: 1;
};

## FILTERS ##
 
#filter <STRING: name | NUMBER: index> {
#	from_inputs: <STRING: name | NUMBER: index>[/<NUMBER:attenuation in dB>][/<NUMBER:multiplier>][, ...];
#	from_filters: <same syntax as from_inputs field>;
#	to_outputs: <same syntax as from_inputs field>;
#	to_filters: <STRING: name | NUMBER: index>[, ...];
#	process: <NUMBER: process index>;
#	coeff: <STRING: name | NUMBER: index>;
#	delay: <NUMBER: pre-delay in blocks>;
#	crossfade: <BOOLEAN: cross-fade when coefficient is changed>;
#};

### Input filter section

filter 	"Filt_L_pre" {
        from_inputs: "In_L" /0/1;
        to_filters: "Filt_LR-to-M", "Filt_LR-to-S", "Filt_LR-to-S_inv";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

filter 	"Filt_R_pre" {
        from_inputs: "In_R" /0/1;
        to_filters: "Filt_LR-to-M", "Filt_LR-to-S", "Filt_LR-to-S_inv";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

### Matrix L-R to M-S

filter 	"Filt_LR-to-M" {
        from_filters: "Filt_L_pre" /0/1, "Filt_R_pre" /0/1;
        to_filters: "Filt_MS-to-L", "Filt_MS-to-R";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

filter 	"Filt_LR-to-S" {
        from_filters: "Filt_L_pre" /0/1, "Filt_R_pre" /0/-1;
        to_filters: "Filt_MS-to-L", "Filt_MS-to-R", "Filt_Null";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

filter 	"Filt_LR-to-S_inv" {
        from_filters: "Filt_L_pre" /0/-1, "Filt_R_pre" /0/1;
        to_filters: "Filt_Null";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

### Matrix M-S back to L-R

filter 	"Filt_MS-to-L" {
        from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /0/1;
        to_outputs: "Out_L";
        process: -1;
#	coeff: -1;
	coeff: "Coeff_S";
	delay: 0;
	crossfade: false;
};

filter 	"Filt_MS-to-R" {
        from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /0/-1;
        to_outputs: "Out_R";
        process: -1;
#	coeff: -1;
	coeff: "Coeff_S";
	delay: 0;
	crossfade: false;
};

### Control

filter 	"Filt_Null" {
        from_filters: "Filt_LR-to-S" /0/1, "Filt_LR-to-S_inv" /0/-1;
        to_outputs: "Out_Null";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};
Begeisterte Bastlergrüsse
Simon
Bild
Daihedz
Aktiver Hörer
Beiträge: 793
Registriert: 25.06.2010, 15:09

Beitrag von Daihedz »

ERRATUM und Ergänzung

Die Filterfunktion rutschte in der Hitze des Publikationsgefechts leider eine Filterdefinition zu tief ab: Die Filterfunktion Corr_S muss auf den Filter [Filt_LR-to-S] wirken, und nicht auf die nachgeschalteten Filter [Filt_MS-to-L] und [Filt_MS-to-R] !!!. So wie zuvor irrtümlich publiziert, wirkt das Shelvin-Filter einfach bloss linear auf beide Ausgänge, ohne jeglichen FLOW-Effekt.

Richtig ist:

filter "Filt_LR-to-S" {
from_filters: "Filt_L_pre" /0/1, "Filt_R_pre" /0/-1;
to_filters: "Filt_MS-to-L", "Filt_MS-to-R", "Filt_Null";
process: -1;
coeff: "Coeff_S"; # <--- Coeff_S gehört hierher ... #

Hier allerdings...

filter "Filt_MS-to-L" {
from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /0/1;

... und hier ...

filter "Filt_MS-to-R" {
from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /0/-1;

... lässt sich die Stereo-Breite stufenlos und linear von Max. bis Mono einstellen. Falls der S-Anteil ganz weggenommen wird, wird das Ausgangsignal Mono auf beiden L/R Kanälen:

filter "Filt_MS-to-L" {
from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /100/1;

... und hier ...

filter "Filt_MS-to-R" {
from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /100/-1;

Im Beispiel wird in Fettschrift eine Absenkung von -100dB für die S-Komponente definiert.

Richtig also lautet die Brutefir-Config folgendermassen:

Code: Alles auswählen

#############################################
## brutefirconfig
## Filterlänge 64k
## Test
## Soundcard: Thinkpad Intern
## FLOW
#############################################
 

float_bits: 64;             # internal floating point precision
sampling_rate: 44100;       # sampling rate in Hz of audio interfaces
#filter_length: 32768,2;
#filter_length: 16384,4;
filter_length: 8192,8;
#filter_length: 4096,16;
#
allow_poll_mode: true;      # allow use of input poll mode
lock_memory: false;         # try to lock memory if realtime prio is set - set to false, dafür keine systemweite SWAP-file
max_dither_table_size: 0;   # maximum size in bytes of precalculated dither
powersave: false;            # pause filtering when input is zero - nur sinnvoll für Leistungsmessungen ohne Eingangssignal
sdf_length: 0;              # subsample filter half length in samples
#
overflow_warnings: true;    # echo warnings to stderr if overflow occurs
monitor_rate: true;         # monitor sample rate
show_progress: true;        # echo filtering progress to stderr
#safety_limit: -14.5;
#
convolver_config: "/home/privat/_fracon/brutefir_convolver"; # location of convolver config file
#config_file: "/home/privat/_fracon/brutefir_config"; # standard location of main config file
modules_path: "/usr/lib/brutefir"; # extra path where to find BruteFIR modules

 
## LOGIC ##

logic: "cli" { port: 3000; };


## COEFFS ##
 
#coeff <STRING: name | NUMBER: index> {
#	filename: <STRING: filename>; | <NUMBER: shmid>/<NUMBER: offset>/<NUMBER: blocks>[,...];
#	format: <STRING: sample format string | "text" | "processed">;
#	attenuation: <NUMBER: attenuation in dB>;
#	blocks: <NUMBER: length in blocks>;
#	skip: <NUMBER: bytes to skip in beginning of file>;
#	shared_mem: <BOOLEAN: allocate in shared mem>
#};

coeff "Coeff_S" {
	filename: "/home/privat/_fracon/filter/500-4000-2_044.dbl";
	format: "FLOAT64_LE";
	attenuation: 0.0;
	blocks: -1;
	skip: 0;
	shared_mem: false;
};


## INPUT ##

#input <STRING: name | NUMBER: index>[, ...] {
#       device: <STRING: I/O module name> { <I/O module settings>> };
#       sample: <STRING: sample format>;
#       channels: <NUMBER: open channels>[/<NUMBER: channel index>[, ...]];
#	delay: <NUMBER: delay in samples>[, ...];
#	subdelay: <NUMBER: additional delay in 1/100th samples (valid range -99 - 99)>[, ...];
#	maxdelay: <NUMBER: maximum delay for dynamic changes>;
#	individual_maxdelay: <NUMBER: maximum delay for dynamic changes>[, ...];;
#	mute: <BOOLEAN: mute channel>[, ...];
#	mapping: <NUMBER: channel index>[, ...];
#};

input "In_L", "In_R" {
#	device: "alsa" { device: "hw:0"; }; 		# ALSA 
	device: "file" { path: "/dev/stdin"; };
	sample: "S16_LE";
	channels: 2/0,1;
	delay: 0,0;
#	subdelay: 0,0;
#	maxdelay: -1;
#	individual_maxdelay: 0,0;
	mute: false, false;
};


## OUTPUT ##

#output <STRING: name | NUMBER: index>[, ...] {
#	device: <same syntax as for the input structure>;
#	sample: <same syntax as for the input structure>;
#	channels: <same syntax as for the input structure>;
#	delay: <same syntax as for the input structure>;
#	subdelay: <NUMBER: additional delay in 1/100th samples (valid range -99 - 99)>[, ...];
#	maxdelay: <same syntax as for the input structure>;
#	individual_maxdelay: <same syntax as for the input structure>;
#	mute: <same syntax as for the input structure>;
#	mapping: <same syntax as for the input structure>;
#	dither: <BOOLEAN: apply dither>;
#	merge: <BOOLEAN: merge discontinuities at coeff change>;
#};

output 	"Out_L","Out_R" {
	device: "alsa" { device: "hw:0,0"; };
#	device: "file" { path: "/dev/stdout"; };
	sample: "S16_LE";
	channels: 2/0,1;
	delay: 0,0;
#	maxdelay: -1;
#	individual_maxdelay: 0,0;
	mute: false,false;
	dither: true;
};

output 	"Out_Null" {
	device: "file" { path: "/home/privat/Downloads/nullfile.raw"; };
	sample: "S16_LE";
	channels: 1;
};

## FILTERS ##
 
#filter <STRING: name | NUMBER: index> {
#	from_inputs: <STRING: name | NUMBER: index>[/<NUMBER:attenuation in dB>][/<NUMBER:multiplier>][, ...];
#	from_filters: <same syntax as from_inputs field>;
#	to_outputs: <same syntax as from_inputs field>;
#	to_filters: <STRING: name | NUMBER: index>[, ...];
#	process: <NUMBER: process index>;
#	coeff: <STRING: name | NUMBER: index>;
#	delay: <NUMBER: pre-delay in blocks>;
#	crossfade: <BOOLEAN: cross-fade when coefficient is changed>;
#};

### Input filter section

filter 	"Filt_L_pre" {
        from_inputs: "In_L" /0/1;
        to_filters: "Filt_LR-to-M", "Filt_LR-to-S", "Filt_LR-to-S_inv";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

filter 	"Filt_R_pre" {
        from_inputs: "In_R" /0/1;
        to_filters: "Filt_LR-to-M", "Filt_LR-to-S", "Filt_LR-to-S_inv";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

### Matrix L-R to M-S

filter 	"Filt_LR-to-M" {
        from_filters: "Filt_L_pre" /0/1, "Filt_R_pre" /0/1;
        to_filters: "Filt_MS-to-L", "Filt_MS-to-R";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};

filter 	"Filt_LR-to-S" {
        from_filters: "Filt_L_pre" /0/1, "Filt_R_pre" /0/-1;
        to_filters: "Filt_MS-to-L", "Filt_MS-to-R", "Filt_Null";
        process: -1;
        coeff: "Coeff_S";    # <---  Coeff_S gehört hierher ... #
#	coeff: -1;
	delay: 0;
 	crossfade: false;
};

filter 	"Filt_LR-to-S_inv" {
        from_filters: "Filt_L_pre" /0/-1, "Filt_R_pre" /0/1;        
        to_filters: "Filt_Null";
        process: -1;
 	coeff: -1;
	delay: 0;
	crossfade: false;
};

### Matrix M-S back to L-R

filter 	"Filt_MS-to-L" {
        from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /0/1;
        to_outputs: "Out_L";
        process: -1;
        coeff: -1;          # <--- ... und weder hierher ... #
	delay: 0;
	crossfade: false;
};

filter 	"Filt_MS-to-R" {
        from_filters: "Filt_LR-to-M" /0/1, "Filt_LR-to-S" /0/-1;
        to_outputs: "Out_R";
        process: -1;
	coeff: -1;          # <--- ... noch hierher !!! #
	delay: 0;
	crossfade: false;
};

### Control

filter 	"Filt_Null" {
        from_filters: "Filt_LR-to-S" /0/1, "Filt_LR-to-S_inv" /0/-1;
        to_outputs: "Out_Null";
        process: -1;
	coeff: -1;
	delay: 0;
	crossfade: false;
};
Berichtigende Grüsse
Simon
Bild
KSTR
inaktiv
Beiträge: 1221
Registriert: 08.05.2008, 11:51

Beitrag von KSTR »

Daihedz hat geschrieben:Das kann Brutefir auch, und darüber hinaus noch viel mehr.
Weiß ich, aber es ging um eine Lösungsmöglichkeit für "normale" PC-User (d.h. für Windows).
Bild
Martin
Aktiver Hörer
Beiträge: 116
Registriert: 15.03.2012, 14:23

Beitrag von Martin »

Hallo frankl,
wenn ich das richtig verstanden habe hebt LoCo die Mitten im S-Signal an und dämpft die Höhen entsprechend der Kurve bei Sengpiel:

http://www.sengpielaudio.com/Frequenzab ... chtung.pdf

Das M-Signal wird offensichtlich bei LoCo nicht beeinflusst. Dadurch ergibt sich eine Klangbeeinflussung, d.h. es müsste mit LoCo etwas dumpfer klingen. Hast du auch versucht, das M-Signal mit dem invertierten Frequenzgang zu beaufschlagen um die Klangbeinflussung zu kompensieren?

Siehe auch:

http://www.sengpielaudio.com/Shuffler.pdf

Viele Grüße
Martin
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Martin hat geschrieben:Hallo frankl,
wenn ich das richtig verstanden habe hebt LoCo die Mitten im S-Signal an und dämpft die Höhen entsprechend der Kurve bei Sengpiel:

http://www.sengpielaudio.com/Frequenzab ... chtung.pdf

Das M-Signal wird offensichtlich bei LoCo nicht beeinflusst. Dadurch ergibt sich eine Klangbeeinflussung, d.h. es müsste mit LoCo etwas dumpfer klingen. Hast du auch versucht, das M-Signal mit dem invertierten Frequenzgang zu beaufschlagen um die Klangbeinflussung zu kompensieren?
Hallo Martin,

wie kommst Du darauf, dass es hier eine Klangbeeinflussung in Richtung "dumpfer" gibt? Das kann ich aus der Praxis gar nicht bestätigen.

M und S sind Summen- und Differenzsignal. Und die Summe (der "Gesamtpegel", wenn man Phaseneffekte mal nicht berücksichtigt) soll für alle Frequenzen gleich bleiben, nur die Verteilung des Pegels auf rechten und linken Kanal (das wird durch S bestimmt) wird frequenzabhängig geändert.

Vielleicht beziehst Du Dich darauf, dass beim Panning in der Praxis meist nicht das "6 dB pan law" angewendet wird?
Martin hat geschrieben: Siehe auch:

http://www.sengpielaudio.com/Shuffler.pdf
Ja, so mache ich es nicht - und sehe auch nicht, warum ich das machen sollte.

Bei den Francinstien und SHUpHLER Geräten wird auch nur der S-Kanal geändert, wie auf dieser Seite beschrieben wird. Soweit ich es vom Hörensagen weiß, ist das auch bei AcourateFLOW so (ist das irgendwo dokumentiert?, die Fragen, die ich dazu mal gestellt hatte, sind unbeantwortet geblieben).

Ich gebe gleich mal ein kurzes Update über meine Benutzung von LoCo in einem separaten Beitrag.

Viele Grüße,
Frank
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Hallo Forenten,

da das Thema im Moment mal wieder diskutiert wird, will ich hier ein kurzes Update geben, wie es für mich mit LoCo weitergegangen ist. Aus diesem Thread hatte sich ja damals keine Aktivität entwickelt.

Im Prinzip mache ich immer noch genau das, was ich im Eingangsbeitrag beschrieben habe. Nur die technische Durchführung habe ich etwas perfektioniert. Während ich zuerst den LoCo-Filter nach der Raumkorrektur (auf vorgefaltete Musikdateien) angewendet hatte, mache ich das jetzt nach dem Upsamplen auf 192kHz und vor der Raumkorrektur. Außerdem nehme ich einen sehr hochauflösenden Filter.

In meinem Abspiel-Skript habe ich einen Schalter eingebaut, mit dem ich LoCo während des Abspielens an- und ausschalten kann. In der Praxis ist das aber nur von akademischem Interesse. Ich kenne im Moment keine Aufnahme, die ohne LoCo besser klingt als mit (auch die in meinem Eingangsbeitrag genannten Ausnahmen sehe ich mit meiner jetzigen Implementation nicht mehr als Ausnahmen an). Die Wirkung des Filters kann statt mit Worten sehr gut mit einer visuellen Analogie aus der Francinstien Werbung/Erklärung beschrieben werden, ohne LoCo klingt es wie
Bild
und mit LoCo wird das Bild scharf (nicht bei jeder Aufnahme gleich gut, bei stark komprimierten ist der Unterschied gering, bei einigen, insbesondere auch einigen sehr guten, Aufnahmen faszinierend).

Ich habe jetzt mal für die üblichen Sample-Rates hochaufgelöste FIR-Filter für LoCo berechnet, die zum Beispiel mit brutefir genutzt werden können. Diese können von [url=http://frank_l.bitbucket.org/stereoutils/loco.html]dieser Webseite[/url] heruntergeladen werden. Dort steht auch als Tabelle, was der Filter macht, und eine Beispielkonfigurationsdatei für brutefir.

Ich könnte noch erwähnen, dass ich auch mit anderen Filtern experimentiert habe, zum Beispiel habe ich, Vorschlägen von Hans-Martin folgend, die benutzte Kurve von der Sengspiel-Seite anders zu tieferen und höheren Frequenzen extrapoliert, oder die Kurve aus der Francinstien-Dokumentation nachprogrammiert. Diese Varianten konnten in meinem Setup aber die im Eingangsbeitrag beschriebene nicht toppen.

Viele Grüße,
Frank
Bild
Martin
Aktiver Hörer
Beiträge: 116
Registriert: 15.03.2012, 14:23

Beitrag von Martin »

Hallo Frank,
vielen Dank für die Erklärungen und Bereistellung der LoCo-Filter auf Deinen stereo pages.
wie kommst Du darauf, dass es hier eine Klangbeeinflussung in Richtung "dumpfer" gibt?
Wenn ich mir die Filterkurve ansehe, dann werden die Frequenzen über 1000 Hz etwas abgesenkt und die Frequenzen unter 1000 Hz etwas angehoben. Das meinte ich mit "dumpfer". Die nachfolgende Addition bzw. Subtraktion ändert ja nichts am Frequenzspektrum der Summe bzw. Differenz, so dass im Endeffekt die outputs left und right die gleiche Frequenzganbeinflussung erfahren und daher theoretisch etwas "dumpfer" klingen müssten. Oder ist da ein Denkfehler?

Viele Grüße
Martin
Bild
dietert
Aktiver Hörer
Beiträge: 533
Registriert: 24.11.2013, 10:31
Wohnort: 76571 Gaggenau
Kontaktdaten:

Beitrag von dietert »

Hallo Frank,

Dank für die konkreten Lösungs-/Experimentiervorschläge. Bin auch eher ein Freund des Selbermachens, vor allem, weil man bei kommerziellen Lösungen heutzutage nie so genau erfährt, was die eigentlich machen. Bei Dir verstecken sich die Details ja nun in den Filterdateien...

Allerdings, bei etwas Nachdenken, finde ich den Einwand von Oliver (in dem anderen Thread) zutreffend, der sinngemäß lautet:
Wie komme ich eigentlich darauf, dass ein guter Toningenieur solche Tricks nicht beherrscht? Solange ich keine Messgröße habe, an der mein DSP erkennt, ob die Korrektur noch zu machen ist oder nicht, bzw. in welcher Größenordnung, werde ich es vielleicht lieber lassen. Sogar die Vermutung, dass so ein Kriterium an einer bestimmten Aufnahme, einem bestimmten Album oder einem bestimmten Label festzumachen ist, mag zwar plausibel sein, mehr aber nicht.
Meineserachtens eine Diplomarbeit: Wo kriegen wir so eine Messgröße her, die bitteschön auch mit Hörtests korrelliert?

Grüße,
Dieter T.
Bild
Antworten