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:
...Abspielen funktioniert, decoden nicht...
...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,
... 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