Чтение CD программой Exact Audio Copy
Одна из достаточно важных задач в области цифрового звука — обеспечение его сохранности в первоначальном виде. Однажды попав в компьютер в виде двоичного файла, фонограмма, разумеется, останется неизменной до тех пор, пока вы сами не захотите ее модифицировать, и при копировании ее из файла в файл компьютер даже не подумает изменить в ней хотя бы один бит. То же самое справедливо и для компьютерных (CD-ROM) компакт-дисков: чтение файлов с них с малейшими искажениями — это прямой повод для признания диска или привода неисправным. Однако в случае звуковых (CD-DA) дисков картина совершенно иная.
Дело в том, что CD, как носитель звука, разрабатывался с упором преимущественно на непрерывность звучания и необслуживаемость. Иначе говоря, CD-проигрыватель должен был сделать все возможное, чтобы слушатель получил непрерывно звучащую фонограмму, не прилагая к этому ни специальных знаний, ни какого-то дополнительного содействия. Проще говоря — если компьютер старается предупредить пользователя о возможной неисправности и спрашивает указаний, то проигрыватель должен по возможности справляться с ошибками сам, не отвлекая слушателя посторонними сообщениями.
В результате формат записи звукового CD и алгоритм его воспроизведения были выбраны так, чтобы постараться исправить максимум возможных ошибок, а неисправленные — неявно замаскировать, вместо того, чтобы сообщать слушателю об их наличии. Большинство слушателей не замечают маскировку, которая происходит при прослушивании, но беда в том, что многие проигрыватели и читающие приводы CD-ROM предпочитают маскировку реальному исправлению ошибок. Да и при копировании диска в файл такое искажение информации само по себе неприятно, пусть даже оно и не ощущается на слух. Ведь кто знает — возможно, лет через пять, когда оригинал диска или испортится, или потеряется, или вообще изживет себя как носитель, ваш компьютер будет способен воспроизвести эту запись с предельно возможным качеством и именно этот искаженный участок будет резать вам слух? Поэтому, перенося фонограмму с CD на жесткий диск, имеет смысл сделать это максимально надежно, чтобы потом ни о чем не жалеть.
Перепробовав за несколько лет пару десятков разных программ для чтения и копирования СD, я пришел к выводу, что и в этой области программирования преобладает стремление к разработке яркого, динамичного и оригинального интерфейса, а надежность и точность копирования отходят на второй план. В результате из великого множества предлагаемых программ для реальной работы годятся единицы. Я остановил свой выбор на программе Exact Audio Copy (EAC), разработанной Andre Wiethoff. Лаконичный интерфейс с лихвой компенсируется исключительной точностью и надежностью работы, а также наличием функций, равных которым в остальных программах нет и в помине. Словом, программа полностью оправдывает свое название, к тому же является практически бесплатной (cardware).
Автор довольно долго сохраняет за EAC статус бета-версии (последняя — 0.9 beta 4), поставив целью добиться максимально надежной работы к моменту официального релиза. Я пользуюсь EAC уже больше двух лет; в то время программа имела статус pre-beta, однако уже тогда она отлично справлялась со своими функциями.
Основная проблема при чтении дисков — обнаружить и постараться исправить все ошибки чтения, при том что привод CD-ROM, как правило, не особенно этому содействует. Как уже отмечалось, в технологии звуковых CD наряду с исправлением ошибок применяется их маскирование. Поэтому многие CD-приводы при чтении «сырого» (raw) звукового сектора размером 2352 байта с диска сообщают об ошибках лишь тогда, когда не удалось их ни исправить, ни замаскировать — проще говоря, когда поврежден достаточно большой участок, не позволяющий рассчитать потерянные отсчеты по соседним. Такое бывает только на сильно поврежденных либо на довольно старых дисках; на большинстве дисков встречаются лишь мелкие ошибки, которые при должном «умении» привода можно было бы полностью исправить, однако стратегия декодирования ряда приводов делает упор на маскирование. Это понятно — производители дисков и проигрывателей никак не заинтересованы в точном копировании звуковой продукции, поэтому и не стремятся к разработке предельно точных методов восстановления (хотя бы в аппаратах среднего класса).
Менее серьезная проблема — так называемый jitter, не вполне корректный термин из другой области техники, заключающийся в неумении (или нежелании) многих приводов начинать чтение точно с заданной позиции. Поскольку прочитать даже одну звуковую дорожку одной командой невозможно, используется серия команд, где каждая следующая читает с места завершения чтения предыдущей. Хорошо если привод при этом выдает слитный поток данных, но ряд приводов в таких стыках допускает ошибки позиционирования, делая пропуски или наложения, которые приходится исправлять программе чтения.
И наконец, наименее важная проблема — начальное смещение (offset), которое появляется из-за используемого в кодировании информации на CD перемежения данных. Большинство приводов вследствие этого выдает данные с небольшим смещением от начала дорожки (обычно в пределах нескольких сотен байт), что не ощущается на слух, если дорожки записаны с паузами, но может быть критично на дисках, записанных единой непрерывной программой. Чтобы определить смещение вашего привода, можно использовать любой из 600 перечисленных в описании EAC-дисков (разумеется, оригинальных, а не пиратских копий, которые обычно отличаются на двоичном уровне). Если вам нужна точная копия диска на CD, а не на жестком диске, можно использовать так называемое комбинированное смещение, которое получается в результате чтения диска и записи его копии на одном и том же приводе.
EAC при чтении диска пытается обнаружить и исправить максимальное количество возможных ошибок и неточностей. Программа предлагает четыре метода чтения:
burst (асинхронный) — наиболее быстрый, но и наименее надежный; EAC просто читает звуковые сектора подряд. В этом режиме EAC полностью доверяет приводу, полагая, что тот выдает точный и слитный поток данных, а на долю EAC остается лишь скомпенсировать начальное смещение. При этом операции чтения с CD и записи на жесткий диск выполняются параллельно, отчего привод CD работает практически непрерывно.
fast (скоростной) — блоки данных читаются с перекрытием в два сектора (очередное чтение захватывает два предыдущих сектора), чтобы правильно состыковать блоки, когда привод ошибается в позиционировании. Работает примерно в полтора-два раза медленнее burst;
secure (защищенный) — оптимально надежный режим, в котором проверяется правильность стыковки соседних секторов и делается несколько попыток чтения каждого сектора для обнаружения различий, вызванных маскированием ошибок. Если данные различны, EAC продолжает попытки до тех пор, пока не обнаружит среди них 16 совпадающих результатов, которые и будут использованы в качестве окончательных. За счет повторных чтений этот режим гораздо медленнее fast.
paranoid (параноидальный) — используется в том случае, когда вы совершенно не доверяете своему приводу и подозреваете его во всех смертных грехах. В этом режиме EAC дважды читает каждый блок мелкими порциями, сравнивая результаты, отчего процесс движется предельно медленно.
Для приводов, поддерживающих точное чтение (например, Panasonic от 12-кратной скорости и выше, многие модели Teac, Pioneer, Plextor), оптимальным является режим burst, поскольку нет необходимости в постоянном контроле за приводом. Чтобы убедиться в точности работы привода, вполне достаточно прочитать последовательно три-четыре раза несколько дорожек в режиме burst, складывая результаты в разные папки и интенсивно загружая компьютер в процессе чтения. Если все результаты попарно совпадают (это можно проверить функцией Compare Wavs из меню Tools), приводу можно доверять, в противном случае придется использовать другие режимы, добиваясь повторяемости результатов. Если данные идентичны, но различаются смещения — привод не обеспечивает повторяемого начального смещения и заодно его можно заподозрить в неаккуратном позиционировании.
В режимах с исправлением ошибок поле Error correction отражает процесс исправления — красные точки означают неудачные попытки. Заполнение поля красным свидетельствует о полностью неудачном чтении данного участка — ошибка не поддается исправлению никакими методами.
Из дополнительных «вкусностей»: EAC поддерживает интерфейс FreeDB, связываясь через Интернет с общемировой базой данных и извлекая из нее данные альбома. Имеются также средства удаления одиночных ошибочных отсчетов (glitch removal), создания CUE-файла (схемы дорожек) для программы записи CDRWIN, встроенный волновой редактор с функцией ослабления шума (noise reduction), а также функция записи дисков. Однако я предпочитаю пользоваться им исключительно для точного чтения и копирования CD, а остальные операции делать в более специализированных программах.
Полезной будет функция нормализации — приведения уровня считанных дорожек к единому, обычно максимальному. Теоретически это обеспечит примерно одинаковую громкость звучания, но на практике это не всегда так, поскольку субъективная громкость сильно зависит от динамических и частотных параметров фонограммы. Визуально приведя две дорожки к одному уровню, вы можете получить ощутимо различающуюся на слух среднюю громкость; в таких случаях остается лишь подбирать уровни экспериментально.
EAC не содержит встроенного компрессора звука (и правильно — его поддержка не позволила бы автору сконцентрироваться на методах точного чтения). Однако он поддерживает стандартный для Windows интерфейс ACM, позволяющий использовать встроенные в систему кодеки, а также «знает» около двух десятков внешних компрессоров (LAME, BladeEnc, L3Enc, Yamaha VQF, RealAudio и т.п.). При желании процесс чтения и сжатия можно совместить, однако при наличии на диске достаточного места выгоднее сжимать уже считанные дорожки.