EasyPi - der MiniDSP Ersatz (Spdif Eingang, BruteFIR Faltung, I2S Ausgang)

Antworten
Janho
Aktiver Hörer
Beiträge: 33
Registriert: 01.08.2017, 20:56
Wohnort: Weinheim, BW

EasyPi - der MiniDSP Ersatz (Spdif Eingang, BruteFIR Faltung, I2S Ausgang)

Beitrag von Janho »

Hallo,

heute möchte ich einen kurzen Beitrag über den gerade fertig gewordenen Raspberry Pi DSP teilen.

Die Idee war simpel: Ein Ersatz für den MiniDSP

Vorgaben:

- S/PDIF Eingang
- Raum Korrektur Faltung
- I2S Ausgang (geht an den Soekris Dam1021)
- Ohne externe Steuerung
- zum Preis eines miniDSP (ca. 200€)

Hardware:

- Da es auf dem Markt sehr wenige S/PDIF auf USB Wandler gibt, hat es etwas gedauert, den passenden zu finden. Ich nahm schließlich den USB2DA von Herrn Beis (findet man leicht über die Suchmaschine) dies war der größte Kostenpunkt, mit 145 € für das Nischen Produkt. Alternativen waren sehr teure professionelle bidirektionale USB-SPDIF/AES Interfaces, RME etc.

- Raspberry Pi 4 (4x500Mhz) Ausreichend für 131072 Filter Koeffizienten bei 48KHz (45€)

Software:

- Raspbian Linux (Headless)
- BruteFIR (1.0.o)
- Daemontools (einfacher Prozessverwalter)


Übersicht der Umsetzung:

Der USB2DA meldet sich bei jedem Wechsel der Sampling Rate als USB Gerät neu an; dies machte ich mir zu Nutze, um eine udev rule (eine Vorschrift) zu erstellen, die abfrägt, welche Sampling Rate nun ankommt.

Je nach Sampling Rate wird bei diesem erneuten Verbinden des USB2DA, BruteFIR durch den Prozessverwalter (Deamontools), mit der passenden Sampling Rate aufgerufen.

Wenn Sich die Sampling Rate nun ändert, meldet sich der USB2DA ab, der Prozessverwalter stoppt BruteFIR, der DA2USB meldet sich sogleich wieder an und der Prozessverwalter startet BruteFIR mit der neuen Samplingrate.

So läuft das System ganz von alleine.
Die Wechsel gehen innerhalb von ein-zwei Sekunden.

So war das ganze Fertig.



Falls Interesse Besteht, kann ich gerne jeden Schritt durchgehen. Viel ist es nicht, ca. 1h am PC für ungeübte.
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Janho hat geschrieben: 11.07.2020, 20:05 Falls Interesse Besteht, kann ich gerne jeden Schritt durchgehen. Viel ist es nicht, ca. 1h am PC für ungeübte.
Hallo,

Interesse besteht meinerseits immer an solchen rpi-Basteleien. Danke im voraus für die ausführliche Darstellung der nötigen Maßnahmen/Schritte. ;)

Gruß

Jochen
Bild
freezebox
Aktiver Hörer
Beiträge: 576
Registriert: 08.07.2011, 11:42
Wohnort: München

Beitrag von freezebox »

Hallo Janho,

Danke für den interessanten Tip! Den DA2USB kannte ich noch nicht. Das eröffnet evtl. ganz neue Möglichkeiten einer hochwertigen digitalen Faltmaschine, da man ja damit einen hochwertigen SPDIF Eingang mit einer hochwertigen Pi HAT SPDIF out Karte wie z.B. Allo Digione oder auch DAC HAT verwenden könnte, wenn man kein i2s out haben möchte.
Da die internen clocks des raspi i2s ja nicht so dolle sind, wäre das evtl ja auch interessant für Dich, z.B. einen reclocker oder den i2s Ausgang einer hifiberry DACpro zu nehmen? Aber ich glaube der soekris hat eh schon nen Re-clocker drin.

Für ein einfacheres SPDIF in/out gibts ja schon das AroioOS von Abacus mit der hifiberry digital i/o Karte.

Grüße,
Jörn
Bild
Janho
Aktiver Hörer
Beiträge: 33
Registriert: 01.08.2017, 20:56
Wohnort: Weinheim, BW

Beitrag von Janho »

freezebox hat geschrieben: 12.07.2020, 13:19
Da die internen clocks des raspi i2s ja nicht so dolle sind, wäre das evtl ja auch interessant für Dich, z.B. einen reclocker oder den i2s Ausgang einer hifiberry DACpro zu nehmen? Aber ich glaube der soekris hat eh schon nen Re-clocker drin.
Der Recklocker von IanCanada (FiFoPi_Ulitimate) ist schon drauf ;) aber ich muss diesen vom Pi entfernen um ein paar cm da dieser "strahlt".
Eventuell steige ich sogar um auf Amanero USB Soundkarte.
freezebox hat geschrieben: 12.07.2020, 13:19 Für ein einfacheres SPDIF in/out gibts ja schon das AroioOS von Abacus mit der hifiberry digital i/o Karte.
Das mit dem einfachen Aufbau des Hifiberry I/O wusste ich allerdings nicht! Danke für den Hinweis. (UP/ oder Down-Simplen habe ich hier ja jetzt nicht implementiert, aber mit dem HifiBerry I/O [wenn das alles per I2S In und I2S Out geht] kann man nur mit der selben Rate raus wie rein oder?)

Das Aroio Image hatte ich mir angeguckt, nur war die Adaptierung auf meine Idee schwieriger als das komplette selbst Einrichten.
Auch war ich mir nicht sicher, ob man problemlos mit REW / RePhase erstellte Filter einbinden könnte oder nur die Acourate Sachen.
Gibt es beim Arioso mit HiFiBerry I/O auch eine Automatische Sample Rate Umstellung? Und kann man die BruteFIR Config selbst bearbeiten oder wird diese beim Neustart überschrieben? und zuletzt, der neue Pi4 wird nicht unterstützt... (gut, ob die paar hundert MHz jetzt DEN Unterschied machen.. :D
Bild
freezebox
Aktiver Hörer
Beiträge: 576
Registriert: 08.07.2011, 11:42
Wohnort: München

Beitrag von freezebox »

Aroio ohne acourate wird schwierig..

Du kannst für die Ausgabe eine fixe SR einstellen. Alles was reinkommt wird dann auf diese SR umgerechnet meine ich. Für genaue Infos ist der SW Entwickler "atom" im Aroio Forum zu Gange.

Grüße,
Jörn
Bild
Janho
Aktiver Hörer
Beiträge: 33
Registriert: 01.08.2017, 20:56
Wohnort: Weinheim, BW

Beitrag von Janho »

Ich bin schon am schrieben des detaillierten Set-Up, da kam eine Frage auf:

Beim betrieb des RPi als Streamer, mit MediaPlayerDaemon (MPD) o.ä., muss doch eine Änderung der SampleRate (SR) auch per udev beobachtet werden können, da ja ALSA den Takt umstellen muss- oder nicht? Könnte das evtl. jemand mal testen mit dem udev monitor?

also:
- Musik über MPD abspielen,
- dann: "sudo udevadm monitor"
- dann einen anderen Titel abspielen mit bekanntermaßen anderer SR
- den output hier posten =)

Wenn die Änderung angezeigt wird, wäre es doch, per udev rule, auch hier einfach, BruteFIR (über den o.g. Daemontools) zu schließen und mit der passenden neuen SR wieder zu öffnen.

Ich weiß nicht, wie Ihr die Umstellung zwischen SR sonst macht, oder nehmt Ihr meist den SOXr oder einen anderen SR Wandler um BruteFIR mit einer immer gleichen rate zu füllen?

P.S das kleine elegante SPDIF zu USB device von Herrn Beis heißt nicht USB2DA sondern logischer Weise DA2USB
Bild
bastelixx
Aktiver Hörer
Beiträge: 297
Registriert: 08.11.2015, 17:31

Beitrag von bastelixx »

Janho hat geschrieben: 13.07.2020, 11:01 Ich bin schon am schrieben des detaillierten Set-Up, da kam eine Frage auf:

Beim betrieb des RPi als Streamer, mit MediaPlayerDaemon (MPD) o.ä., muss doch eine Änderung der SampleRate (SR) auch per udev beobachtet werden können, da ja ALSA den Takt umstellen muss- oder nicht? Könnte das evtl. jemand mal testen mit dem udev monitor?

also:
- Musik über MPD abspielen,
- dann: "sudo udevadm monitor"
- dann einen anderen Titel abspielen mit bekanntermaßen anderer SR
- den output hier posten =)

Wenn die Änderung angezeigt wird, wäre es doch, per udev rule, auch hier einfach, BruteFIR (über den o.g. Daemontools) zu schließen und mit der passenden neuen SR wieder zu öffnen.

Ich weiß nicht, wie Ihr die Umstellung zwischen SR sonst macht, oder nehmt Ihr meist den SOXr oder einen anderen SR Wandler um BruteFIR mit einer immer gleichen rate zu füllen?
Moin,

wie ich verstehe, willst du Dateien mit verschiedenen SR abspielen können. Vielleich hielft dir meine Erfahrung. Ich benutze in meinem Multimedia-PC auch MPD zum Audiodateien abspielen, gleichzeitig kann ich über SPDIF opt. Eingang meiner Soundkarte Fernsehrsound über meine Anlage wiedergeben. Ich musste mein Jack2 Soundserver mit Brutefir auf 48KHz einstellen, da mit 44,1KHz Synchronisationsprobleme gabs. MPD musste ich selbs kompillieren mit den soxresemple libs (wenn ich mich richtig erinnere). Mein selbstkompillierer MPD spielt alle Formate und gibt automatisch an Jack2 mit 48KHz aus. Sogar HIRES flac mit 192KHz. Viele würden fragen, warum downsampling? Ganz einfach, da ich ganzes System auf 192KHz umstellen müsste, was deutlich höhere Rechenleistungen des PC erfordert oder höhere Latenzen in Kauf nehmen (kein synchrone Filmsound mehr möglich), dazu kommt, dass ich noch 3x D/A-Wandler für meiner 4-Wege System benötigen würde.

Gruß
Stanislaw
Bild
Janho
Aktiver Hörer
Beiträge: 33
Registriert: 01.08.2017, 20:56
Wohnort: Weinheim, BW

Beitrag von Janho »

bastelixx hat geschrieben: 13.07.2020, 14:00
wie ich verstehe, willst du Dateien mit verschiedenen SR abspielen können.

Danke, das geht ja bereits schon. Die Frage hier war mehr aus reinem Interesse.
bastelixx hat geschrieben: 13.07.2020, 14:00
Vielleich hielft dir meine Erfahrung. Ich benutze in meinem Multimedia-PC auch MPD zum Audiodateien abspielen, gleichzeitig kann ich über SPDIF opt. Eingang meiner Soundkarte Fernsehrsound über meine Anlage wiedergeben. Ich musste mein Jack2 Soundserver mit Brutefir auf 48KHz einstellen, da mit 44,1KHz Synchronisationsprobleme gabs. MPD musste ich selbs kompillieren mit den soxresemple libs (wenn ich mich richtig erinnere). Mein selbstkompillierer MPD spielt alle Formate und gibt automatisch an Jack2 mit 48KHz aus. Sogar HIRES flac mit 192KHz. Viele würden fragen, warum downsampling? Ganz einfach, da ich ganzes System auf 192KHz umstellen müsste, was deutlich höhere Rechenleistungen des PC erfordert oder höhere Latenzen in Kauf nehmen (kein synchrone Filmsound mehr möglich), dazu kommt, dass ich noch 3x D/A-Wandler für meiner 4-Wege System benötigen würde.
Hast du bezüglich der Latenz mal mit höheren "<NUMBER: number of subfilters per filter>];" probiert?

Mein Ansatz ist, dass ich eben keine Umwege gehe über SOX und auch nicht über Jack. Es war daher die Frage, ob sich mein oben implementiertes System der automatischen SR Erkennung und BruteFIR Einstellung übertragen lässt auf die Eingabe von Streams aus dem MPD.

Gruß,

Jan
Bild
Antworten