T1m писал(а):Можно узнать как вы реализовали полифонию на одной катушке?
В обзорчике полифонического апдейта есть немного инфы: http://tqfp.org/simple-tesla/mega-obnov ... esla-.html
Вкратце — каждая играющая в данный момент нота генерируется на стопке таймеров(до 6-ти нот одновременно), после чего импульсы прерывания с них смешиваются простым AND перед подачей на выход.
Проблема с таким подходом — без наличия тонны защит импульсы будут пересекаться друг с другом, создавая в итоге один импульс большей ширины чем положено, например 200 мкс вместо ожидаемых 120 мкс.
Благо, у SI уже имелся ограничитель выхода — те самые max frequency, max pulse width в настройках и т.д.
Но просто не давая прерывателю выдавать импульсы-убийцы под 200 мкс и куски высоких частот — довольно серьезно гробится качество звука.
Звук был спасен еще одной надстройкой, duty limit. Она во первых следит дабы заполнение выхода не превышело установленное(на DRSSTC нельзя подавать заполнение больше 0.1), а если превышает — ширина импульса динамически урезается дабы играющие ноты помещались в нужном диапазоне и проигрывались вместо того чтобы быть обрезанными.
Вот, как-то так.
Если кому интересно, сколько ушло на неспешное ковыряние полифонической прошивки от первого кривого прототипа и до официального обновления... То это число — 2 года.