Sollte natürlich heissenDaihedz hat geschrieben: Brutefir-Config - Brutefir sollte was zu fressen kriegen:
Filter 44.1/32kB - 88.2/64kB - 176.4/128kB
Filter 44.1/256kB - 88.2/512kB - 176.4/1024kB
Korrektive Grüsse
Simon
Das ist ein konsequentes Ergebnis aus deiner Messung und den Hörtests.Daihedz hat geschrieben:Ich werde meine Pipes fortan immer (!) auf 64Bit/float hochrechnen und zur weiteren Bearbeitung exakt auf jene Samplerate konvertieren, welche am Ausgang der Pipe den DA-Wandler speisen soll. Nichts mehr, aber auch nichts weniger.
Für den Test habe ich die ersten paar Takte von SilvertownBlues im Format 16/44.1 (d.h. mit einem rechnerisch möglichen Dynamikumfang von ca. 90dB) eingelesen, welche mit Spitzen von ca. -10dB ... -6dB aufgenommen sind. Damit ergibt sich, dass der Dynamikbereich der Verarbeitung innerhalb der Pipe für die 32Bit-Variante bei -80dB ... -160dB lag, bei der 64Bit-Variante -120dB ... -200dB. Dies für die perfekte Abhöre bei initialen -70dB, resp. -110dB Absenkung. Oder mache ich da vielleicht einen Denkfehler?Buschel hat geschrieben: ... Ich hätte nicht damit gerechnet, dass bei float32 und auch float64 schon "so früh" hörbare Einschränkungen auftreten. Wäre interessant zu wissen, an welchem Arbeitsschritt das liegt. Wird evtl. zu viel Dither eingefügt, der durch die Verstärkung zu stark auffällt? ...
Das war im Testsetup durch die massive Absenkung des Pegels Eingangs der Pipe sicherlich gegeben, resp. erfüllt. Eine produktive Pipe mit moderatem ISC-Schutz würde denn z.B.entsprechend so aussehen:Buschel hat geschrieben: ... Wenn du SRC anwendest, solltest du das Signal generell vorher etwas abschwächen (2-3 dB), da es zu intersample overs kommen kann. Ohne Absenkung führen intersample overs zu Clipping und damit zu Verzerrungen sobald du wieder in den Integer-Zahlenbereich wechselst. ...
Ja, genauso würde ich das auch umsetzen, wenn mein Setup nicht gewisse Eigenheiten (*) hätte.Daihedz hat geschrieben: -> sox/stdin Formatumwandlung (16 integer -> 64 float) ->
-> sox vol (-2dB ... -3dB)
-> sox rate (44.1/48/96 -> 96) ->
-> brutefir (96kHz) ->
-> sox Formatrückwandlung (64 float -> 32/24/16 integer - ggf. mit Dithering) - stdout ->
Gute Idee. Das Dithering sollte wie oben von dir zitiert nur im letzten Schritt (Wandlung von float zurück zu int) hinzugefügt werden. Bin gespannt was du herausbekommst.Daihedz hat geschrieben:Ich werde nochmals eine Versuchsreihe mit -D durchrechnen und dann berichten.
Meinst du damit das setting "filter_length" in brutefir? Wenn ja, könntest du noch ein wenig optimieren, falls du mehr Verzögerung zulassen kannst. Du kannst z.B. anstatt "8192, 32" direkt "262144" nutzen. Darüberhinaus is das Filter auch recht lang. Ausgehend von Acourate mit 65536 taps bei 48 kHz, würde ich "nu" 131072 taps bei 96 kHz erwarten.Tinitus hat geschrieben:... Filter 8192, 32 eben gehörig mehr Rechenleistung fordert als 8192, 16...
Das ist auch für mich einer der Gründe auf 96 kHz zu wandeln. Die Oversamplingfilter des DAC-Chips fallen dann sanfter ab, und ich vermeide in meinem Setup zwei aufeinanderfolgende (ASRC>DAC) steile Filter. Aber: Vergiss nicht, dass auch dein sox-Filter ein Oversamplingfilter ist und je nach gewähltem Filter entsprechende Auswirkungen hat (pre-ringing, post-ringing, aliasing, ...).Tinitus hat geschrieben:Ein weiterer Grund fürs upsampling ist für mich, dass verschiedene DA-Filter sich dann weniger im hörbaren Bereich auswirken. Bei 16/44,1 höre ich unterschiede zwischen verschiedenen Filtern, bei 32/96 keine mehr.
Kannst du die Absenkung nicht direkt in sox machen lassen? Mit demselben Kommando, das zur Abtastratenwandlung benutzt wird?Tinitus hat geschrieben:Wenn ich es richtig verstehe müsste ich zur Vermeidung von ISC mit mpd vor dem upsampling auf 32/96 den Pegel etwas senken, kennt jemand die dafür passende Synthax für die mpd.conf? Für einen Tipp wäre ich da dankbar.
Code: Alles auswählen
Sampling Nyquist Abtastreserve
44,1 KHz => 22,05 KHz => - 20 KHz = 2,05 KHz
48 KHz => 24 KHz => - 20 KHz = 4 KHz
88,2 KHz => 44,1 KHz => - 20 KHz = 24,1 KHz
96 KHz => 48 KHz => - 20 KHz = 28 KHz
Die innerhalb einer mpd-config deklarierte Pipe ist von der Syntax her genau gleich wie in eine nackte bash-pipe (ich spreche von linux). Du kannst Deine gewünschte Pipe gleich nach dem command-parameter in der mpd.config folgendermassen deklarieren:Tinitus hat geschrieben: ... Wenn ich es richtig verstehe müsste ich zur Vermeidung von ISC mit mpd vor dem upsampling auf 32/96 den Pegel etwas senken, kennt jemand die dafür passende Synthax für die mpd.conf? ...
Heisst das in der Konsequenz, dass Du für das Upsampling sowas empfehlen würdest:dietert hat geschrieben: ... Entscheidend bei der digitalen Interpolation ist der erste Faktor zwei. Er vergrößert den Abstand zwischen der Nyquistfrequenz und der Nutzbandbreite, darum geht es...
Code: Alles auswählen
audio_output {
type "pipe"
name "brutefir pipe"
command "usr/bin/brutefir -nodefault /opt/brutefir_config 2>/dev/null"
format "96000:32:2"
Code: Alles auswählen
audio_output {
type "pipe"
name "brutefir pipe"
command "sox gain -2 | sox input.wav -r 96000 -b 32 output.wav| usr/bin/brutefir -nodefault /opt/brutefir_config 2>/dev/null"
Code: Alles auswählen
audio_output {
type "pipe"
name "brutefir pipe"
command "sox gain -2 | sox STDIN -r 96000 -b 32 STDOUT| usr/bin/brutefir -nodefault /opt/brutefir_config 2>/dev/null"
Code: Alles auswählen
audio_output {
type "pipe"
name "brutefir pipe"
command "sox gain -2 | sox infile.ulaw -r 96000 -b 32 outfile.wav| usr/bin/brutefir -nodefault /opt/brutefir_config 2>/dev/null"
Dann gibt DRC also Filter mit 128k taps pro Kanal aus (doppelt so lang wie Acourate). Beim Rechnen mit 64 bit Fließkomma bleibt das Filter bestehen (also in deiner Notation 8192, 16), die interne Rechengenauigkeit und damit Rechenlast ist aber höher. Unterstützt die benutzte Hardware denn auch 64 bit float, oder läuft das über Software-Emulation (was ja ziemlich langsam wäre)?Tinitus hat geschrieben:... daraus macht DRC 512 kB große Mono Filterdateien (96 kHz 32 bit). Daraus ergibt sich für 32 bit brutefir die filter_length von 8192, 16. Ich gehe davon aus, dass Daphile, welches 64 bit brutefir verwendet dieses Filter auf 8192, 32 "aufbohrt".