DSP - Best Practice bei Formatumwandlung und Faltung?

Buschel
Aktiver Hörer
Beiträge: 989
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo zusammen,

ich würde gerne mit sox Sampleratekonvertierung (anstatt der in meinem DAC integrierten) experimentieren. Bisher scheitere ich noch an der Anbindung über alsa. In meinem Setup übergibt kodi das Signal an das alsa-device "brutefir_44k1_32b". Dieses gibt wiederum an das alsa-loop device "aloopp" weiter. Als Eingang für brutefir werden sowohl Daten vom USB-Eingang wie auch vom alsa-loop device "aloopc" angezogen. Die Ausgabe erfolgt wiederum über den USB-Ausgang. Alle Signal benutzen dabei 44,1 kHz 32-bit.
Jetzt möchte ich USB-I/O mit 96 kHz betreiben und brutefir entsprechend damit rechnen lassen. Die Sampleratekonvertierung von 44,1 kHz (kodi Wiedergabe) zu 96 kHz (alsa-loop device) möchte ich über ein entsprechend definiertes alsa-device umsetzen. Bisher ist mir das nicht gelungen. Könnt ihr mir einen Tipp geben oder mit Pseudocode helfen?

Zum besseren Verständnis hier nochmal meine alsa-config:

Code: Alles auswählen

#
# USB audio (DAC)
#
pcm.usbaudio {
	type hw
	card 2
	device 0
	format S32_LE
	channels 2
}

#
# ALSA loopback (capture/playback)
#
pcm.aloopc {
	type hw
	card Loopback
        device 1
	format S32_LE
	channels 2
}

pcm.aloopp {
	type hw
	card Loopback
        device 0
}

# KODI needs "dmix" to list both brutefir devices
pcm.brutefir_44k1_32b {
	type dmix
	ipc_key 1024
	slave {
		pcm "aloopp"
		format S32_LE
		rate 44100
		period_size 512
		buffer_size 8192
	}
}

#
# Default (TV HDMI)
#
pcm.!default {
	type hw
	card 0
	device 3
}

ctl.!default {
	type hw
	card 0
	device 3
}
Grüße,
Andree
Bild
Daihedz
Aktiver Hörer
Beiträge: 793
Registriert: 25.06.2010, 15:09

Beitrag von Daihedz »

Grüezi in die Runde ...
... mit einer (eher theoretischen) Frage zur digitalen Volumeneinstellung.

Nehmen wir an, dass z.B. die Linearität eines DAC's Bit für Bit nachgemessen werden soll.1Bit = +-6dB? Nicht ganz. Ein Bit enspricht einem Pegelsprung von ca. 6.02059991327962dB (gerundet). Wenn nun mittels sox, was bei Volumenoperationen die Eingabe von dB-Werten zulässt, der Pegel auf die Hälfte abgesenkt werden soll - dies in der Meinung, dass im Datenstrom bloss ein Bit umgelegt werden soll, dann könnte eine Befehlszeile wie $sox ... | ... | vol -6dB zu einer Fehlinterpretation führen: -6dB sind gegenüber einem Pegelsprung von 0.5 mit einer Abweichung von ca. 3.4 Promille behaftet, was das Umrechnen mehrerer der 16 oder 24 Bits nach sich ziehen dürfte, ein Wert von -6.0206dB hingegen wäre bereits auf 0.00001 Promille genau.

Bei volrace hingegen erfolgt die Eingabe des Volumens nicht mittels dB-Werten, sondern direkt mittels float-Werten. $volrace -- volume=0.5 ... würde in diesem Fall demgemäss das Volumen wohl um genau -20log102 dB senken, und nicht um -6dB, und dabei dürfte die im Datenstrom beabsichtige Änderung eines einzigen Bits wohl auch von vornherein erfüllt werden?

Soweit zu den theoretischen Überlegungen. In einer pragmatisch-praxisnahen Betrachtung des täglichen Audiogenusses gehe ich hingegen davon aus, dass es wohl keine wesentliche Rolle spielen dürfe, auch nicht bis und mit hin zum DAC, ob nun mit -6 oder -6.0206 abgesenkt wird? Oder doch auch in diesem Alltags-Fall?

Pingelige Nachkommastellengrüsse
Simon
Bild
Hans-Martin
Aktiver Hörer
Beiträge: 9118
Registriert: 14.06.2009, 15:45

Beitrag von Hans-Martin »

Hallo Simon,
um eine der persönlichen Stimmung angemessene Lautstärke einzustellen, bedurfte es noch nie des Blicks auf eine Skala, sondern es kam darauf an, die richtige Wirkung zu erzielen. Da dreht man soweit, bis es stimmte.
Ist doch egal, wie das Ergebnis skaliert genannt wird.
6dB Schritte finde ich zu grob.
Grüße
Hans-Martin
Bild
Daihedz
Aktiver Hörer
Beiträge: 793
Registriert: 25.06.2010, 15:09

Beitrag von Daihedz »

Hallo in die Runde der Frankl-Programmnutzer

Zu volrace und resample_soxr habe ich ein bash-Script (ca. 200 Zeilen) geschrieben, welches eine bequeme und intuitive Lautstärke-, resp. Pegeleinstellung mit vertrauten dB-Werten ermöglicht.

Das Script stellt folgende Optionen zur Verfügung:
$volume.sh ++ erhöht den Pegel um einen intern frei parametrisierbaren Wert (z.B. +3dB, oder +5dB)
$volume.sh -- senkt den Pegel (ditto im Beispiel um -3dB oder -5dB)
$volume.sh + erhöht den Pegel um einen anderen, intern frei parametrisierbaren Wert (z.B. +0.5dB)
$volume.sh - senkt den Pegel (ditto im Beispiel um -0.5dB)
$volume.sh +nn.n erhöht den Pegel um +nn.n dB
$volume.sh -nn.n senkt den Pegel um -nn.n dB
$volume.sh =-nn.n stellt den Pegel auf exakt -nn.n dB ein
$volume.sh 0 stellt den Pegel auf 0dB ein.

Das Script liest aus der Parameter-Datei von volrace/resample_soxr den dort niedergeschriebenen float-wert für die Lautstärke aus, wandelt diesen in einen dB-Wert um, verrechnet diesen mit dem Wert entsprechend dem eingegebenen Script-Parameter, rechnet wieder nach float und schreibt diesen neuen Wert in die volrace/resample_soxr-Parameterdatei zurück. Die neu eingestellten Werte werden in float und dB angezeigt.

Intern ist eine obere und untere Limite für einen max-, resp. min-Pegel parametrisierbar, z.B. 0dB und -95dB. Damit wird die Auswirkung einer an sich sinnlosen oder fehlerhaften Eingabe wie z.B. $volume.sh -365.23 begrenzt. Auch einige andere, mögliche Fehleingaben werden abgefangen.

Mit diesem Script ist eine einfache, fernbedienbare Pegelregelung möglich, in beliebig grossen und kleinen Schritten. Wer das Skript mal ausprobieren möchte, kann mir gerne per PM seine email-Adresse senden. Ich sichere Diskrektion und Virusfreiheit zu und bin gegenüber Verbesserungsvorschlägen sehr empfänglich.

MalLautereUndMalLeisere Grüsse
Simon
Bild
FoLLgoTT
Aktiver Hörer
Beiträge: 554
Registriert: 20.01.2011, 14:05
Wohnort: Hannover
Kontaktdaten:

Beitrag von FoLLgoTT »

Hallo Simon,
wenn du Lust hast, kannst du das Skript ja hier anhängen. Da passt es gut hin. :)

Gruß
Nils
Bild
Daihedz
Aktiver Hörer
Beiträge: 793
Registriert: 25.06.2010, 15:09

Beitrag von Daihedz »

Hallo Nils
FoLLgoTT hat geschrieben: ... Skript ja hier anhängen. Da passt es gut hin. :)
Aha - jä sooo - ich habe auf selbstbezogen-naive Weise nicht realisiert, dass es das Thema und die Lösung hier im Forum schon gibt. In diesem Sinne habe ich, stolzer und genialer Entwickler für den ich mich halte, das Rad, resp. die Uhr ...
https://www.dailymotion.com/video/x2ucp3a
... immerhin neu erfunden.

Ich werde mir die Details Deiner Lösung auf jeden Fall interessiert anschauen und werde in der Folge wohl einiges von Deinem Script übernehmen können.

NunEndlichAufgekärte Grüsse
Simon
Bild
beltane
Aktiver Hörer
Beiträge: 3164
Registriert: 14.11.2012, 09:58
Wohnort: Hannover und Göttingen

Beitrag von beltane »

Hallo zusammen,

für Foobar ist ein passendes DSP Plugin vorhanden, das ein Upsampling auf passende Sampleraten erlaubt:

https://sourceforge.net/projects/resamplerv/

Es kann SSRC oder SOX nutzen.

Die Einrichtung unter Foobar verläuft problemlos. Nur die gewünschten Upsamplings einstellen und es funktioniert. Klanglich muss ich die upgesampelten Stücke noch mit den ursprünglichen Stücken vergleichen. Finde ich spannend, da mein DAC als NOS kein Oversampling durchführt. Ebenfalls habe ich noch nicht geprüft, ob es klangliche Unterschiede zwischen SSRC und SOX gibt.

Viele Grüße

Frank
Bild
gregor
Aktiver Hörer
Beiträge: 669
Registriert: 08.03.2010, 20:08

Beitrag von gregor »

Hallo Leute,

war ich froh, dass ich diesen Thread wieder gefunden hatte! Seit einiger Zeit beschäftige ich mich erneut mit offline SRC. Die Gründe habe ich anderweitig schon mal dargelegt:
gregor hat geschrieben: 28.02.2021, 08:36seit einer Weile betreibe ich eine recht minimalistische Abhörkette. Meine Idee war von der Quelle bis zum Lautsprecher digital durchzureichen und dort D/A zu wandeln, wenn möglich mit 96kHz, der internen Samplingfrequenz des DSP der Adam S3V.

Quelle ist ein Rechner mit macOs 10.14.6. Player derzeit Audirvana 3.5.44, der Rechner versorgt ein Dante DIO-Board von Digimedia, von da mit schweizer AES-Digitalkabel weiter in die Adam S3V. Schön bei dieser Lösung ist, dass der eigentliche Nachteil von Dante, nämlich das manuelle Umstellen der Samplerate, entfällt.

Derzeit erledigt Audirvana das Resampling fest auf 96kHz, damit die Abtastrate bis zur Digital-Analogwandlung im Lautsprecher nicht erneut gewandelt werden muss. Audirvana und die gespielten Tracks liegen immer in einer Ramdisk, für die ich 10 bis 16 GB von 32 reserviere.

Insofern bleibt die SRC im Rechner die letzte Spielwiese und gleichzeitig ist sie der eine Kompromiss, den man bei dieser Herangehensweise eingehen muss.
In einer VM habe ich FrankLs Linuxtool für SOX (dafür herzlichen Dank!) ausprobiert, das wahrscheinlich mit etwas Gefrickel auch unter macOS laufen würde. Bietet sehr interessante Optionen und zeigt, wie unterschiedlich SOX klingen kann.

Daneben habe ich mich auch abseits der Kommandozeile umgesehen. Für die gelegentliche oder auch regelmäßige Konvertierung zwischendurch erscheint mir das komfortabler.

- XLD sampled mit SOX VHQ linear auf 32/96 float, weitere Parameter lassen sich leider nicht einstellen, allerdings ist das auch nicht ganz schlecht. Audirvana reicht die Daten dann als 24/96 an meine LS weiter.
- Adobe Audition 14 sampled ebenfalls auf 32/96 float, das klingt noch einen Tick besser. Die Bedienbarkeit ist bei beiden gleich, Stapelverarbeitung möglich.

Mein bisheriger Klang/Komfortsieger ist also Audition. Aber ich will auch gerne weitere Lösungen ausprobieren. Für Vorschläge wäre ich dankbar.

Beste Grüße
gregor
Bild
gregor
Aktiver Hörer
Beiträge: 669
Registriert: 08.03.2010, 20:08

Beitrag von gregor »

Nach einer Woche weiteren Testens verschiedener SRC-Konverter ist Adobe Audition immer noch mein Favorit.
Besonders erstaunlich erscheint mir das mittlerweile nicht mehr, macht doch die Vorgängerversion auf https://src.infinitewave.ca/ bereits eine ziemlich gute Figur. Die Messwerte dort beziehen sich allerdings auf das Downsampling von 96 kHz auf 44,1 kHz, mir geht es ja um die Gegenrichtung.

Für meine Digitalstrecke ist das bereits beschriebene Offline-Upsampling in Audition auf 32/96 (float), Wandlung in Audirvana auf 24/96 und dann weiter in die Adams das gehörmäßig beste Verfahren. Auf diese Weise vermeide ich eine weitere SRC in den DACs der Lautsprecher.

Für alle, die selbst SRC Versuche mit Adobe Audition machen wollen, steht die Software zum für sieben Tage kostenlosen Test bereit.
https://www.adobe.com/de/products/audit ... nload.html

Beste Grüße
gregor
Bild
Antworten