AUDIO CRC (проверка CRC аудиоданных)

Страницы:  1
Ответить
 

FoxSD

VIP (Заслуженный)

Стаж: 16 лет 7 месяцев

Сообщений: 7543

FoxSD · 20-Фев-15 11:33 (9 лет 9 месяцев назад, ред. 06-Янв-17 19:53)

AUDIO CRC
      Часто бывает необходимо сравнить два аудиофайла, чтобы убедиться в их идентичности. Например, в случае сомнений в правильности конвертации из одного формата в другой или когда нет уверенности, что имеющийся файл соответствует полученному при создании рипа. Для подобной проверки можно сравнить CRC файлов.
CRC или Циклический избыточный код (Cyclic redundancy check) — алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных.
Для аудиофайлов задача нахождения и сравнения CRC усложняется тем, что файлы могут отличаться тегами, и вообще быть в разных форматах. Поэтому во многих случаях не имеет смысла сравнивать CRC самих файлов, а нужно рассматривать только аудиоданные. В этой связи, оказываются бесполезными многие программы, считающие хэш-суммы.
Именно контрольная сумма аудиоданных (CRC) присутствует в отчётах программы Exact Audio Copy (EAC). В зависимости от типа рипа она вычисляется или для всего образа или для каждого трека в отдельности. Расчёт CRC, в зависимости от настроек программы, может быть выполнен двумя способами:
1) при подсчёте учитываются все семплы аудиоданных;
2) нулевые семплы аудиоданных при подсчёте игнорируются.
Информация о применявшемся способе вычислений также содержится в отчёте EAC: CUE Corrector позволяет вычислять CRC аудиоданных, как для отдельных файлов так и для всех файлов рипа. При этом CRC рассчитываются для всего рипа и для каждого трека отдельно согласно имеющейся в отчёте EAC разметке – TOC-блоку. Для многих распространенных форматов даже не требуется предварительная конвертация в wav т.к. CUE Corrector необходимые преобразования делает самостоятельно без создания временных файлов на диске.
Для расчёта CRC одного аудиофайла укажите в проводнике нужный файл и в контекстном меню выберите пункт Вычислить EAC CRC. Результаты вычислений будут показаны в новом окне: В отчёте присутствует следующая информация:
1) Номер версии и сборки CUE Corrector, создавшего отчет;
2) Технические данные проверенного файла: название, время звучания, формат, частота дискретизации, количество каналов и разрядность семплирования;
3) Сведения об аудио из тегов файла: автор и название альбома, номер, название и исполнитель трека.
4) CRC, рассчитанные с учетом и без нулевых семплов аудиоданных;
5) CRC из лога EAC для проверенного аудиофайла. Выводится в случае, если в папке с проверяемым аудиофайлом находится файл лога EAC.
6) Время, затраченное на вычисления.
Для вычислений CRC всех аудиофайлов рипа с разделением результатов по трекам следует воспользоваться командой Проверить по базе AccurateRip. Данная команда доступна в проводнике для файлов отчётов EAC, в том числе и встроенных в аудиофайлы. Для вычислений также потребуются cue файл и указанные в нём аудиофайлы. Результат проверки выводится в новом окне, а также может быть сохранён в виде файла отчёта: Отчёт содержит основную информацию о проверке:
1) Номер версии и сборки CUE Corrector, создавшего отчет.
2) Имя исполнителя и название альбома. Информация берется из отчёта EAC.
3) Информация о запросе в базу AcurateRip: идентификационный номер диска и название файла с информацией о нём в базе, а также его наличии в ней.
4) Информация о диске в базе AccurateRip версий 1 и 2.
5) Информация о наличии в базе AccurateRip v1 других штамповок диска. Выводится если указано в настройках Проверять другие смещения (AR v 1).
6) Информация о проверенных аудиоданных, сверка контрольных сумм с отчётом EAC.
7) CRC, рассчитанные по алгоритму AccurateRip для баз версий 1 и 2. Выводится если указано в настройках Добавлять AccurateRip CRC в отчёт.
8) Длительность проверки и дата создания отчёта.
9) Контрольная сумма отчёта.
CRC аудиоданных показаны в 6 блоке отчёта в виде таблицы:
Track – номер трека;
Peak - Peak Level, т.е. максимальная громкость трека;
CRC32 - контрольная сумма с учётом нулевых семплов;
W/O NULL - контрольная сумма без учёта нулевых семплов;
LOG - контрольные суммы из отчёта EAC. В случае их совпадения с CRC проверяемых аудиофайлов выводится способ расчёта (с учетом или без нулевых семплов).
Первая строка в таблице относится ко всему диску, последующие – к отдельным трекам.
В зависимости от типа рипа таблица будет иметь следующий вид:
Для рипа образом (Image+CUE) В столбце LOG информация только о CRC всего диска.
Для потрекового рипа (Tracks+CUE) В столбце LOG отсутствует информация о CRC всего диска, но есть сведения для каждого трека. При этом можно заметить, что для трека 3 CRC аудиофайла не совпадает с CRC, указанным в отчёте EAC, а для трека 5 вообще отсутствует, что может означать или отсутствие CRC в отчёте EAC или расхождения в нём test&copy CRC.
Так как основное назначение данной функции проверка по базе AccurateRip, вычисления CRC по умолчанию производятся только в случае, если информация о диске (рипе) есть в базе AccurateRip. При отсутствии диска в базе или невозможностью с ней связаться отчёт имеет упрощенный вид: Для вывода полного отчёта в настройках необходимо отметить пункт Вычислять CRC даже если диска нет в базе
[Профиль]  [ЛС] 

FoxSD

VIP (Заслуженный)

Стаж: 16 лет 7 месяцев

Сообщений: 7543

FoxSD · 17-Апр-15 16:17 (спустя 1 месяц 25 дней, ред. 06-Янв-17 19:53)

Практическое применениеВозмем рип образом и вычислим CRC с помощью команды Проверить по базе AccurateRip: Обратим особое внимание на трек № 5.
Теперь разрежим образ на треки и подсчитаем CRC для отдельного файла (5 трека) с помощью команды Вычислить EAC CRC: как ни странно, но в обоих случаях CRC совпадают, что говорит о том, что разрезали образ правильно. Но будут ли они звучать одинаково? Не спешите с ответом
CUE Corrector - редактирование CUE, проверка качества lossless, работа с базой accurateRip и многое другое.
[Профиль]  [ЛС] 

KorDen32

Хранитель

Стаж: 15 лет 3 месяца

Сообщений: 2862

KorDen32 · 01-Янв-22 12:26 (спустя 6 лет 8 месяцев, ред. 05-Фев-22 16:09)

Проверка CRC по логу EAC под LinuxРаботает как для образов, так и для потрековых рипов при "Null samples used in CRC calculations: Yes"
Выдаем нужный поток посредством sox или ffmpeg, считаем посредством rhash:
sox file.flac -t raw - | rhash --printf='%C\n' -C -
или
ffmpeg -nostats -loglevel 0 -i file.flac -acodec pcm_s16le -f s16le pipe:1 | rhash --printf='%C\n' -C -
Посчитаем массово CRC:
Код:
for file in *.flac
do
crc=$(sox "$file" -t raw - | rhash --printf='%C\n' -C -)
echo "${crc^^} $file"
done
Пример вывода:
Код:
41101723 01 - Daftendirekt.flac
6CCAD2B7 02 - Wdpk 83.7 fm.flac
31B2001D 03 - Revolution 909.flac
782CE73F 04 - Da Funk.flac
8E10100C 05 - Phoenix.flac
5D51776B 06 - Fresh.flac
B55A1585 07 - Around The World.flac
1F7F7E1A 08 - Rollin' & Scratchin'.flac
C508511C 09 - Teachers.flac
E19D87D2 10 - High Fidelity.flac
13346326 11 - Rock'n Roll.flac
4EBB97CF 12 - Oh Yeah.flac
74014ACC 13 - Burnin'.flac
4BBA85F2 14 - Indo Silver Club.flac
B6194633 15 - Alive.flac
E5CACBA3 16 - Funk Ad.flac
Прочитаем в таком же виде лог EAC (предполагается что лог EAC на английском):
Код:
cat *.log | grep -E "Filename|Copy CRC" | sed -E 'N;s/.+Filename.+\\(.+)\r\n.+Copy CRC (.+)\r/\2 \1/'
Если лог в UTF-16, то
Код:
iconv -f utf-16 -t utf-8 *.log | grep -E "Filename|Copy CRC" | sed -E 'N;s/.+Filename.+\\(.+)\r\n.+Copy CRC (.+)\r/\2 \1/'
[Профиль]  [ЛС] 

заинька457

Стаж: 3 года 5 месяцев

Сообщений: 131


заинька457 · 18-Янв-22 09:56 (спустя 16 дней, ред. 18-Янв-22 09:56)

KorDen32 писал(а):
82531677В Ubuntu есть готовый скрипт /usr/bin/crc32, но принимает он только файл, поэтому:
crc32 <(sox "file.flac" -t raw -)
Есть ещё rhash.
Код:
$ sox 01.flac -t raw - | rhash --printf='%C\n' -C -
332514A4
И можно использовать flac вместо sox но будет больше букв, просто только из-за CRC32 не всегда рационально устанавливать sox.
Код:
$ flac -d 01.flac --silent --force-raw-format --endian=little --sign=signed -c | rhash --printf='%C\n' -C -
332514A4
[Профиль]  [ЛС] 

KorDen32

Хранитель

Стаж: 15 лет 3 месяца

Сообщений: 2862

KorDen32 · 18-Янв-22 10:48 (спустя 52 мин.)

заинька457 писал(а):
82615808Есть ещё rhash
Спасибо за наводку, так более универсально, перепишу чуть позже.
заинька457 писал(а):
82615808И можно использовать flac вместо sox но будет больше букв, просто только из-за CRC32 не всегда рационально устанавливать sox.
Рипы бывают не только во flac, но и в wv/ape, да и просто .wav может быть на диске по какой-то причине. Я брал более-менее универсальный плеер. Хотя, sox не поддерживает ape...
[Профиль]  [ЛС] 

заинька457

Стаж: 3 года 5 месяцев

Сообщений: 131


заинька457 · 18-Янв-22 11:42 (спустя 53 мин., ред. 18-Янв-22 11:42)

KorDen32 писал(а):
82616026Рипы бывают не только во flac, но и в wv/ape, да и просто .wav может быть на диске по какой-то причине. Я брал более-менее универсальный плеер. Хотя, sox не поддерживает ape...
Тогда ffmpeg.., у него есть декодеры на все случаи жизни.
Код:
$ ffmpeg -nostats -loglevel 0 -i 01.flac -acodec pcm_s16le -f s16le pipe:1 | rhash --printf='%C\n' -C -
332514A4
Здесь следует обратить внимание, что для CDDA PCM-ка будет именно s16le.., в ином случае нужно будет уточнить формат.
[Профиль]  [ЛС] 

KorDen32

Хранитель

Стаж: 15 лет 3 месяца

Сообщений: 2862

KorDen32 · 18-Янв-22 18:59 (спустя 7 часов)

заинька457 писал(а):
82616214Тогда ffmpeg.., у него есть декодеры на все случаи жизни.
ffmpeg изначально не рассматривал, потому что на голой оси он требует что-то уровня "...156 newly installed ... 91.1 MB of archives... 689 MB of additional disk space...", с sox не сравнить
Но видимо для ape малой кровью не обойтись.
[Профиль]  [ЛС] 

заинька457

Стаж: 3 года 5 месяцев

Сообщений: 131


заинька457 · 19-Янв-22 08:27 (спустя 13 часов, ред. 19-Янв-22 08:27)

По моим данным, распакованный ffmpeg на диске занимает чуть больше 2MiB... И с ним вы можете позволить себе по истине всё, что угодно - must have.
установка ffmpeg из deb-multimedia на Debian sid
Код:
$ sudo apt install ffmpeg
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
  nvidia-libvdpau1 ffmpeg-doc
Следующие НОВЫЕ пакеты будут установлены:
  ffmpeg
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 1 722 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 2 293 kB.
Пол:1 https://www.deb-multimedia.org sid/main amd64 ffmpeg amd64 10:4.4.1-dmo4 [1 722 kB]
Получено 1 722 kB за 1с (1 473 kB/s)
Выбор ранее не выбранного пакета ffmpeg.
(Чтение базы данных … на данный момент установлен 202301 файл и каталог.)
Подготовка к распаковке …/ffmpeg_10%3a4.4.1-dmo4_amd64.deb …
Распаковывается ffmpeg (10:4.4.1-dmo4) …
Настраивается пакет ffmpeg (10:4.4.1-dmo4) …
Обрабатываются триггеры для man-db (2.9.4-4) …
[Профиль]  [ЛС] 

KorDen32

Хранитель

Стаж: 15 лет 3 месяца

Сообщений: 2862

KorDen32 · 05-Фев-22 16:01 (спустя 17 дней)

заинька457
Это если у вас уже напичканый всем чем только можно десктопный дистрибутив. А на minimal/server без иксов это выглядит как-то так:
скрытый текст
Код:
$ sudo apt install ffmpeg
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  fontconfig i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libasyncns0 libavc1394-0 libavcodec58
  libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0 libcaca0
  libcairo-gobject2 libcairo2 libcdio-cdda2 libcdio-paranoia2 libcdio19 libchromaprint1 libcodec2-0.9 libdatrie1
  libdav1d4 libdc1394-25 libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2
  libfftw3-double3 libflite1 libfribidi0 libgbm1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common
  libgfortran5 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgme0 libgraphite2-3
  libharfbuzz0b libiec61883-0 libigdgmm11 libjack-jackd2-0 liblapack3 liblilv-0-0 libllvm11 libmfx1 libmp3lame0
  libmpg123-0 libmysofa1 libnorm1 libnuma1 libopenal-data libopenal1 libopenmpt0 libpango-1.0-0 libpangocairo-1.0-0
  libpangoft2-1.0-0 libpciaccess0 libpgm-5.3-0 libpixman-1-0 libpocketsphinx3 libpostproc55 libpulse0 libquadmath0
  librabbitmq4 libraw1394-11 librsvg2-2 librsvg2-common librubberband2 libsamplerate0 libsdl2-2.0-0 libsensors-config
  libsensors5 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0 libsodium23 libsord-0-0 libsoxr0 libspeex1 libsphinxbase3
  libsratom-0-0 libsrt1.4-gnutls libssh-gcrypt-4 libswresample3 libswscale5 libthai-data libthai0 libtheora0
  libtwolame0 libudfread0 libusb-1.0-0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvidstab1.1 libvpx6
  libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libwebpmux3 libwrap0 libx11-xcb1
  libx264-160 libx265-192 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0
  libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1
  libxkbcommon0 libxrandr2 libxrender1 libxshmfence1 libxss1 libxv1 libxvidcore4 libxxf86vm1 libz3-4 libzmq5
  libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers ocl-icd-libopencl1 pocketsphinx-en-us
  va-driver-all vdpau-driver-all x11-common xkb-data
Suggested packages:
  ffmpeg-doc i965-va-driver-shaders libbluray-bdj libfftw3-bin libfftw3-dev jackd2 libportaudio2 pciutils pulseaudio
  libraw1394-doc librsvg2-bin xdg-utils lm-sensors serdi sndiod sordi speex opencl-icd nvidia-vdpau-driver
  nvidia-tesla-440-vdpau-driver nvidia-tesla-418-vdpau-driver nvidia-legacy-390xx-vdpau-driver
  nvidia-legacy-340xx-vdpau-driver
The following NEW packages will be installed:
  ffmpeg fontconfig i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libasyncns0 libavc1394-0
  libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0
  libcaca0 libcairo-gobject2 libcairo2 libcdio-cdda2 libcdio-paranoia2 libcdio19 libchromaprint1 libcodec2-0.9
  libdatrie1 libdav1d4 libdc1394-25 libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2
  libfftw3-double3 libflite1 libfribidi0 libgbm1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common
  libgfortran5 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgme0 libgraphite2-3
  libharfbuzz0b libiec61883-0 libigdgmm11 libjack-jackd2-0 liblapack3 liblilv-0-0 libllvm11 libmfx1 libmp3lame0
  libmpg123-0 libmysofa1 libnorm1 libnuma1 libopenal-data libopenal1 libopenmpt0 libpango-1.0-0 libpangocairo-1.0-0
  libpangoft2-1.0-0 libpciaccess0 libpgm-5.3-0 libpixman-1-0 libpocketsphinx3 libpostproc55 libpulse0 libquadmath0
  librabbitmq4 libraw1394-11 librsvg2-2 librsvg2-common librubberband2 libsamplerate0 libsdl2-2.0-0 libsensors-config
  libsensors5 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0 libsodium23 libsord-0-0 libsoxr0 libspeex1 libsphinxbase3
  libsratom-0-0 libsrt1.4-gnutls libssh-gcrypt-4 libswresample3 libswscale5 libthai-data libthai0 libtheora0
  libtwolame0 libudfread0 libusb-1.0-0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvidstab1.1 libvpx6
  libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libwebpmux3 libwrap0 libx11-xcb1
  libx264-160 libx265-192 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0
  libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1
  libxkbcommon0 libxrandr2 libxrender1 libxshmfence1 libxss1 libxv1 libxvidcore4 libxxf86vm1 libz3-4 libzmq5
  libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers ocl-icd-libopencl1 pocketsphinx-en-us
  va-driver-all vdpau-driver-all x11-common xkb-data
0 upgraded, 159 newly installed, 0 to remove and 0 not upgraded.
Need to get 132 MB of archives.
After this operation, 423 MB of additional disk space will be used.
[Профиль]  [ЛС] 

заинька457

Стаж: 3 года 5 месяцев

Сообщений: 131


заинька457 · 05-Фев-22 19:10 (спустя 3 часа)

KorDen32
OK. Вы правы, (:D) в моём выхлопе только ffmpeg без зависимостей, а в зависимостях у него тяжелые либы, всё-таки это аудио-видео фреймворк.
Декодер Monkey's Audio есть ещё в mplayer и mpv, но они по моим сведениям не умеют отдавать поток в stdout, только в файл - PCM WAV - ничто не мешает посчитать hash на полученном файле.
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error