th0masrad schrieb:
Wie kann ich unter Linux/ubuntu die Abtastrate eines SPDIF-Signals erkennen?
Ich habe ein Audiogerät, das ein SPDIF-Signal entweder mit 32, 44,1 oder 48 kHz Abtastrate ausgibt. Ich kann an dem Audiogerät nicht erkennen, welche Abtastrate es nutzt. Dafür ist leider keine Anzeige vorgesehen.
Nun möchte ich gerne dieses Signal möglichst 1:1 - also ohne Abtastratenänderung - aufnehmen. Grundsätzlich ist das Aufnehmen, mit z. B. audacity möglich. in audacity kann ich den SPDIF-Eingang als Quelle auswählen und aufnehmen. Aber ich muss die Abtastrate in audacity einstellen und weiß natürlich nicht, welche Abtastrate das Audiogerät gewählt hat.
(Äußerst vereinfacht ausgedrückt stelle ich mir vor, dass die Soundkarte das SPDIF-Signal dekodiert und das dekodierte - also beinahe wieder analog gewordene - Signal an audacity weiterreicht. In audacity kann es dann wieder mit verschiedenen Abtastraten kodiert werden.)
Somit ergeben sich eigentlich drei Fragen:
Komme ich irgendwie direkt an das originale SPDIF-Signal heran?
Wenn das nicht möglich ist, wie kann ich die Abtastrate des SPDIF-Signals erkennen, so dass wenigstens die Abtastratenkonvertierung wegfällt?
Liege ich mit meinen Überlegungen möglicherweise völlig daneben? ☺
Danke!
MfG
Thomas Rad
Hi Thomas,
ich bin mir nicht sicher, ob dich meine Antwort noch erreicht, und/oder noch interessiert - liegt ja viel Zeit dazwischen. Ich habe mich jetzt exakt, wegen deiner Frage bei "ubuntuusers" angemeldet - bin also neu hier. Deine Frage hatte mich schon vor 10 Jahren interessiert und da ich noch nie einen Menschen fand, der genau auch das wissen wollte, hatte ich aufgegeben. Froh bin ich aber, dass du dir die gleiche Frage gestellt hattest.
Zu meiner Person: Ich komme beruflich aus dem kommerziellen Unix Bereich (HP-UX und AIX). Privat habe ich mich mehr mit Debian beschäftigt. Tut aber nichts zur Sache, höchstens, dass ich in unixoiden Systemen kein unbeschriebenes Blatt bin.
Um mein Ergebnis vorweg zu nehmen, ich habe keine 100% eindeutige Softwarelösung gefunden, womit man die tatsächliche samling rate eines digitalen Audiosignals, welches am optischen (TOSLINK) oder coaxialen Eingang anliegt, auslesen kann. Es geht eben nicht um das bereits aufgenommene und gesicherte Signal (File). Da ist ja im ungünstigsten Fall schon beim einlesen up oder down resampled worden.
ALLERDINGS habe ich eine Hardwarelösung gefunden, die genau die sampling rate anzeigt, die aus einem coaxialen oder optischen Audioausgang angeboten wird. Ich verwende an meinen Musikservern nicht die onboard Audiohardware. Habe mich stattdessen für externes (USB) Audio-OUT und im Bedarfsfall auch externes (USB) Audio-In entschieden. Natürlich wollte auch ich wissen, wie bei einem USB ADC der z.B. das analoge Eingangssignal bei einer Bittiefe mit 24Bit und sampling rate von 44.1 / 48 / 96kHz wandelt. Dem Wandler selbst kann man das ja nicht mitteilen. Würfelt er das aus? Nein. Es ist schon so, dass er die Möglichkeiten was er kann Wortbreite 16,24 oder gar 32 bit und die sampling rates dem OS mitteilt um der "abholenden" routine sagen, was geht und was nicht. Würde der Anwender, bereits bei seinem Audacity sehen, dass das aufzunehmende digitale Audiosignal bei 16Bit mit 48kHz am Eingang anliegt, würde er es dabei belassen und nicht mit 96kHz aufnehmen. Leider sieht er das eben nicht, er kann es nur raten. Sei denn der ADC ist fix für 16Bit und 44.1kHz und kann nur das.
Die Hardware die das kann findet man unter der Bezeichnung "Portable Digital Audio SPDIF Sampling Rate Indicator 32-192kHz CS8416 DAI" im Netz, bei ebay. Kommt aus den USA und auch zu einem Fairen Preis. Leider sind die Versandkosten zu hoch, so dass ich selbst davor zurückgeschreckt bin. Mittlerweile glaube ich aber dass man das nicht braucht. (Glauben heißt aber nicht wissen).
Ich habe natürlich deinen Thread überflogen und allein an deinen Fragen merke ich, dass du die Thematik absolut richtig verstanden hast und auch formulieren kannst. Ich selbst nutze pulseaudio nicht und meist auch keinen grafischen Desktop. Nativ nutze ich unter Linux natürlich ALSA. Und da ist man unter /proc/asound/cards schon an einer guten Stelle. Zuvor schaue ich im terminal mit "alsamixer" die Audiohardware an. Um die Ausgabe geht es ja da nicht, die findet man bei der entsprechenden Card unter hw_info. Die Aufnahme hingegen unter /proc/asound/cards .../stream.../hw_info. Da sieht man auf jeden Fall, ob das was im Prospekt des Wandlers steht auch stimmt. Man sieht die Wortbreite (das Format) und auch die unterstützten sampling rates. Ich stelle mir vor (ohne es genau zu wissen), dass wenn ich dort sehe, dass der Wandler 96kHz kann, ich auch mit 96kHz abholen und mit arecord auf die Platte schreiben kann.
In meinem auch ausgeführten Fall:
arecord -D plughw:CARD=CODEC,DEV=0 -q -c 2 -f S16_LE -r 96000 -t wav --disable-resample --disable-format > /media/tmp/foobar3.wav
Zuvor habe ich nachgesehen, wie der USB ADC heißt, dass ich stereo (2 channel) aufnehmen möchte. Der ADC auch nur 16Bit kann und unter anderem eine sampling rate von 96kHz unterstützt. Vorerst nur in wav aufgenommen, weil es nur ein test ist. Interessant sind die Parameter --disable-format und --disable-resample (steht in den man pages von arecord).
Soviel zur Sache. Mir hat wirklich gefallen, dass du an der gleichen Stelle eine Problematik gesehen hast. Ich sehe inzwischen noch ganz andere Probleme: Schon vor 10 Jahren ging man dazu über, spezielle Anforderungen auszulagern. Via USB, Firewire, Thunderbold etc. wanderten auch Soundboxen entsprechend der Bedürfnisse nach aussen. Nicht schlecht geschaut habe ich, dass es heute praktisch gar keine USB Soundkarten mit einem Line-In mehr gibt. Jetzt hat man mich aufgeklärt, dass das keine USB Soundkarten, sondern USB-Headset Interfaces sind. So ein Micro Eingang ist grundsätzlich MONO! Schöne neue Welt.
MfG
Peter