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 формате
КОДЫ ВОЗВРАТА
- 240 количество треков на диске слишком велико
- 241 ошибки оборудования/операционной системы
- 242 неправильный параметр
- 243 номер трека/сектора вне допустимого диапазона
- 244 нет места на диске
- 245 выход по ошибке синхронизации
Внимание! Коды возврата отличаются от предыдущей версии!
ИСТОРИЯ ВЕРСИЙ
- 0.0a (08 Feb 1998)
- Первая работоспособная версия, способная выполнять чтение с компакт-диска и синхронизировать читаемые данные с ранее прочитанными. Доказала правильность теоретических размышлений.
- Только для внутреннего использования.
- 0.0a1 (21 Feb 1998)
- Внутренние переработки. Расширен и сделан более функциональным интерфейс командной строки :)
- Только для внутреннего использования.
- 0.1 alpha (03 Mar 1998)
- + реализовано чтение информации о содержимом аудио диска (параметр -toc).
- + реализован параметр -track. Треки теперь можно считывать только по номеру.
- + добавлен код, позволяющий избежать тупиковых ситуаций если невозможно синхронизировать данные.
- + дополнение и улучшение реакции программы на различные сочетания заданных параметров.
- + добавлен параметр -noprogress
- Первая публичная альфа-версия.
- 0.1 alpha 2 (20 Mar 1998)
- + реализована задержка для того чтобы привод успел раскрутиться и считать данные во внутренний буфер. Отсутствие этого приводило иногда к искажению первых прочитанных данных. Время задержки устанавливается параметром -wait.
- + косметические исправления
- 0.1 alpha 3 (02 Apr 1998)
- + борьба с джиттерингом, переписана процедура тестирования привода для анализа неустойчивого чтения данных с компакт-диска.
- + при чтении данных с компакт диска делается допущение, что считанные аудио данные за счёт джиттеринга будут искажены. введён параметр -accurate.
- + параметр -retry позволяет задать максимальное количество попыток перечитать данные с компакт-диска для синхронизации.
- + внутренние изменения и исправления
- 0.1.4 (21 Mar 2000)
- + теперь можно выдавать CD-DA данные в стандартный поток вывода. Это позволит избежать промежуточного хранения WAV-файла на диске. Теперь можно перенаправлять его прямо в MPEG-кодер. Так что даже если чтение с CD диска идет медленнее, зато не нужно лишних 50M дополнительного пространства на диске.
- все сообщения об ошибках, статусе и строка копирайта теперь выводятся в стандартный поток ошибок, чтобы не испортить аудиоданные.
- + добавлен новый командный файл cd2mpg_p.cmd для того, чтобы продемонстрировать работу с перенаправлением ввода/вывода. Кодером является GOGO-no-coda (http://homepage1.nifty.com/herumi/gogo_e.html) — действительно быстрый MPEG кодировщик, который даже на моем P133 кодирует быстрее, чем считываются аудиоданные с компактдиска.
- командный файл cd2mpg.cmd изменен для работы с кодировщиком LAME.
- обновлена документация
- так как за предыдущие два года никаких особых нареканий на работу программы не было, то эта версия является релизом. Это долгое время не делалось по той причине, что менять было нечего, а заставлять народ скачивать новую версию, в которой слово "бета" убрано — дело глупое.
- 0.1.5 (21 Aug 2000)
- исправления для корректной работы с перенаправлением потока вывода.
- cd2mpg_p.cmd обновлен для работы с lame-pcm . Почему-то lame.exe и gogo-no-coda в текущих версиях не могут работать с перенаправленными потоками (может быть из-за ошибок в библиотеке libsndfile, которую они используют?).
- 0.1.6 (18 Oct 2000)
- + новый способ инициализации привода CD-ROM, соответствующий параметр -spinup добавлен для настройки.
- + режим автоматического определения количества секторов для упреждающего чтения. Теперь JCDread/2 может сам определять это значение.
- + задокументированы коды возврата.
- + новый параметр -exit для выхода при возникновении ошибки синхронизации.
- + корректная работа в системах с несколькими подключенными приводами CD-ROM.
- обновлена документация.
- обновлены скрипты cd2mpg.cmd cd2mpg_p.cmd
- 0.1.7 (20 Nov 2000)
- + при запросе -toc в коде возврата возвращается количество треков на диске. В связи с этим изменились значения кодов возврата.
- подкорректирован алгоритм для параметра -accurate. Теперь он меньше загружает процессор. В связи с этим значение параметра -accurate по умолчанию увеличено до 15%, что должно благотворно сказаться при чтении царапанных дисков.
- исправления в алгоритме автоматического определения количества секторов для упреждающего чтения, теперь он не должен виснуть при невозможности засинхронизировать данные.
- обновлена документация и скрипты cd2mpg.cmd cd2mpg_p.cmd
Дальнейших улучшений, как всегда, больше не ожидается (кроме исправления найденных ошибок :) .
Возможно после некоторого причёсывания будут выпущены также исходные тексты. Приветствуются также идеи далнейшего развития продукта и благодарности.
ПРОТЕСТИРОВАННОЕ ОБОРУДОВАНИЕ
- 8x Aztech 86801ISE (около 300 kb/s)
- 8x Mitsumi FX800/810 series (около 300 kb/s)
- 12x Hitachi CDR-8130 (до 850 kb/s)