+++++++++++++++++++++++++++++++++++++++++
+ МЕТОДЫ +
+++++++++++++++++++++++++++++++++++++++++
Sokol/Infotek.
Тут вот статья Дениса Зодченко:
Есть у AY три регистра, задающие
громкость каналов. Если по соответствую-
щему каналу включен генератор - это будет
громкость тона. Если выключен - это будет
4-битный ЦАП.
В обоих случаях у этого значения ло-
гарифмическая зависимость. Увеличение на
единицу означает увеличение громкости/у-
ровня на квадратный корень из двух. Уве-
личение на два - соответственно в два ра-
за. Это было сделано из эргономических
соображений - слух человека имеет лога-
рифмическую диаграмму чувствительности,
чем меньше громкость - тем более чувстви-
тельно ухо к одному и тому же линейному
изменению мощности звука (именно мощнос-
ти, громкость - это чисто субъективное
понятие). То есть, если линейно увеличи-
вать число громкости генератора тона, на
слух громкость будет расти практически
линейно, а мощность - логарифмически.
Когда AY работает как ЦАП по одному
или нескольким каналам - эта логарифми-
ческая зависимость не слишком удобна. Но
работает :-)
Подключив в свое время AY на БК, я
"изобрел" (слишком громко сказано, но все
же) метод улучшения качества при проигры-
вании одиночной оцифровки (без микширова-
ния кучи каналов).
Метод следующий: заранее (на бейси-
ке, например) просчитываются ДВЕ таблицы.
Значения в этих таблицах такие: для каж-
дого из желаемых выходных уровней переби-
раются все пары записываемых в AY значе-
ний таким образом, чтобы среднее арифме-
тическое результата было наиболее близко
к желаемому уровню. 256 вариантов (пара
4-битных значений) для каждого из 256 ре-
зультатов.
Проигрывание ведётся так: для каждо-
го байта оцифровки берутся два соот-
ветствующих значения, и НЕСКОЛЬКО РАЗ по-
очередно записываются в порты AY. Это
происходит с ультразвуковой частотой, и
человеческое ухо этого чередования просто
не замечает. Реально ухо слышит то самое
искомое среднее значение. В результате
ЦАП AY становится как бы даже не че-
тырехбитным, а еще лучше :-)
Проигрывание при этом ведётся с IDE
винчестера, тоже достаточно хитрым спосо-
бом. Винту изначально даётся команда чи-
тать с нужного места. Когда он выдаст го-
товность, программа проигрывала очередной
байт оцифровки, и между чередованием зна-
чений читала данные с винта (четыре бай-
та). Таким образом, пока проигрывалось
128 байт, с винта уже считывался сектор в
память. Во время проигрывания следующих
384 байт винт успевал прочитать следующий
сектор в свой внутренний буфер и выдать
готовность. Скорости даже древнего 20-ме-
говника Prairietek 120 хватало на то,
чтобы линейно читать и играть восьмибит-
ную оцифровку. В это время на фоне кар-
тинки на экране крутилось некое грубое
подобие осциллографа (делался XOR нового
байта - появлялась чёрточка в верти-
кальном стобце, XOR старого - исчезала
поставленная ранее). Этакий цифровой маг-
нитофон :)
Впрочем, плеер этот с тем же успехом
мог играть и на ковокс.
Other articles: