Правда о смещениях

Смещения приводят в замешательство массу людей. В этой статье я попытаюсь разъяснить, что из себя представляют смещения, и что можно сделать для их коррекции.

Практически каждый привод CD-ROM не способен позиционировать считывающую головку точно на нужном секторе. Для дисков с данными это не составляет проблемы, так как каждый сектор содержит информацию, позволяющую легко найти нужный. В отличие от них, аудиодиски не содержат информации о расположении секторов. Другими словами, на аудиодиске очень трудно найти определенный сектор, а это означает, что приводы при чтении аудио имеют некое смещение. Для большинства современных устройств это смещение постоянно, так что, если вы его знаете, то можете легко скорректировать.

В качестве примера возьмем рекордер Plextor PlexWriter 8/20 (PX-W820T). Его смещение чтения равно -355, а смещение записи составляет -30 сэмплов. Негативное смещение означает, что привод начинает чтение/запись слишком рано, а положительное - что слишком поздно.

Рассмотрим это поподробнее, исходя из того, что идеальный рекордер имеет смещение записи, равное нулю сэмплов.

Write offset 0

Видно, что, как и ожидалось, идеальный рекордер записывает все 3 трека на CD без какого-либо смещения или отсутствующих сэмплов. Однако ни один из известных мне приводов не имеет нулевого смещения. Более реальна ситуация с PlexWriter, у которого смещение записи равно -30 сэмплов, и если мы захотим записать 3 трека из предыдущего примера на CD, то получим следующее:

Write offset -30

Что произошло? Программа записи отдает команду рекордеру начать запись с позиции 0 (адресуемая позиция), но из-за смещения записи Plextor начинает записывать аудиоданные на 30 сэмплов раньше (позиция записи). Другими словами, весь CD сдвинут на 30 сэмплов влево! В результате, проигрывая записанный CD в плейере, вы потеряете первые 30 сэмплов. Они записаны на диск, но находятся в невоспроизводимой области pregap. Из-за смещения аудиоданных первые 30 сэмплов трека 2 добавлены концу трека 1, то же и у треков 3 и 2. Поскольку рекордер начал писать слишком рано? он и закончит на 30 сэмплов раньше, то есть проигрыватель воспроизведет последние 30 сэмплов из области Lead-Out, которая заполнена пустотой.
Вывод: данные при записи не теряются, но первые 30 сэмплов невоспроизводимы, а отрицательный сдвиг всего CD означает, что индексы треков более не соответствуют своим позициям. Очевидно, что положительное смещение записи дает аналогичные результаты, только данные сдвинуты в противоположном направлении.

Теперь вы знаете, что такое смещение записи. Посмотрим поближе на смещение чтения. Оно идентично первому, только возникает при чтении. Ниже показано извлечение треков на идеальном приводе с нулевым смещением чтения.

Read offset 0

Как и ожидалось, привод извлекает все три трека превосходно. Ни отсутствующих сэмплов, ни сдвига данных, извлеченные треки идентичны дорожкам CD. Конечно, привод с нулевым смещением - это несбыточная мечта. Более реальна ситуация с Plextor PlexWriter, с его смещением чтения -355 сэмплов.

Read offset -355

Отрицательное смещение чтения означает, что Plextor начинает чтение на 355 сэмплов раньше, поэтому, когда программа дает команду (адресуемая позиция) начать чтение с абсолютной позиции 0, на самом деле он начинает чтение на 355 сэмплов раньше (позиция чтения). Таким образом, Plextor считывает 355 сэмплов из области pregap, где всякие аудиоданные отсутствуют (хотя привод "думает", что начал с 0), а последние 355 сэмплов трека 1 отсутствуют. Трек же 2 имеет в своем начале 355 отсутствующих сэмплов трека 1. То же и с треками 2 и 3. Поскольку привод начинает чтение раньше, чем следует, последние 355 сэмплов просто отсутствуют. В отличие от смещения записи, смещение чтения приводит к невосполнимой утере данных! Последние 355 сэмплов CD при извлечении потеряны. Для привода с положительным смещением картина аналогичная.

Допустим, мы хотим записать с помощью PlexWriter 3 прекрасно извлеченных трека - ситуация, типичная для многих из нас, кто не подозревает о смещениях. Все извлеченные треки сдвинуты на 355 сэмплов, а последний на 355 сэмплов короче. При записи со смещением -30, все треки будут записаны на 30 сэмплов раньше.

Поскольку треки уже имеют смещение в 355 сэмплов, общее смещение составит 325 сэмплов, то есть так называемое комбинированное смещение чтения/записи:

комбинированное смещение чтения/записи = смещение чтения - смещение записи = -325

На обычном языке это означает, что копия CD будет иметь смещение на 325 сэмплов относительно оригинала. При записи данные не потеряны, но поскольку последних 355 сэмплов уже не было, копию нельзя считать совершенной. Вследствие смещения индексы треков также позиционированы неверно, и каждый трек начинается на 325 сэмплов позже. Трек 1 начинается с 325 сэмплов области pregap исходного диска, то есть тишины, а последние 325 его сэмплов отсутствуют. Трек 2 в своем начале имеет отсутствующие 325 сэмплов трека 1. В треке 3 из-за смещения чтения отсутствуют последние 355 сэмплов, но при воспроизведении добавлены 30 сэмплов из области Lead-Out (тишины).

Прежде чем вы начнете паниковать, заметьте, что 30, 325 и 355 сэмплов - это очень малое время. Реальная продолжительность высчитывается по формуле:

время = сэмплы / 44100

Таким образом, 355 сэмплов = 0.00805 секунды (8.05 миллисекунды), 325 сэмплов = 0.00737 с (7.37 мс), а 30 сэмплов = 0.00068 с (0.68 мс). Смещение, затрагивая только временные сдвиги данных, никоим образом не отражается на качестве! Поскольку все треки на CD заканчиваются тишиной или затухают на переходах от одного к другому, вы никак не сможете услышать смещение. Вот почему на все разговоры о смещении можно наплевать :-), если это вас не волнует...

Но для нас, поборников качества, должен быть способ исправить положение. Как это сделать? Очень просто: нужно обмануть привод! В приведенном выше примере мы увидели общее смещение диска в -325 сэмплов. Так почему бы не применить коррекцию комбинированного смещения чтения/записи в +325 сэмплов?

коррекция комбинированного смещения чтения/записи = - комбинированное смещение чтения/записи = - (-325) = 325

Combined read/write offset 325

Программа дает команду приводу начать чтение на +325 (адресуемая позиция), но физически, это, конечно, позиция -30 (-355+325 = позиция чтения). То есть Plextor начинает считывать на 30 сэмплов раньше, и первые 30 сэмплов трека 1 будут тишиной из области pregap. Чтобы получить последние 355 сэмплов трека 1, привод считает 325 сэмплов трека 2. Это означает, что 30 сэмплов все еще недостает в конце трека 1. Они будут извлечены из начала трека 2. Очевидно, что вы всегда будете терять последние 30 сэмплов диска - нет никакого способа избежать этого, используя комбинированное смещение чтения/записи!

Тут возникает новая проблема. Последние 325 сэмплов трека 3 (последние 30 все равно будут отсутствовать), Plextor должен считать из следующего трека. Но никакого следующего трека нет! Поэтому привод вынужден считать их из области Lead-Out. Plextor способен считывать данные из этой области и может получить последние 325 сэмплов трека 3, но очень многие приводы не способны читать эту область и будут терять последние 355 сэмплов диска. Таким образом, приводы, поддерживающие чтение из области Lead-Out, будет терять только 30 сэмплов, в то время как остальные - 355 (325 сэмплов тишины из-за невозможности чтения + 30 сэмплов из-за смещения). Заметьте, что это касается только последнего трека!

Поскольку мы уже потеряли 30 сэмплов при извлечении, неважно, поддерживает ли привод чтение Lead-Out - все равно 100% точная побитная копия уже невозможна. С другой стороны, 30 сэмплов - это такое короткое время, что вы можете его игнорировать, особенно если учесть, что оно приходится на конец диска, а почти каждый CD все равно заканчивается тишиной.

Подобная же история происходит с положительным смещением, когда CD-ROM должен обладать способностью считывать данные из pregap (в ЕАС используется термин Lead-In, но на самом деле это именно pregap).

Даже если мы игнорируем отсутствующие сэмплы, все равно извлеченные треки смещены на 30 сэмплов. Но благодаря комбинированному смещению чтения/записи это будет исправлено при записи, как видно на примере внизу.

Поскольку смещение записи уже включено в комбинированное смещение чтения/записи, CD записан со смещением записи 0. Извлеченные аудиоданные сдвинуты на 30 сэмплов вправо, но поскольку Plextor начинает писать на 30 сэмплов раньше, окончательное смещение равно 0, то есть, смещение скорректировано. За исключением 30 сэмплов тишины в области Lead-Out в конце, копия идентична оригиналу!

Если используется устройство, не способное считывать Lead-Out, получается схожий результат, за исключением того, что последние 355 сэмплов заполнены тишиной.

Так что же, копии без отсутствующих сэмплов невозможны? Отнюдь, но это не так просто, и ЕАС на сегодня - единственная программа, позволяющая делать подобные копии. В приведенном выше примере мы использовали коррекцию комбинированного смещения чтения/записи для компенсации смещения чтения и записи. Поскольку реальное смещение чтения равно -355, а мы использовали -325, последние 30 сэмплов отсутствуют.

Этого можно избежать, если использовать раздельно смещение чтения при извлечении и смещение записи при записи. Хотя это звучит логично, очень трудно определить каждое из смещений, и многие не в состоянии использовать этот метод. Но раз оба смещения Plextor 8/20 хорошо известны, мы можем попытаться сделать дубликат CD без отсутствующих сэмплов.

Как видно ниже, CD теперь извлекается с коррекцией смещения чтения +355, сводя общее смещение к 0.

Программа сообщает приводу начать стение с сэмпла +355 (адресуемая позиция), но физически он читает с позиции 0 (позиция чтения = абсолютная позиция). Чтобы получить последние 355 сэмплов трека 1, Plextor считывает их из трека 2.

Как мы уже видели в случае комбинированного смещения чтения/записи, здесь возникает проблема. Последние 355 сэмплов трека 3 должен считать из трека, которого не существует, поэтому он вынужден считывать их из Lead-Out. Как уже было сказано, многие устройства, в отличие от Plextor, не способны считывать подобные данные, и последние 355 сэмплов CD будут утеряны. Таким образом, добиться полностью идентичной копии на устройстве, неспособном считывать Lead-Out, невозможно! Но, опять-таки, речь идет лишь о последнем треке, к тому же о таком коротком времени, которое вы ни за что не услышите. Поскольку 99% CD зканчиваются тишиной, никакого музыкального сигнала потеряно не будет!

При записи извлеченных треков на CD мы должны использовать смещение записи PlexWriter -30. Мы записываем треки, извлеченные устройством, поддерживающим чтение Lead-Out, в других же случаях просто имейте в виду, что последние 355 сэмплов трека 3 заполнены тишиной.

Обычно рекордер начинает писать на 30 сэмплов раньше, но коррекция смещение записи +30 компенсирует это, приводя общее смещение к 0. Смещение скорректировано! Программа указывает рекордеру начать запись с сэмпла +30 (адресуемая позиция), но физически он пишет с позиции 0 (позиция записи = абсолютная позиция). Чтобы записать последние 30 сэмплов трека 1, привод пишет в трек 2. Опять возникает проблема. Чтобы записать 30 сэмплов последнего трека, устройство должно записать их в несуществующий трек, поэтому рекордер должен обладать способностью писать в область Lead-Out. Если это так, вы видите, что скопированный CD является 100% копией оригинала без единого отсутствующего сэмпла!

К сожалению, лишь немногие рекордеры могут писать в область Lead-Out, и Plextor PlexWriter 8/20 к таковым не относится. Значит, 30 сэмплов в конце последнего трека все-таки будут отсутствовать. При такой конфигурации идентичная копия невозможна...

Особая благодарность Erik Deppe, Andre Wiethoff и Mark Powell за дополнительную информацию.

назад вперед наверх
X