DSP - Best Practice bei Formatumwandlung und Faltung?

Musikwiedergabe über PC und Mac

Beitragvon Buschel » 23.07.2018, 12:29

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:
#
# 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
Buschel
Aktiver Hörer
 
Beiträge: 659
Registriert: 12.12.2013, 21:12
Wohnort: Raum Karlsruhe

Beitragvon Daihedz » 27.07.2018, 16:34

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
Daihedz
Aktiver Hörer
 
Beiträge: 651
Registriert: 25.06.2010, 15:09

Beitragvon Hans-Martin » 27.07.2018, 23:57

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
Hans-Martin
Aktiver Hörer
 
Beiträge: 6063
Registriert: 14.06.2009, 15:45

Beitragvon Daihedz » 06.10.2018, 21:00

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
Daihedz
Aktiver Hörer
 
Beiträge: 651
Registriert: 25.06.2010, 15:09

Beitragvon FoLLgoTT » 07.10.2018, 08:28

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

Gruß
Nils
Bild
FoLLgoTT
Aktiver Hörer
 
Beiträge: 513
Registriert: 20.01.2011, 15:05
Wohnort: Hannover

Beitragvon Daihedz » 07.10.2018, 09:47

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
Daihedz
Aktiver Hörer
 
Beiträge: 651
Registriert: 25.06.2010, 15:09

Beitragvon beltane » 20.10.2018, 19:22

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
beltane
Aktiver Hörer
 
Beiträge: 1874
Registriert: 14.11.2012, 10:58
Wohnort: Hannover und Göttingen

Vorherige

Zurück zu Computer-HiFi

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste