Различные форматы CD немного задействованы, и официальные спецификации ("красная книга" для аудио CD, "желтая книга" для CD с данными) не находятся в свободном доступе. Но вы можете найти некоторые детали в доступных стандартах, таких как Ecma-130.
Оригинальный аудио CD (также называемый CD-DA) был смоделирован на виниловой пластинке, что означает, что он также использует спиральную дорожку непрерывных аудиоданных (на DVD позже использовались круглые дорожки). В этих аудиоданных очень сложным образом чередуются 8 подканалов (от P до W), из которых подканал Q содержит информацию о синхронизации (буквально в минутах / секундах / долях секунд) и номер текущей дорожки. Для первоначальной цели этого было достаточно: для непрерывной игры, объектив был слегка отрегулирован, чтобы следовать дорожке. Для поиска линза будет перемещаться при декодировании подканала Q, пока не будет найдена правильная дорожка. Такое позиционирование немного грубовато, но вполне адекватно для прослушивания музыки.
Тем не менее, сегодня многие компьютерные CD-дисководы не могут точно позиционировать объектив и синхронизировать схему декодирования, так что считывание аудиосэмплов начинается с точного положения. Вот почему многие программы копирования CD имеют режим "паранойя", где они выполняют перекрывающиеся чтения и сравнивают результаты, чтобы приспособиться к этому "джиттеру". Как часть аудиопотока, субканал также подвержен джиттеру, и поэтому вы получаете разные файлы субканалов, когда вы копируете на дисковод компакт-дисков, который не может точно позиционироваться.
Когда была разработана спецификация CD с данными (CD-ROM) для расширения спецификации CD-DA, была признана важность точного адресации и чтения данных, поэтому аудиофрейм размером 2352 байта был разделен на 12 байтов синхронизации и 4 байта заголовка (для адрес сектора), оставляя 2336 байтов для данных и дополнительный уровень исправления ошибок. Используя эту схему, сектора могут быть адресованы точно без необходимости полагаться только на информацию Q-канала. Поэтому эффект джиттера не применяется, вы всегда получаете одни и те же данные, когда вы записываете на CD-ROM, и никакой дополнительной хитрости в создании дампа не требуется.
Изменить с более подробной информацией:
Согласно Ecma-130, данные скремблируются поэтапно: 24 байта составляют кадр F1, байты 106 из этих кадров распределяются по 106 кадрам F2, которые получают 8 дополнительных байтов исправления ошибок. Каждый из этих кадров, в свою очередь, получает дополнительный байт ("управляющий байт"), чтобы превратить их в F3-кадры. Дополнительный байт содержит информацию о подканале (один подканал для каждой позиции бита). Группа из 98 F3-кадров называется секцией, а 98 связанных байтов управления содержат два байта синхронизации и 96 байтов реальных данных подканала. Подканал Q дополнительно имеет 16 битов коррекции ошибок CRC в этих 96 битах.
Идея заключается в том, чтобы распределять данные по поверхности диска таким образом, чтобы царапины, грязь и т.д. Не влияли на большое количество непрерывных битов, поэтому исправление ошибок может восстановить потерянные данные, если царапины не слишком большой.
Как следствие, аппаратное обеспечение привода компакт-дисков должно прочитать весь раздел после изменения положения объектива, чтобы выяснить, где он находится в потоке данных. Дескремблирование различных этапов выполняется аппаратным обеспечением, которое должно синхронизироваться с двумя байтами синхронизации в потоке управляющих байтов. Все модели дисководов компакт-дисков требуют различного количества времени для синхронизации по сравнению с другими моделями (это можно проверить, прочитав данные с двух разных дисков, если они у вас есть), в зависимости от того, как реализовано оборудование. Кроме того, многим моделям не всегда требуется одинаковое время для синхронизации, поэтому они могут начать немного раньше или позже и выводить дескремблированные данные не всегда в одном и том же байте.
Поэтому, когда программа копирования выполняет команду READ CD
(0xBE), она предоставляет длину передачи и начальный адрес (или, скорее, время Q-канала). Привод позиционирует объектив, расшифровывает кадры, извлекает Q-канал, сравнивает время и, когда он находит правильное время, начинает передавать. Эта передача не всегда начинается с одного и того же байта, как объяснено выше, поэтому результат нескольких команд READ CD
может быть смещен относительно друг друга. Вот почему вы видите разные файлы субканалов от вашего рипера.
В зависимости от аппаратного обеспечения и обстоятельств, когда объектив отрегулирован, более или менее случайно, если передача начинается на несколько сэмплов раньше или на несколько с опозданием. Таким образом, единственная закономерность, которую вы увидите в результатах, состоит в том, что сдвиги кратны длине передачи.
Некоторые модели приводов на самом деле имеют точное оборудование, которое всегда начинает передачу одновременно. Стандарт определяет бит на странице режима 0x2a («Возможности CD/DVD и страница механического состояния»), которая указывает, так ли это, но реальный опыт показывает, что некоторые приводы, претендующие на точность, на самом деле не соответствуют действительности. (В Linux вы можете использовать sg_modes
из sg3-utiles
для чтения страниц режима, я не знаю, какой инструмент использовать в Windows).