Wie ac3 in DDWAV verpacken (Sourcecode?)

  • Hallo zusammen,

    nachdem sich hier ja mit Darkavenger der Autor von HeadAC3He zu tummeln scheint, probier ich mal hier mein Glück.

    Ich habe in letzter Zeit von einigen Musik-DVDs die ac3-Tonspur gerippt, mit HeadAc3He in DDWAV verpackt und zuletzt die WAVs wieder flac komprimiert.
    Das Ergebnis spielt einwandfrei auf meinem Heimplayer, dem Hermstedt Hifidelio.
    Leider sind die .flac-Dateien ca. 50% größer als die .ac3-Dateien.
    Die Konvertierung von .ac3 nach WAV scheint ja sehr simpel zu sein, allerdings habe ich noch keine Beschreibung und noch keinen Sourcecode gefunden, wo ersichtlich wird, wie das genau geht.
    Mit dieser Info nämlich könnte man den (linux-basierten) Hifidelio sicher leicht aufrüsten, so dass er die ac3s beim spielen on-the-fly in wavs wandelt, die dann letztlich über den digitalen Ausgang abgespielt werden. Das würde nicht nur viel Platz sparen, sondern auch die ganze Konvertiererei und flac-Komprimiererei würde entfallen.

    Kann hier jemand weiterhelfen?

  • Warum willste die ac3 Datei den nach wavs zum Playback umwandeln?
    Das letze mal, als ich unter Linux ac3 über den SPDIF an meine Anlage gegeben habe wurde einfach das ac3 Signal weitergeleitet und vom Decoder der Anlage gehandelt,...

    Dark Avenger kriegste wahrscheinlich am flottesten in seinem eigenen Forum http://p090.ezboard.com/bdarkavengerssiteforum oder per Email erreicht. (Email-Addresse steht in der Email.txt die mit HeadAC3He kommt)

    Cu Selur

  • Zitat von Selur

    Warum willste die ac3 Datei den nach wavs zum Playback umwandeln?


    Schau dir meinen Abspieler mal an: https://localhost/www.hifidelio.net

    Zitat

    Das letze mal, als ich unter Linux ac3 über den SPDIF an meine Anlage gegeben habe wurde einfach das ac3 Signal weitergeleitet und vom Decoder der Anlage gehandelt,...


    Und dann hat dein Linux-System bzw. irgendein schlaues Programm genau das gemacht, was ich dem Hifidelio beibringen möchte. Einen reinen ac3-Datenstrom am SPDIF gibt es nämlich nicht, die Daten müssen da halt irgendwie richtig reingemappt werden.

    Danke für den Tipp mit dem Forum von DarkAvenger.

  • Wir haben den Spaß schon mal ausprobiert und zwischen BeSweet und HeadAC3he verglichen. Das Ergebnis: Nur HeadAC3he konnte AC3 ohne weitere Konvertierung halbwegs korrekt in WAV verpacken (was bei 48-kHz-AC3 in 44,1-kHz-WAV aber Schwierigkeiten bringt mit der Abspielgeschwindigkeit).

    BeSweet würde das Material konvertieren. Das wäre dann auch nützlich, um 44,1-kHz-AC3 ihherhalb der WAV-Hülle zu erzeugen, dann stimmt die Geschwindigkeit. Hier haben wir zumindest erreicht, dass AC3Enc dabei nicht immer 640 kbps erzeugt. Denn viele AC3-Decoder verstehen nur maximal 448 kbps.

  • Zitat von LigH

    Wir haben den Spaß schon mal ausprobiert und zwischen BeSweet und HeadAC3he verglichen. Das Ergebnis: Nur HeadAC3he konnte AC3 ohne weitere Konvertierung halbwegs korrekt in WAV verpacken (was bei 48-kHz-AC3 in 44,1-kHz-WAV aber Schwierigkeiten bringt mit der Abspielgeschwindigkeit).


    Vielleicht ist es in meinem Post oben nicht deutlich geworden:
    Das Verpacken von 48kHz-AC3s mit HeadACHe in 44.1kHz-WAVs funktioniert hier einwandfrei. Es gibt auch keine Probleme mit der Abspielgeschwindigkeit. Die DDWAVs bzw. FLACs abspielen tut ein Hifidelio, decodieren ein Yamaha 5.1 Receiver.

    Zitat

    BeSweet würde das Material konvertieren.


    Und damit wäre die Echtzeitverarbeitung auf dem Hifidelio mit seinem 300MHz PowerPC nicht machbar.

  • Zitat von DarkAvenger

    Möchtest du in Echtzeit einfach AC3 in AC3-WAV verpacken?


    Ganz genau!

    Zitat

    Ich versteh nicht so ganz, was nun dein Problem ist. :)


    Na, Du hast es doch verstanden ;)

    Zitat

    Kannst du deinen player programmieren?


    Der Player ist ein fast ganz normales Linux-System (PowerPC 405, Cross-Toolchain und genügend C/C++-Kenntnisse vorhanden) mit alsa, digitale Soundausgabe über S/PDIF auf /dev/dsp16.

  • Ach OK, dann bau ein 48Khz WAV, füge vor jedem ac3 frame
    {0x72,0xF8,0x1F,0x4E,0x01,0x00,0x00,0x38} ein und fülle 2 * 1536 * 2 - 8 bytes mit 00en auf. Das müßte funktionieren. Die 8 Werte habe ich durch reverse engineering erhalten, wirklich verstanden hatte ich die nicht ganz.

    Allerdings muß das Verpacken nciht mit jedem receiver funkt. Deiner tut es wohl, weil der dem vermeintlichen PCM nicht ganz traut. ;)

  • Vielen Dank! Wenn ich gewusst hätte, dass es so einfach ist, dann hätte ich mal einen Hex-Editor zur Hand genommen...

    Hier: http://forum.gleitz.info/showthread.php?t=26858 schreibst Du, dass ein ac3-Frame immer 1536 Samples/Kanal lang sei. Das kann irgendwie nicht ganz stimmen. Mein Test-ac3 hier hat 1792 Bytes/Frame, ist also bei 448kbps genau 32ms lang. Wo finde ich denn die Spezifikation des ac3-Headers, um rauszukriegen, welche Bitrate/Framegröße so ein ac3 denn hat?

    Die Byteorder im WAV ist durchgängig vertauscht (passt ja auch irgendwie zu dem anderen Thread :) ).

    Und HeadAc3He hat da ein 44.1kHz WAV daraus gemacht! Misstrauisch geworden, habe ich die eine der bisher (zum Glück erst 2) gerippten DVDs nochmal angehört - oh wie peinlich - das ganze wird tatsächlich zu langsam und zu tief abgespielt - und ich habe bisher immer behauptet, das ginge einwandfrei :hm:

    Leider habe ich auch noch keinen Weg gefunden, 48kHz WAVs auf dem Hifidelio bitgenau über den SPDIF wieder auszugeben, das geht vorerst also leider nicht.
    Ich werde jetzt nochmal testen was passiert, wenn man nicht auf 1536 Samples auffüllt, sondern nur auf 1411,2 - naja, werd' wohl auf 1412 runden :-))

  • Zitat von feelfree


    Hier: http://forum.gleitz.info/showthread.php?t=26858 schreibst Du, dass ein ac3-Frame immer 1536 Samples/Kanal lang sei. Das kann irgendwie nicht ganz stimmen. Mein Test-ac3 hier hat 1792 Bytes/Frame, ist also bei 448kbps genau 32ms lang. Wo finde ich denn die Spezifikation des ac3-Headers, um rauszukriegen, welche Bitrate/Framegröße so ein ac3 denn hat?

    Rechne doch einfach mal 48000/1536....und das hat nichts mit der bitrate zu tun. bytes/frame (komprimiert) interessieren auch nicht. Ich rede von unkomprimierten samples.

    Sie specs findest du unter atsc.org als a/52.


    Zitat


    Und HeadAc3He hat da ein 44.1kHz WAV daraus gemacht! Misstrauisch

    Du kannst ja versuchen den header auf 48kHz zu patchen (nicht resamplen!). Sinnd er 44,1kHz sind, damit man das auf CD machen kann.

    Zitat


    Leider habe ich auch noch keinen Weg gefunden, 48kHz WAVs auf dem Hifidelio bitgenau über den SPDIF wieder auszugeben, das geht vorerst also leider nicht.

    Das ist aber blöd. Kann er keine 48kHz ausgeben?

    Zitat


    Ich werde jetzt nochmal testen was passiert, wenn man nicht auf 1536 Samples auffüllt, sondern nur auf 1411,2 - naja, werd' wohl auf 1412 runden :-))

    Wird in die Hose gehen, auf die Idee war ich auch schon gekommen.

  • Zitat von DarkAvenger

    Sie specs findest du unter atsc.org als a/52.


    Klasse, vielen Dank!

    Zitat

    Du kannst ja versuchen den header auf 48kHz zu patchen (nicht resamplen!)


    Ja, hab ich gemacht.

    Zitat

    Das ist aber blöd. Kann er keine 48kHz ausgeben?


    Der S/PIF ist immer auf 44.1kHz eingestellt, man kann ihn aber umschalten. Beim abspielen von obigem gepatchtem 48kHz WAV war dann aber Totenstille.

    Zitat

    Wird in die Hose gehen, auf die Idee war ich auch schon gekommen.


    Ok, dann kann ich mir das ja sparen... Obwohl, vielleicht verhält sich ja mein Decoder etwas anders - die Hoffnung stirbt zuletzt :)

  • Evtl ist beim patchen etwas schief gegangen? Hz alleine reicht evlt nicht, da sind ja noch andere Werte drin. Evtl kannst du auch probieren den output von HAC3 unter cooledit zu öffnen und einfach samplig rate (nicht resamplen) umstellen und speichern als wave.

  • Nein, ich denke nicht, dass ich da was falsch gemacht hab. Alle Programme, auch der Hifidelio zeigen 48000kHz, 1536kByte/s und die richtige Spielzeit an.
    Das Problem liegt wahrscheinlich eher am Player.

    Zur Info: Das Auffüllen des WAVs mit weniger Bytes habe ich doch noch ausprobiert - wie Du mir prophezeit hast ohne Erfolg. Die Musik spielt zwar, aber Tonhöhe & Geschwindigkeit sind trotzdem falsch und zusätzlich fehlen immer ein paar Samples.

  • Weißt du zufällig, welcher soundchip im Gerät verbaut ist? Evtl läßt sich dann rausfinden, ob das Teil auf 48kHz bitgenau verstellbar ist. Ein Chip von creative ist es jedenfalls nicht. (Denn die könnten nicht 44,1kHz bitgenau ;))

  • Zitat von DarkAvenger

    Weißt du zufällig, welcher soundchip im Gerät verbaut ist? Evtl läßt sich dann rausfinden, ob das Teil auf 48kHz bitgenau verstellbar ist. Ein Chip von creative ist es jedenfalls nicht. (Denn die könnten nicht 44,1kHz bitgenau ;))


    Ja, der S/PDIF lässt sich schon auf 48kHz umstellen. Das bitgenaue abspielen von 48kHz-WAVs hat aber trotzdem nicht geklappt - keine Ahnung warum, hab' mich dann auch nicht mehr weiter drum gekümmert. Meiner Meinung nach ist es ein Bug im Hifidelio, dass Songs mit 48kHz Samplerate am S/PDIF auf 44.1kHz resampelt werden, nur wollte sich da bisher keiner drum kümmern.
    Ach ja: Verbaut ist ein stinknormaler AC97-Codec AD1981B, wie er praktisch auf jedem zweiten PC-Motherboard im Einsatz ist...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!