Я бы предположил, что даже если вы хотите использовать аналоговые ступени фильтрации (они могут дать звуку такое тепло, которого трудно достичь с помощью других средств), возможно, будет хорошей идеей сгенерировать начальные осциллограммы в цифровой форме. Многие игровые автоматы Williams Electronics в 1980-х годах генерировали звук, используя плату с микропроцессором 6800, небольшим объемом оперативной памяти и ПЗУ и небольшим количеством операций ввода-вывода, включая ЦАП. Все звуковые эффекты были сгенерированы с использованием жестких программных циклов, которые генерировали сэмплы и передавали их в ЦАП. Поскольку процессор использовался только для генерации звука, для синхронизации можно было использовать скорость выполнения цикла.
На практике даже самые простые микроконтроллеры имеют некоторый ресурс таймера, который может быть полезен, если вы хотите иметь возможность изменять параметры звука во время воспроизведения звуков. Используя что-то вроде кода 6805, можно начать с написания процедуры опроса для каждого голоса; для скорости эти подпрограммы будут жить в оперативной памяти - что-то вроде:
poll1:
brclr TMR_CONTROL, TMR_READY, опрос; Ждите начала следующего тика
bclr TMR_CONTROL, TMR_READY
FRQ1L: lda #PATCH
PH1L: добавить #PATCH
sta PH1L + 1; Значение патча для LSB фазы
FRQ1M: lda #PATCH
PH1M: добавить #PATCH
sta PH1M + 1; Патч код
FRQ1H: lda #PATCH
PH1H: добавить #PATCH
sta PH1H + 1; Патч код
sta FETCH + 2; Патч LSB цели
FETCH: lda TABLE_BASE; 16-битный адрес
clr DAC_ENABLES
sta DAC_OUTPUT
lda # ENABLE_1
sta DAC_ENABLES
ртс
Затем можно было бы создать основной цикл, который бы неоднократно вызывал подпрограмму опроса для каждого голоса в последовательности и, между вызовами, выполнял любую другую логику, которую нужно было выполнить (например, проверяя необходимость обновления каких-либо параметров голоса). Используя этот подход, можно обновить достаточное количество голосов с высокой частотой дискретизации.
Хотя первоначальную генерацию волны можно выполнить полностью с использованием аналоговых схем, сложно иметь несколько независимых аналоговых генераторов, частотные характеристики которых абсолютно идентичны в пределах доли процента. Человеческое ухо очень чувствительно к изменениям высоты тона - гораздо больше, чем к изменениям амплитуды - поэтому все, что используется для генерации сигнала, должно быть очень последовательным. Использование простого микроконтроллера в качестве отправной точки - хороший способ получить такую согласованность, даже если затем он подает сгенерированный сигнал через аналоговые схемы формирования.