Forum: Mikrocontroller und Digitale Elektronik toslink/spdif AC-3


von Frank (Gast)


Lesenswert?

Hallo,

ich suche Informationen zu AC-3 aka "Dolby Digital", speziell zum 
übertragungsformat hardwarseitig, also spdif/toslink.

Ich bin soweit, auf einem ARM (Freescale)) PCM-Stereo im SPDIF Format 
auszugeben, funktioniert soweit prächtig.
Ich finde aber kaum Informationen im Netz um das ganze weiter 
aufzubohren. Vielleicht suche ich auch nur falsch, weiß nicht:

Es geht erstmal nur darum, eine entsprechende 5.1 Wavedatei auszugeben. 
Also kein encodieren in Echtzeit oder sowas. Nur die reine Ausgabe einer 
5.1 Datei.

Meine Hauptfragen:
Wird für AC-3 ("Dolby Digital 5.1") die selbe Bitrate wie für PCM 
verwendet ?
Und falls ja, 2.8MHz (44.1kHz PCM) oder 3.1MHz (48kHz PCM)?

Reicht es, im Bitstream das entsprechende Bit für das Fomat zu setzen, 
und stumpf die Daten auszugeben, oder gibt es noch mehr, das beachtet 
werden muss ?

Würde mich über konkrete Infos, Links, und Hinweise sehr freuen!

Frank.

von Michael U. (amiga)


Lesenswert?

Hallo,

AC3 ist ein Audio-Codec-Format, Du wirst es also schon in Echtzeit 
codieren müssen oder eben AC3-Files ausgeben können, die schon codiert 
sind.
Ein Mehrkanal Wave sind ja jedesmal z.B. 16Bit/44,1kHz, da müßtest Du 
dann ja statt 2x für Stereo 6x ausgeben, also die 3-fache Datenrate über 
SPDIF schicken. Das geht aber nicht bzw. passt in keine Norm.

Gruß aus Berlin
Michael

von Clemens L. (c_l)


Lesenswert?

Frank schrieb:
> ich suche Informationen zu AC-3 aka "Dolby Digital"

Die Spezifikation gibt's kostenlos:
http://atsc.org/standard/a522012-digital-audio-compression-ac-3-e-ac-3-standard-12172012/

> Es geht erstmal nur darum, eine entsprechende 5.1 Wavedatei auszugeben.
> Also kein encodieren in Echtzeit oder sowas.

Ohne Encodieren hast du aber nicht AC-3.

> Wird für AC-3 ("Dolby Digital 5.1") die selbe Bitrate wie für PCM
> verwendet ?

S/PDIF kann eigentlich nur Stereo-Daten übertragen. Deshalb ist so etwas 
wie AC-3 nötig, um die Daten auf die selbe Bitrate wie Zwei-Kanal-PCM zu 
komprimieren.

> Und falls ja, 2.8MHz (44.1kHz PCM) oder 3.1MHz (48kHz PCM)?

Ja.

von Frank (Gast)


Lesenswert?

Ja, es geht nur darum eine schon entsprechend komprimierte Datei 
auszugeben.

Danke für de Link zur Spezifikation, genau sowas hatte gesucht.

von Frank (Gast)


Lesenswert?

oh man, tippos..

DEN Link hatte ICH gesucht :-)

von Frank (Gast)


Lesenswert?

Habe mal wieder zu kompliziert gedacht.
Das funktioniert "out if the box". Wenn man erfolgreich eine 
Stereo-Wavdatei ausgeben kann, geht das genauso mit einer 5.1 Wavedatei. 
Man muss rein garnix ändern !  Zumindest "receiver"/decoder ignoriert 
z.B. die auxbits völlig und interessiert sich nicht dafür. Ich glaube er 
erkennt das Format an ein paar "0"-Samples (da bin ich mir aber nicht 
100% sicher)

Dies nur zur Info..

von Georg A. (georga)


Lesenswert?

Allerdings sollte man das Valid-Bit löschen, damit nicht-AC3-Dekoder das 
Rauschen verhindern. AFAIK hatte ich mal einen Dekoder in den Fingern, 
der ohne das gar nicht ging, kann mich aber täuschen.

Die Formaterkennung läuft über die spezifischen Magics am Anfang der 
Frames.

von Frank (Gast)


Lesenswert?

Danke für den Tip. Das werde ich dann warscheinlich noch implementieren.
Übrigens...ja steinigt mich ruhig...das ganze läuft unter "Arduino" auf 
einem "Teensy" ;-)

von frank (Gast)


Lesenswert?

funktioniert..!


Und weil das so gut geklappt hat, gleich eine neue Frage:

Wie übertrage ich (z.B.) MP2 über SPDIF ?
Wenn ich einfach nur "dumM" die Daten kopiere wie bei AC3, geht das ja 
viel zu schnell.. also muss ich irgendwie synchronisieren und vermutlich 
"0"-Samples einfügen ?

von Georg A. (georga)


Lesenswert?

Kann dein Receiver überhaupt MP2? Normal sind da eigentlich nur PCM und 
AC3, DTS ist schon nicht immer dabei.

Das steht alles im IEC61937, leider ist der $$$. Evtl. findet er sich in 
dunklen Ecken... Aber egal, schau mal, ob du aus dem Code bezüglich des 
Headers was rausziehen kannst:

https://github.com/jojva/gst-plugins-base/blob/master/gst-libs/gst/audio/gstaudioiec61937.c

Nachdem der auch AC3 macht, solltest du dich ja schon auskennen ;)

Zur Synchronisierung musst du halt aufpassen, dass die Zeit eines vollen 
MPEG-Frames (1152 Samples, also 24 bzw. 26.1xms) immer stimmt. Wenn der 
Frame von den Daten her kürzer ist, muss er mit Nullen aufgefüllt 
werden.

von Clemens L. (c_l)


Lesenswert?

frank schrieb:
> Wie übertrage ich (z.B.) MP2 über SPDIF ?

Am einfachsten: gar nicht. Dekodieren und als PCM übertragen.

Bei MPEG-1 Audio Layer II ist Komprimierung nicht notwendig, weil die 
benötigte Bandbreite der Rohdaten nie höher sein kann, als S/PDIF eh 
schon unterstützt. Deswegen werden die meisten Receiver auch nicht 
erwarten, dass MP2 über S/PDIF kommt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.