bz home

JCDRead README.RUS

АВТОРСКИЕ ПРАВА

Данная программа распространяется по принципу АЗ ЕСМЬ (AS IS) совершенно свободно. Автор не несёт никакой ответственности за причинённый физический или моральный (а также любой другой) ущерб, нанесённый использованием или не использованием данной программы.

Данная програма не может использоваться для получения коммерческой выгоды или поставляться в составе коммерческих продуктов.

Все права на данную программу принадлежат автору. При написании использован за основу код cdread2, написанный Carsten Thorenz, за что и выражаю ему искреннюю благодарность.

(c)1998-2000, Евгений Бредня.

НАЗНАЧЕНИЕ

Эта программа была написана для цифрового чтения компакт-дисков на CD-ROM приводах, имеющих проблемы с синхронизацией (иногда это неправильно называют jitter /дрожание?/). Дело в том, что аудио компакт-диски не содержат информации о том, какой сектор читается и далеко не все CD-ROM приводы умеют правильно позиционироваться на тот сектор, который запрашивают на чтение. Выражается это, например, в том, что при включенной 'Цифровой передаче' (Digital Transfer) проигрыватель компакт-дисков воспроизводит звук с явно слышимыми щелчками и потрескиванием. Аналогичные дефекты наблюдаются и при переписывании звука с аудио компакт-диска с помощью специальных программ - grabber-ов.

Также данная программа также предполагает, что кроме проблем синхронизации могут также встретиться и проблемы дрожания сигнала (собственно jittering). Для этого в свое время был введен параметр -accurate, который позволяет установить значение "похожести" данных (например, данные не совпадают на 5%). Это может помочь в том случае, если привод имеет проблемы синхронизации, а данные с диска кроме того читаются неустойчиво. Это может помочь при чтении поцарапанных дисков.

Теперь о проблемах синхронизации.

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

 аудио трек
|--------------------------------------------------------------------|
|-----------|
            |-----------|
                        |-----------|
                                    |-----------|
                                                |-----------| ...
                                    рис.1

Если при этом привод неправильно позиционируется на нужный сектор диска, то получается ситуация, показанная на рис.2. При этом некоторые части фонограммы теряются или удваиваются, что воспринимается на слух как щелчки или потрескивания.

 аудио трек
|--------------------------------------------------------------------|
|-----------|
           |-----------|
                         |-----------|
                                        |-----------|
                                                   |-----------| ...
                                    рис.2

JCDread2 пытается читать аудио данные с наложением, как показано на рис.3 и пытается найти окончание предыдущего фрагмента при чтении следующего. За счёт этого устраняются особенности работы привода :).

 аудио трек
|--------------------------------------------------------------------|
  прочитанные данные
|---------------------------|
                         |--^-------------------------|
                                                 |----^-- ...
                                    рис.3

Проверить, есть ли проблемы с синхронизацией можно запустив JCDread2 с параметром -info, и посмотрев на значения отклонений: минимальное, максимальное и среднее. Если среднее значение отклонения достаточно велико (>3000), то возможно удасться (мне не на чем было проверить) повысить скорость считывания подобрав параметр -preread. Не надо также забывать, что отклонение считается чисто статистически и может меняется от запуска к запуску.

Из-за особенностей алгоритма в настоящий момент не читаются последние 27 секторов диска. Это не такое уж большое несчастье, т.к. (27*2352)/(44100*4) = 0.36 секунды. Но зато без искажений.

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

ИСПОЛЬЗОВАНИЕ

JDCread2 [параметры]

Параметры, которые могут быть заданы в командной строке:

-info получить информацию о возможностях CD-ROM привода, в том числе о проблеме синхронизации при чтении аудио данных (при этом нужно, чтобы в приводе находился аудио диск). По умолчанию чтение проводится 10 раз из середины диска.
-toc получить информацию о звуковых треках на компакт-диске
-track no читать трек с номером 'no'
-start no начать чтение с сектора номер 'no' (в режиме info: номер сектора, с которого будут считываться данные для проверки проблем с синхронизацией)
-len qty задать количество читаемых секторов (в режиме info: количество попыток чтения данных при проверке проблем с синхронизацией)
-preread n задать количество секторов для упреждающего чтения (0..26, по умолчанию = 1)
-wait n установить величину задержки для привода, чтобы он успел раскрутиться и считать данные во внутренний буфер. Задается в 0.1 сек, по умолчанию =10 (т.е. 1 сек.)
-spinup N другой способ инициализации привода. При нем производится N считываний с СВ-привода перед началом чтения данных (по умолчанию 10 раз).
-accurate N установить допустимый уровень несовпадения данных за счёт джиттеринга в процентах (по умолчанию 15%)
-retry N установить максимальное количество попыток перечитать данные с CD-ROM ( по умолчанию 50 раз)
-file name записывать прочитанные аудио данные в файл 'file'. если имя файла не указано, используется 'Output.wav' или 'TrackNN.wav', если задаётся номер трека. Имя '-' используется для задания стандартного потока вывода.
-raw записывать аудио данные в RAW формате (без RIFF заголовка), по умолчанию аудио данные записываются в RIFF WAV формате
-exit выход из программы если не получается засинхронизировать данные
-noprogress отключить вывод на экран информации о текущем выполнении чтения
-debug выводить во время работы отладочную информацию

Необходимо обязательно указать либо номер трека для чтения, либо явно задать начальный сектор и количество секторов для чтения.

Примеры использования:

JCDread2 l: -toc
получить информацию об аудио треках
JCDread2 l: -info
выдать кое-какую информацию о CD приводе, провести тестирование на наличие проблем с синхронизацией при чтении.
JCDread2 l: -track 3 -file song5.wav
записать трек 5 в файл song5.wav в RIFF WAV формате
JCDread2 l: -start 1000 -len 500 -raw -file wave.pcm
записать 500 секторов начиная с 1000 в файл `wave.pcm' в RAW PCM формате
JCDread2 l: -track 8 -len 100
записать 100 секторов трека 8
JCDread2 l: -track 2 -file -
записать трек 2 в стандартный выходной поток в RIFF WAV формате

КОДЫ ВОЗВРАТА

Внимание! Коды возврата отличаются от предыдущей версии!

ИСТОРИЯ ВЕРСИЙ

Дальнейших улучшений, как всегда, больше не ожидается (кроме исправления найденных ошибок :) .

Возможно после некоторого причёсывания будут выпущены также исходные тексты. Приветствуются также идеи далнейшего развития продукта и благодарности.

ПРОТЕСТИРОВАННОЕ ОБОРУДОВАНИЕ

  1. 8x Aztech 86801ISE (около 300 kb/s)
  2. 8x Mitsumi FX800/810 series (около 300 kb/s)
  3. 12x Hitachi CDR-8130 (до 850 kb/s)