О системном времени и других IRQ. Должен отметить что программы данного комплекта ведут себя довольно агрессивно в плане захвата на себя вычислительных ресурсов процессора. Дело в том, что вся обработка данных, необходимая для того чтобы звук проходил между звуковой картой и арвидом, производится в обработчиках IRQ от звуковой карты и арвида. Это сделано потому, что любая операционная система должна отдавать IRQ'шки в повешенные на них задачи более исправно, нежели она может отдавать этим задачам положенные им Time Slice'ы. Когда программа была построенна по принципу опроса в основном цикле последовательно данных/готовности арвида и звуковой карты, то при запуске в фоне под чикой результат был весьма плачевен - задача периодически замораживалась на столь длительное время, что происходил разрыв в потоке данных, от которого не спасали никакие буфера - ни звуковой карты, ни арвида. После переноса основной обработки данных в IRQ'шки все стало работать нормально, хотя чика все же умудряется при некоторых условиях даже IRQ'шки не отдавать - но тут я пока ничего придумать не могу. Но по крайней мере играть в фоне музыку и делать при этом еще что-нибуть не очень ресурсоемкое (например читать почту) вполне можно. Однако возникла другая проблема. Поскольку обработка кода коррекции ошибок требует довольно больших вычислений, то иногда обработка IRQ'шки длится слишком долго и другие IRQ'шки, происходящие в этот момент могут пропасть. Это относится прежде всего к системному таймеру - он начинает отставать. На данный момент эта проблема решена следущим образом. Программа постоянно проверяет расхождение между системными часами и часами в CMOS'е. И если расхождение больше некоторой величины (она задается в файле конфигурации), то происходит переустановка системых часов в соответствии с часами из CMOS. Это не очень красивое решение, но это единственное что я смог придумать чтобы были "и овцы сыты и волки целы". DPMI версии программ. Начиная с версии 0.9j программы поставляются также и в варианте для DPMI (DOS Protected Mode Interface), что позволяет использовать более объемные буфера для кэширования потоков аудиоданных. Для настройки размеров буферов используйте переменные RecordBuffer и PlayBuffer в файле AvAudio.Cfg. Под windows не рекомендуется устанавливать размеры буферов больше 1/4 - 1/3 объема RAM вашего компьютера - это может привести к излишнему swapping'у. Размер PlayBuffer также определяет задержку между началом съема данных с ленты и началом проигрывания звука. С точки зрения стабильности работы в качестве фоновой задачи PlayBuffer не имеет особого значения, он полезен для компенсации разности в скорости записи на ленте, скорости магнитофона и скорости проигрывания на вашей звуковой карте. RecordBuffer, как показала практика, позволил значительно улучшить стабильность WAV -> Arvid recorder'а и CD -> Arvid recorder'а при работе в качестве фоновой задачи. Если у вас 16 Mb и более RAM, то попробуйте увеличить размер RecordBuffer'а до 4 Mb. Однако, все еще настоятельно рекомендуется производить запись на ленту в качестве основной задачи. Особенно опасны сбои в работе программы "аналоговой" записи с саундбластера на арвид. Они незаметны на слух, но имеют фатальный характер - при воспроизведении будут выпадения. В программах цифровой записи (с CD и из WAV) - наоборот, сбои слышны при записи, но если они небольшие, то при воспроизведении ничего не будет заметно, так как в этом случае программы полностью контролируют поток аудиоданных, и если возникает проблема с записью его вовремя, то данные не теряются, а лишь задерживаются, а это может быть компенсировано при воспроизведении буфером опережающего чтения. При "аналоговой" записи, если многозадачная ОС, которой вы пользуетесь, не дала программе вовремя откачать данные из буфера саундбластера, то эти данные потеряются безвозвратно. В вресии 0.9n добавленна диагностика таких потерь/задержек - величина Lag. Говоря точно, это колличество половинок DMA буфера бластера, проигрывание/запись которых было детектировано, но соответствующей передачи данных не состоялось. При нормальной работе должно оставаться в значении 0. Для обеспечения быстрого запуска программ записи из WAV файла и с CD, а также для быстрого переключения между дорожками CD, в конфигурацию введен параметр FastStartBuffer. Буфер записи будет заполняться сначала лишь до заданного этим параметром значения, и дозаполнение до конца будет происходить уже после старта цикла записи (при этом некоторое время не будет обновляться на экране информационная строка). Однако, поскольку при не до конца заполненном буфере программа пытается остановить все другие процессы в системе; а также, поскольку малое заполнение буфера в начале работы может плохо сказаться на стабильности работы программы, то вы можете отключить эту особенность, установив FastStartBuffer в то же значение, что и RecordBuffer. Коррекция ошибок. Небольшое замечание по поводу коррекции ошибок. При испытаниях записи в режиме LP на видеомагнитофоне SONY SLV-436EE обнаружилось, что если дать магнитофону постоять в выключенном состоянии некоторое время (несколько часов), то сразу после включения при воспроизведении идет крайне большой уровень ошибок, с которым мой код не справляется. Но через несколько минут (от 5 до 10) магнитофон "прогревался" и все становилось нормально. При записи в режиме SP все было нормально. Также было замечено что по умолчанию этот магнитофон не всегда производит автоматическую подстройку трэккинга. Так что если щелкнуть переключателем auto tracking, то уровень ошибок может снизиться от 2 до 4 раз. Если ваш магнитофон формирует на экране какую-нибудь картинку, например счетчик ленты, то кода коррекции обычно хватает чтобы не происходило фатальных сбоев, но звук будет идти с потрескиванием. Уровень ошибок при этом обычно составляет несколько тысяч. Дайте вашему магнитофону команду прекратить показывать лишние картинки. И еще одно наблюдение. Проведенные мною небольшие испытания показали, что сразу после записи качество записи существенно деградирует в течении примерно суток, после чего процесс замедляется и становится незаметным. Но совершенно четко видно, что если воспроизвести запись сразу после записи, то все как правило прочтется идеально, а через сутки обычно уже есть одно-два выпадений кадров. По идее, кода коррекции должно хватать чтобы вы ничего не заметили, но все же не мешает проверить запись на следущий день и перезаписать явно дефектные куски, если таковые имеются. Высокий уровень ошибок и невосстановимые ошибки. Начиная с версии 0.9i в программе проигрывателя ведется раздельный подсчет восстановленных ошибок, и ошибок, которые восстановлению не подлежат. Если в блоке есть невосстановимые ошибки, то вместо колличества восстановленных ошибок отображается колличество невосстановимых ошибок. Такая ситуация индицируется восклицательным знаком (!) после цифры числа ошибок. Уровень в несколько десятков невосстановимых ошибок на блок означает легкое потрескивание в этот момент. Уровень в несколько тысяч - серьезный сбой - шум сильнее чем сам звук. В AvAudio.Cfg переменной BearableErrorLevel задается предельный уровень невосстановимых ошибок. Если в блоке больше невосстановимых ошибок, чем заданное значение, то этот блок будет заполнен нулями и в этом месте будет слышна пауза. Сбои при воспроизведении. Если при воспроизведении начался постоянный непроходящий сбой, то избавиться от него можно попробовать остановив видеомагнитофон и перезапустив его снова. При этом программа должна переинициализировать процесс воспроизведения. Также можно просто перезапустить программу (предварительно выйдя из нее). Иногда у программы бывают проблемы с завершением цикла воспроизведения - нажмите любую клавишу чтобы принудительно завершить цикл. Регулировка уровня записи и воспроизведения. Если вам не хватает ручек управления звуковой картой, то вы можете запустить любой внешний микшер, например тот, что был в комплекте программного обеспечения вместе со звуковой картой. Под многозаданой системой это можно сделать отдельной паралельно выполняющейся задачей, а можно просто сначала запустить микшер, произвести настройки, а потом запустить программу из комплекта Arvid Audio. Это полезно потому, что Arvid Audio не позволяет регулировать, например, такие параметры как Input Gain и Output Gain, а из внешнего микшера это сделать можно. А при воспроизведении при помощи внешнего микшера вы можете регулировать громкость воспроизведения, а также тембры, если это позволяет ваша звуковая карта. Цифровая запись с CD. Цифровая запись с CD - процесс ставящий определенные требования к аппаратно-программному обеспечению, обслуживающему CD привод вашего компьютера. В первую очередь ваш привод вкупе с драйвером должен уметь выполнять комманду Read Long в Raw Data Mode. Это необходимое, но не достаточное условие. При выполнении комманды Read Long CD привод может допускать некоторую ошибку позиционирования. Моя программа ее компенсирует, но для этого комманда Read Long не должна кэшироваться вашим программным обеспечением. В случае кэширования этой комманды моя программа не сможет определить величину ошибки и, следовательно, ни о какой компенсации не может идти и речи. Хотя вы можете быть счастливым обладателем привода и драйвера, которые позволяют выполнять точное позиционирование при выполнении комманды Read Long. То есть из четырех возможных случаев (ошибка есть и кэш есть; ошибка есть и кэша нет; ошибки нет, но кэш есть; нет ни ошибки, ни кэша) фатальным является только первый. В этом случае вам необходимо попробовать свести задачу к любой из оставшихся трех путем замены драйвера или привода или и того и другого одновременно. Например, Panasonic 581 имеет ошибку позиционирования. А стандартный драйвер, загружаемый Win95, кэширует комманду Read Long. В результате звук получается никуда не годный. В то же время ДОС драйвер от Panasonic эту комманду не кэширует и моя программа корректно компенсирует ошибку позиционирования. А, например, драйвера к этому CD приводу от фирмы Creative вообще не выполняют комманду Read Long - имеется ввиду драйвер для Win95 - SBIDE.MPD miniport driver. Так что если у вас этот драйвер (наиболее вероятно он поставился если ваш CD-ROM подключен через интерфейс на звуковой карте), то замените его на стандартный IDE драйвер в конфигурации системы Win95. ДОС драйвер SBIDE.SYS работает нормально, так же как и cr_atapi.sys (он же lm581ide.sys). Внимание! Ни один из опробованных мною Bus Master драйверов для Win95 для чипсета Triton не выполняет комманды Read Long. Если вы используете Bus Master драйвера - то замените их на стандартные IDE драйвера, или переключитесь на использование ДОС драйверов. Кстати, Bus Master драйвера от Intel невозможно просто так заменить обратно на стандартные, так как они буквально заменяют стандартные IDE драйвера Win95. Для восстановления стандартных драйверов необходима переинсталяция Win95, о чем, кстати, и написано в документации на драйвера. Также не удалось заставить работать 32-х битные драйвера в Win95 OEM Service Release 2 (OSR2). Однако DOS драйвера там работают. При выполнении комманды Read Long моя программа не проверяет правильности ее выполнения. Поэтому результатом неподдержки Read Long вашим драйвером может стать просто тишина в колонках при попытке цифровой записи с CD. Если вам надоело бороться с виндоус, то вы можете переключиться на ДОС драйвера. Для того чтобы под Win95 использовать ДОС драйвера, необходимо прежде всего прописать их в config.sys и/или в autoexec.bat. И, разумеется, загрузить (в autoexec.bat) MSCDEx.Exe. А для того чтобы досовские драйвера продолжали работать и после загрузки виндоус (так называемой графической оболочки Win95), необходимо отключить в системных установках файловой системы использование любых 32-х битных дисковых драйверов (start -> settings -> control panel -> system -> performance -> file system -> troubleshooting -> disable all 32-bit protect-mode disk drivers). В противном случае Win95 отключит ДОС драйвера и загрузит свои. Как же определить, что у вас на самом деле происходит? При записи программа показывает текущую величину ошибки позиционирования. Если она постоянно равна нулю - значит программа не обнаруживает никакой ошибки - следовательно у вас либо очень хороший CD привод, либо у вас кэшируется комманда Read Long. Если вместо величины ошибки у вас иногда выскакивает слово error, а счетчик колличества ошибок увеличивается, то обычно это значит что ошибка позиционирования есть, но слишком большая. Попробуйте увеличить уровень защиты от ошибок позиционирования в файле конфигурации. Но помните, что чем выше уровень - тем быстрее должен быть ваш CD привод. Однако та же самая ситуация может возникнуть если компакт диск в вашем приводе читается с ошибками данных. В этом случае программа также не может определить ошибку позиционирования (даже если она равна 0), о чем и сообщает словом error. Следует иметь ввиду, что диски, которые у вас хорошо проигрываются в режиме play audio, могут не читаться в режиме цифрового копирования по той простой причине, что в режиме play audio CD привод работает с одинарной скоростью, а в режиме цифрового копирования обычно работает со своей максимальной скоростью. При этом как правило больше всего страдают последние трэки, ближние к внешнему краю диска. Проверьте их читаемость прежде чем приступать к записи в цифровом режиме (для этого запустите программу CD2AV с параметром - номером одной из последних дорожек, нажмите enter, но магнитофон при этом не включайте). Начиная с версии 0.9d в программе предусмотренна система противодействия кэшированию комманды Read Long. Эта возможность включается и отключается в файле конфигурации avaudio.cfg. Таким образом, если предыдущие версии программы у вас считывали аудио CD с "щелчками", то есть ошибка позиционирования не компенсировалась из-за кэширования комманды Read Long, то теперь новая версия возможно справится с этой проблемой. Например, Панасоник 581 с драйверами, загружаемыми по умолчанию Win95, хотя и кэширует комманду Read Long, но система противодействия успешно с этим справляется. Если вы чувствуете, что ваш CD привод не достаточно быстр, чтобы успевать считывать данные с необходимой для Arvid Audio скоростью, то можете попробовать уменьшить уровень защиты от ошибок позиционирования (в файле avaudio.cfg), и даже совсем отключить защиту. Включение и выключение системы противодействия кэшированию тоже влияет на скорость работы, но никогда нельзя сказать наверняка - в какую сторону. Так что это тоже один из параметров, с которым можно поэкспериментировать в случае необходимости. Hапример, для двухскоростного привода Panasonic CR-563 пользователи утверждают, что работают установки PosErrorProtection=2 и CCM=0. Имейте ввиду, что при CCM=0 скорей всего необходимо будет использовать DOS драйвера привода CD (то есть не Win95). Если программа работает очень медленно (практически зависает) и при этом вы видите что происходит какое-то чтение с CD, то, возможно, это результат попыток пропустить сектора, которые драйвер CD отказывается читать, выдавая флаг ошибки. Чтобы Arvid Audio перестал этим заниматься, установите ключ ActOnCDReadError=0. Однако в этом случае возможны различные шумовые эффекты вместо звука. Изначально для чтения данных с CD программа общается непосредственно с драйвером CD, минуя MSCDEx (хотя MSCDEx используется для других операций). Кое кого это может застать врасплох. Поэтому в версии 0.9m введена возможность включить чтение с CD через MSCDEx (DirectDriverCall=0). Однако в этом случае всплывает несовместимость такого способа чтения со SmartDrive. Поэтому опцию деактивации SmartDrive оставьте включенной. Экспериментируя с различными драйверами, помните, что простейший способ проверить правильность установки драйвера - вставить и попробовать прочитать обычный CD-ROM с файлами. Драйвер SBIDE - универсальный драйвер для IDE CD-ROM от фирмы Creative можно найти на их WWW странице - www.creaf.com. Комплект из драйверов для DOS/WIN3.1/WIN95 вместе с программами установки можно взять по FTP из каталога ftp://ftp.creaf.com/pub/creative/drivers/cdrom. Файл называется SBIDED95.EXE. Кроме того DOS драйвер с DOS программой установки SBIDE.ZIP проходил по файлэхе xHrdMisc. Вам нужен только DOS драйвер из этих архивов, поэтому запускайте установку драйвера программой INSTALL.EXE, а не SETUP.EXE. Если вы хотите быть увереным в чистоте эксперимента, устанавливайте и попытайтесь использовать этот драйвер в чистом DOS'е. Позднее, если в DOS'е будет все нормально вы можете продолжить использовать этот драйвер, запустив WIN/WIN95 (не забудьте предварительно отключить 32-х битные драйвера). Если этот драйвер будет работать как нормальный CD-ROM драйвер (то есть CD-ROM диски с программами/данными будут нормально читаться), но аудио диски читаться не будут, то вероятнее всего ваш привод CD не поддерживает чтение аудио дисков. Список приводов, которые поддерживают или не поддерживают чтение аудио дисков, есть на http://www.tardis.ed.ac.uk/~psyche/cdda/ Звуковая карта. Всем программам для работы необходима звуковая карта. Даже если запись идет из WAV файла или в цифровом виде с CD, то параллельно записи на звуковую карту идет воспроизведение для синхронизации всего процесса по времени. Во всех случаях, кроме записи из 8-ми битного WAV файла, программам нужен Sound Blaster SB16. Обратите внимание - не, скажем, SB Pro, а именно SB16, ибо это первая карта линии Sound Blaster'ов, у которой появилась возможность воспроизводить 16-и битный звук. Программе "аналоговой" записи тоже нужен SB16 (или DigPak драйвер, поддерживающий работу в режиме записи), так как оцифровка производится в формате 16 бит стерео 44100 Гц. Creative SB16 имеет версию DSP 4.XX, и программы за этим следят. Однако, по непроверенным пока сведениям, есть карты, совместимые с SB16, которые имеют версию меньше четырех. Поэтому в версии 0.9e проверка заменена на предупреждение. Если вы его увидите, то в случае неработоспособности программы, причиной почти наверняка будет являться несовместимость карты с SB16. Помните, что 16-и битная карта, совместимая с Sound Blaster вовсе не обязанна быть совместимой с SB16. Она может быть совместимой с SB Pro, а поддержку 16-и битного звука осуществлять по-своему, способом отличным от того как это делает SB16. В настоящее время в программе введена поддержка вывода звука через DigPak драйвера. Если ваша карта не совместима с SB16 то можете попробовать воспользоваться этой возможностью. Настройка переменной BLASTER. ------------------------------------------------------------------------------ BLASTER=Aa Ii Dd Hh Pp Tt Aa - Base Address 0210h, 0220h, 0230h, 0240h, 0250h, 0260h, 0280h Ii - Interrupt Request 2, 3, 5, 7, 10 Dd - DMA Channel, 8-bit 0, 1, 3 Hh - DMA Channel, 16-bit 5, 6, 7 Pp - Base MIDI Address 0300h, 0330h Tt - Model 1(1.x), 2(Pro), 3(2.0), 4(Pro2.0), 5(ProMCV), 6(16, AWE32) NOTE: 16-bit DMA definition may actually refer to an 8-bit DMA alias. ------------------------------------------------------------------------------ Если вы устанавливаете переменную BLASTER не из autoexec.bat или config.sys, то после установки удостоверьтесь в ее правильности, дав комманду "set" без параметров. Если значение не установилось, то выйдите из Norton Commander'а (Dos Navigator'а, и т.п. оболочек) и произведите установку еще раз. Для временного переопределения переменной BLASTER специально для Arvid Audio вы можете написать .bat файл (это имеет смысл, скорей всего, только в том случае, если у вас не Sound Blaster звуковая карта): set save_blaster=%blaster% set blaster=значение, которое вы хотите установить для Arvid Audio. avplayer.exe <- или любая другая программа Arvid Audio. set blaster=%save_blaster% Sound Blaster может быть сконфигурирован в режиме, когда 16-и битный DMA канал отключен. В этом случае происходит перенаправление данных, которые SB шлет по DMA-16-bit на DMA-8-bit. Только начиная с версии 1.0b Arvid Audio может работать в такой конфигурации. Информировать программу об этом можно задав в переменной BLASTER одинаковые номера для DMA-16-bit и для DMA-8-bit. Обратите внимание, что прежде всего бластер должен быть физически (перемычками / специальными программами настройки / при помощи PnP) сконфигурирован в такой режим. С другой стороны, DigPak драйвер для SB16 с 16-и битным звуком почему-то работает только в режиме перенаправления DMA канала. Так что при обычной установке бластера с разнесенными DMA каналами, воспользоваться DigPak драйвером SB16 не получится. Да и не зачем - программа изначально поддерживает SB16 сама. Поиск файлов. Все необходимые для работы файлы (конфигурационные файлы, файлы звуковых драйверов) ищутся сначала в текущем каталоге, затем в списке каталогов из переменной PATH, и, наконец, в каталоге, из которого был произведен запуск программы. Известные ошибки, проблемы, и несовместимости. Симптом: Программа записи из WAV файла плохо работает. При чтении записанных ею данных, начиная примерно со второй минуты записи уровень ошибок увеличивается до нескольких сотен и начинает идти треск. Причина: Такое происходит при запущенном драйвере кэширования диска SMARTDRIVE. Решение: Отключите загрузку SMARTDRIVE и перезапустите компьютер. В версии 0.9g введена опция программного отключения SmartDrive через сервисное прерывание SmartDrive. Однако этим решением следует пользоваться только в случае, если вам действительно необходимо иметь загруженный в память SmartDrive, т.к. при его программном отключении ошибки уменьшаются, но не исчезают совсем и на хорошей ленте вы будете иметь уровень ошибок в одну или несколько сотен. Примечание: В версии 0.9k эта ошибка уже не возникает, но я уже успел сменить версию SmartDrv, поэтому опция отключения оставлена на всякий случай. Симптом: Программа проигрывания при запуске в качестве фоновой задачи под Win95 постепенно перестает играть. Причина: Такое наблюдалось при установке арвида на IRQ 12 на материнской плате типа Triton. Возможно это связано с не до конца отключаемой поддержкой инфракрасной мыши. Решение: Переставьте арвид на другое IRQ. Постарайтесь вообще избегать использования IRQ 12 на такой плате. Симптом: Непонятное поведение звуковой карты - хрипы / спутались каналы/ звук стал моно / и т.п. Причина: Неестественные установки в регистрах настройки звуковой карты. Решение: Если вы обнаружили странное поведение вашей звуковой карты, то попробуйте запуcтить программу SB_DFLT. Она произведет переинициализацию карты и установку всех видимых и, самое главное, невидимых регистров в значения по умолчанию. Например, иногда сбивается коммутация каналов. Обычно регистры коммутации никому не нужны, но если они сбились - карта может стать непригодной к нормальному использованию. Примечание: Номер порта ввода/вывода звуковой карты программа определяет из переменной окружения BLASTER. Симптом: При попытке записи с CD наблюдается эффект заевшей пластинки, система замораживается на длительные периоды времени. Причина: Медленное чтение данных с CD. Даже на быстрых приводах чтение аудио может происходить на низкой скорости. Проигрывание звука производится в циклическом буфере - поэтому если программа не успевает прочитать вовремя новый звук с CD, то она в цикле проигрывает старый. Кроме того, если программа диагностирует отставание чтения звука от его проигрывания, то она замораживает все процессы кроме чтения (и операционную систему тоже). Решение: Уменьшите значение PosErrorProtection. Попробуйте крайний вариант - PosErrorProtection=0 и CCM=0 (При этом программа не будет компенсировать ошибки позиционирования - возможны булькание/щелчки, но на некоторых приводах(Samsung 8x) может заработать идеально). Если и это не поможет - воспользуйтесь какой-нибуть внешней программой чтения CD в WAV файл (CD2WAV.ZIP можно взять на http://aha.ru/~gw) и пишите на арвид заранее прочитанные WAV файлы. Кроме того, хороший выбор программ чтения аудио CD есть на http://www.tardis.ed.ac.uk/~psyche/cdda/. Можете попробовать поменять драйвер CD на его родной(или наоборот - неродной) и поиграться с ключами. Бывает можно заставить привод читать аудио на более высокой скорости. В конечном счете можно записывать CD "аналоговым" способом, оцифровывая звук на звуковой карте при помощи программы записи с саундбластера на арвид (теоретически эта программа может также работать и не на саундбластере при условии наличия DigPak драйвера, поддерживающего режим записи, однако кроме DigPak драйвера для саундбластера же, я не знаю другого, который бы поддерживал запись).