1 bearbeitet von rhinozeros (Original: 2009-01-18 14:06)

Thema: Fehlertoleranz

Moin, Moin,

in diesem Thread erwähnte Meiner Einer, daß er in einer Flac-Datei "irgendwo mitten im File ein einziges Bit (!) verändert" hat. Auf meine Frage, ob er probiert hätte, ob man mit der auf diese Weise gezielt verstümmelten Datei noch etwas anfangen (decodieren, abspielen) kann, gaben er und m07u eine Antwort, die ich so nicht erwartet hatte und die mich etwas beunruhigte:

m07u,05.01.2009, 22:30 schrieb:

...Abspielen funktioniert, decoden nicht...

Meiner Einer,05.01.2009, 23:53 schrieb:

...Somit wird die Datei nicht decodiert...

Einer der Vorteile von flac soll ja die Fehlertoleranz sein. Nachdem ich meine Musik zunächst als 160-er mp3 "archiviert" hatte, war ich hier bei Audiohq auf die verlustfreien Codecs aufmerksam geworden und hatte mich zunächst der guten Kompressionsrate wegen auf Monkeys Audio gestürzt, war aber dann wegen der Fehlertoleranz, von der hier aus berufenen Munde zu hören war,

Lego,29.01.2005, 18:04 schrieb:

... FLAC wird als das robustete Format gehandelt und läßt sich selbst bei kleinen Dateifehlern aufgrund seiner Streamingfähigkeit nahezu immer decodieren, jedenfalls mit einer höheren Wahrscheinlichkeit, als dies bei anderen Formaten der Fall ist...

auf das hier favorisierte Flac umgestiegen.

Und nun das! Da blieb nur noch eines: selber probieren.

Ich habe mir aus meinem Flac-Archiv eine Datei ausgesucht (Beatles, Misery, schön kurz, nur 1:46), diese decodiert und die daraus resultierende Wav-Datei in folgende Formate überführt: mp3 (lame, -v2), ape (extra high) und tak(-p2). Damit hatte ich 5 Dateien (Beatles-Misery.ape, Beatles-Misery.flac, Beatles-Misery.mp3, Beatles-Misery.tak und Beatles-Misery.wav). Diese Dateien öffnete ich mit dem Hex-Editor MX 6.0.2.244 und änderte dort irgendwo in der Mitte eines der mir sehr kryptisch vorkommenden Hexadezimalzeichen, z. B. wurde F4 geändert in FF. Ich nehme an, daß das dem entspricht, was Meiner Einer tat ("ein einziges Bit (!) verändert"). Die so geänderten Dateien speicherte ich unter dem Namen test.xyz ab. Anschließend unterzog ich die Dateien test.xyz folgenden Prozeduren: Abspielen mit Foobar, decodieren mit dem "Hausprogramm" und mit Foobar.

test.ape:
Beim Abspielen mit Foobar gibt es in der Mitte ein Pause von 6 Sekunden (!!), danach geht's dann bis zum Schluß weiter. Foobar gibt folgende Fehlermeldung aus:

INFO (CORE) : opening file for playback :
INFO (CORE) : location: "file://D:\test\test.ape" (0)
ERROR (foo_ape) : invalid checksum
ERROR (foo_ape) : invalid checksum

Beim Decodieren bricht Monkeys Audio mit folgender Fehlermeldung ab:

Error: Invalid Checksum

Eine Wav-Datei gibt Monkeys Audio nicht aus, auch wenn unter Options - General das Häkchen bei "Stop processing after encountering an error" entfernt wurde.

Beim Decodieren mit Foobar erscheint folgende Fehlermeldung:

NFO (CORE) : opening file for playback :
INFO (CORE) : location: "file://D:\test\test.ape" (0)
ERROR (foo_ape) : invalid checksum

Foobar erstellt aber aus test.ape wenigstens eine Wav-Datei, allerdings mit einem 6,2 Sekunden langen Loch in der Mitte, im Wav-Editor (WavePurity 4.80) nicht zu übersehen. Eine solche Wav-Datei ist meines Erachtens unbrauchbar.


test.flac
Beim Abspielen mit Foobar ist ein kleiner Aussetzer zu hören, der von Foobar mit folgender Meldung kommentiert wird:

INFO (CORE) : opening file for playback :
INFO (CORE) : location: "file://D:\test\test.flac" (0)
ERROR (foo_flac) : FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH

Flac.exe 1.2.1 unter der Haube von Flac-Frontend 1.7.1 decodiert test.flac, aber nur wenn im Frontend die Option "Dec. through errors" aktiviert ist (Häkchen setzen). Ohne das Häkchen wird keine Wav-Datei erstellt, die dazugehörige Fehlermeldung im DOS-Fenster lautet:

test.flac 45% completetest.flac: *** Got error code 2: FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH
test.flac: ERROR while decoding data
state = FLAC__STREAM_DECODER_READ_FRAME

Hat man das erwähnte Häkchen im Frontend gesetzt, wird eine Wav-Datei erstellt, der  Kommentar von flac.exe im DOS-Fenster dazu lautet:

test.flac: 45% completetest.flac: *** Got error code 2: FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH
test.flac: ERROR, MD5 signature mismatch

In der Wav-Datei ist der kleine Aussetzer ebenfalls unüberhörbar, im Wav-Editor beträgt der Aussetzer knapp 1/10 Sekunde. Damit kann man im Fall der Fälle leben.


test.mp3
Das habe ich mal so aus Neugier gemacht, mit Archivierung hat mp3 ja nichts zu tun. Sowohl Foobar als auch Winamp spielen die verstümmelte Testdatei problemlos ohne hörbaren Fehler ab. Foobar decodiert ebenso wie Easylame. Foobar macht es kommentarlos, Easylame hat etwas zu meckern:

Command: C:\Programme\EasyLAME\lame.exe --decode "D:\test\test.mp3" "D:\test\test.wav"
ID3v2 found. Be aware that the ID3 tag is currently lost when transcoding.
input:  D:\test\test.mp3  (44.1 kHz, 2 channels, MPEG-1 Layer III)
output: D:\test\test.wav  (16 bit, Microsoft WAVE)
skipping initial 1105 samples (encoder+decoder delay)
RazorLame encountered an unknown message from LAME while trying to decode "D:\test\test.mp3"!

Decoded 0 files in 0:00:05
There was an unexpected LAME message for one file, please check log for error messages.

Im Wav-Editor ist in der decodierten Datei kein Fehler zu erkennenen. Hätte ich so gar nicht erwartet! Ich habe den Versuch nochmal wiederholt: Gleiches Ergebnis.


test.tak
Das Ergebnis mit der Datei test.tak entspricht völlig dem bei test.flac: Abspielen mit Foobar funktioniert allerdings nicht, weil das Plugin streikt, mit Winamp und dem dazu notwendigen Plugin ist das Abspielen kein Problem, ebenso wie bei test.flac gibt es einen kleinen aber unüberhörbaren Aussetzer. Decodieren mit tak.exe geht problemlos, aber mit Fehlermeldung:

--- test.tak ---

Result
  Audio data damaged

Audio data
  Size in samples:     4706352
  Damaged samples:        5512
    Muted samples:        5512
    Cut   samples:           0
  Damaged blocks :           1

Damaged data blocks

No       Position    Size
       1     2276456        5512

       
Im Wav-Editor zeigt sich, daß die Länge des Aussetzers etwas über 1/10 Sekunde liegt. Auch damit könnte ich leben.


test.wav
Kein Aussetzer ist zu hören, im Wav-Editor ist kein Fehler zu sehen.

Fazit: Ich bin beruhigt, auch wenn die von mir gemachten Versuche nur einen Einzelfall erfassen, statistische Sicherheit = Null. Flac erfüllt ebenso wie tak meine Ansprüche an ein Archivformat, zu denen u. a. die Fehlertoleranz zählt. Mein Umstieg von ape auf flac war richtig.

Gruß
rhinozeros

Re: Fehlertoleranz

Nur halt der Vollständigkeit halber, wie das mit den Enzelbits zu verstehen ist. Bleiben wir am besten gleich bei dem Beispiel:

rhinozeros schrieb:

z. B. wurde F4 geändert in FF

F4 sieht im Binärformat so aus: 1111 0100
Davon ändere ich ein einziges Bit ab, also entweder eine 1 zu 0 oder eben eine 0 zu 1. Damit gäbe es also 8 Möglichkeiten:

0111 0100 - 74
1011 0100 - B4
1101 0100 - D4
1110 0100 - E4

1111 1100 - FC
1111 0000 - F0
1111 0110 - F6
1111 0101 - F5

Dagegen wäre FF: 1111 1111 also eine Änderung von 3 Bits.

OK, das spielt jetzt hierbei keinerlei Rolle. Ein Fehler jeglicher Art ergibt einen anderen CRC-Wert und somit die Kennzeichnung als fehlerhaft.


Auch ich habe mir nach diesem Test so meine Gedanken gemacht. OK, ich könnte im Falle eines solchen Fehlers - zumindest derzeit noch - von meiner CD-Sammlung die betreffende CD neu einlesen. Man muß aber damit rechnen, daß auch diese Originale irgendwann mal "unleserlich" werden. Darum werde ich mir eine zusätzliche USB-Platte besorgen, das komplette Archiv dort aufspielen und diese Platte dann sorgfältig lagern, so wie hier im Forum schon mal beschrieben wurde. Ich halte es dezeit für die einzig praktikabele Möglichkeit. Denn ich bin nicht bereit, ein Dropout von 92 Millisekunden zu akzeptieren.

3 bearbeitet von rhinozeros (Original: 2009-01-19 09:02)

Re: Fehlertoleranz

Moin, Moin,

ich kann es nicht leugnen: Ich gehöre zu den mindestens 95 % der Menschheit, die zwar behaupten, den Unterschied zwischen Byte und Bit zu kennen, aber...

In derartige Tiefen bin ich noch nie eingedrungen. Ich vermute, daß ich in meinem weiteren Leben nicht allzu oft auf solche Tauchgänge angewiesen sein werde. Für die von mir vorgenommenen Manipulationen mußte ich mir den Hex-Editor erstmal aus dem Internet herunterladen. Ob ich den nochmal brauche?

Was man bereit ist, zu akzeptieren oder nicht, ist sicher Geschmacksfrage. Wenn ich schreibe, daß ich mit einem Aussetzer von 1/10 Sekunde leben kann, heißt das immer: im Vergleich zu einem Totalverlust oder wie bei der Ape-Datei: Im Vergleich zu einem Aussetzer von 6 Sekunden.

Ansonsten sind wir uns sicher in folgendem einig: Das, was wir da ausprobiert haben, dürfte in der Praxis, wenn überhaupt, extrem selten auftreten. Ich habe meine ersten Schritte beim Aufbau eines Musikarchives gemacht, indem ich Ape-Dateien auf DVD gespeichert habe. Ich hatte 'ne ganze Menge DVDs zusammen bekommen, bis dann irgendwann einmal eine der DVDs partiell nicht mehr lesbar war. Spätestens dann weiß man, daß die Diskussion über ein geändertes Bit doch wohl eher rein akademischer Natur ist.

Trotzdem: Ich  kann wieder etwas besser schlafen.

Gruß
rhinozeros

Re: Fehlertoleranz

Ich denke auch, das solche Bitfehler sehr, sehr selten sind. Eher wird wohl eine CD/DVD unleserlich werden.

Aber ich habe mal eine Test auf MP3-Basis gemacht. Dazu habe ich einen kurzen Testton von 1 Sekunde Dauer generieren lassen. Daraus jeweils eine MP3 in Lame und Fraunhofer erstellt. Parameter und Test-Dateien kann man hier laden, falls jemand Interesse hat.

Interessant bei diesem Test ist auch die Ein- und Ausschwingzeit der MP3s. Das heißt, sie sind geringfügig länger als das Original. Nicht so toll für Gapless Playback...

Ich habe dann jeweils ein Bit verändert. Bei Fraunhofer gibt es sofort einen kleinen schwach hörbaren Fehler (Deshalb ja auch ein Testton, in Musik würde das vermutlich untergehen... ;)  ). Bei Lame konnte ich erst nach mehreren Versuchen einen Fehler provozieren. Ich vermute (ich weiß es aber nicht), daß in Lame möglicherweise einige Kontroll/Reparaturmechanismen vorhanden sind, die solche Fehler in gewissen Grenzen "reparieren" können. Zumindest wurden diese Dateien in meinem Bearbeitungsprogramm fehlerfrei geladen.
Aber... wenn es dann "knallt", dann richtig! Dann gibt es irgendwie auch eine Längenänderung des Titels. Darum habe ich bei Lame auch keine Differenzdatei erzeugt, da die dem Fehler nachfolgenden Samples nicht mehr korrekt übereinanderliegen würden.

http://www.speedyshare.com/151947689.html