Koder LAME przechowuje sumę kontrolną CRC16 strumienia audio w nagłówku każdego kodowanego pliku MP3. „Rzeczywista” suma kontrolna audio może być następnie obliczona i porównana z pierwotną wartością w późniejszym terminie, aby sprawdzić, czy dźwięk został uszkodzony (bez konieczności martwienia się o znaczniki ID3 i podobne zmiany wartości obliczonej).
W systemie Windows istniało narzędzie wiersza polecenia o nazwie LameTag, które było w stanie obliczyć sumę kontrolną i porównać ją z oryginałem. Niestety, jest porzucony i prawdopodobnie nie jest łatwo przenośny na OS X, co oczywiście jest tym, czego używam. Myślę, że EncSpot jest w stanie zrobić to samo, ale znowu jest tylko Windows.
Moje pytanie brzmi: czy istnieją takie narzędzia, które są kompatybilne z komputerami Mac, Linux, BSD lub podobnymi?
Znalazłem kilka, które mogą pokazać oryginalny CRC (jak eyeD3
), ale nie mogą obliczyć bieżącego. Istnieje również kilka narzędzi, które twierdzą, że sprawdzają korupcję w plikach MP3, ale nie znalazłem żadnych, które rzeczywiście używają ramki MusicCRC - większość z nich wydaje się używać bardziej ogólnej metody sprawdzania, lub używają CRC ramek (które są domyślnie wyłączone w LAME i nie można na nich polegać).
edytować:
Myślę, że odpowiedziałem na moje pytanie. Próbując to zbadać, natknąłem się skrypt Pythona dla mutagen , Biblioteka metadanych audio QuodLibet. Skrypt został zaprojektowany do odczytu tagu informacyjnego LAME i chociaż nie dotyczy konkretnie żadnego z pól CRC, udało mi się stworzyć coś, co opiera się na jego przykładzie. Po kilku godzinach bałaganu z rzeczami (jestem okropnym programistą i nie wiem absolutnie nic o Pythonie) udało mi się w końcu napisać coś, co, mimo że jest wolne i wolne, zwraca oryginalne CRC i oblicz nowe:
# Known good track
kapche-lanka:test % ../mp3crc.py "10 - CLAW FINGER.mp3"
10 - CLAW FINGER.mp3:
Original MusicCRC: 8171
Computed MusicCRC: 8171
Original Info Tag CRC: AEFD
Computed Info Tag CRC: AEFD
# Known bad track
kapche-lanka:test % ../mp3crc.py "10 - Griffons Never Die.mp3"
10 - Griffons Never Die.mp3:
Original MusicCRC: 2014
Computed MusicCRC: BCF1
Original Info Tag CRC: DF02
Computed Info Tag CRC: DF02
Zaktualizuję ten post jeszcze raz, aby dodać link do skryptu, gdy tylko zacznę działać w bardziej poważny sposób.
Dzięki!
edytuj2:
Dodałem link do mojego skryptu poniżej (zobacz zaakceptowaną odpowiedź). To jest nazwane mp3crc
i choć nie jest fachowo zaprojektowany, wydaje się, że działa w większości:
$APPTYPE
deklaracja, a TnTClasses jest częścią Sterowanie Unicode TNT .Odpowiedzi:
Oto funkcja powłoki Bash o nazwie
lameCRC()
który oblicza LCR musicCRC i CRC-16 ramki nagłówka Xing / Info-LAME (zgodnie z określeniem przez Mp3 Info Tag rev 1 specyfikacje - wersja robocza 0 ) za pomocą Apple'aafinfo
polecenie icrc
narzędzie linii poleceń Hampa Hug, http://www.hampa.ch/misc-utils/index.html .Jeśli Apple
afinfo
polecenie jest niedostępne,dd
zostanie użyty (co jednak doprowadzi do zwiększenia prędkości).(Uwaga: celowo unikałem wewnętrznych funkcji Basha, aby ułatwić przenoszenie).
źródło
Wygląda na to, że jest port C LameTag_Source_0.4.1 / CRC16.pas nazywa mp3_check-1.98 / crctest.c (które jest narzędziem wiersza poleceń).
Oto zhakowana wersja
mp3_check-1.98/crctest.c
który obliczy sumę kontrolną CRC16 danego pliku mp3.źródło
Odpowiem na moje pytanie tutaj:
Próbując to zbadać, natknąłem się skrypt Pythona dla
mutagen
, Biblioteka metadanych audio QuodLibet. Skrypt został zaprojektowany do odczytu tagu informacyjnego LAME i chociaż nie dotyczy konkretnie żadnego z pól CRC, udało mi się stworzyć coś, co opiera się na jego przykładzie. Po kilku godzinach błądzenia (jestem okropnym programistą i nie wiem absolutnie nic o Pythonie) w końcu udało mi się napisać coś, co, mimo że jest wolne i wolne, zwraca oryginalne CRC i oblicza nowe. To wciąż trochę buggy, ale w mojej własnej bibliotece okazało się, że jest co najmniej w 90% dokładne, więc chyba „wypuszczę” to. To jest nazwanemp3crc
i jest dostępny na GitHub:https://github.com/ohkine/mp3crc
Skrypt powinien działać w systemach UNIX i Windows, chociaż obecnie istnieje problem z Unicode tylko dla systemu Windows, który wymaga naprawy. Wymaga to również
crcmod
imutagen
do zainstalowania (włączam je do repozytorium, ale możesz je zainstalować).Jak już wspomniałem, nie jestem zbyt dobrym programistą, więc z góry przepraszam za to, jak prawdopodobnie krępujący jest kod. Ale to działa głównie :)
źródło