Таблично-волновой синтез.
Код:
ORG 32768
sin_table:
DB 8,9,11,12,13,14,14,15,15,14,14,13,12,11,9,8
DB 7,5,4,3,2,1,1,0,0,1,1,2,3,4,5,7
LD HL, sin_table
LD BC, 0xFFFD
; Инициализация микширования
LD A, 7
OUT (C), A
LD BC, 0xBFFD
LD A, 0xFF
OUT (C), A
main_loop:
; Установка громкости
LD BC, 0xFFFD
LD A, 8
OUT (C), A
LD BC, 0xBFFD
LD A, (HL)
OUT (C), A
; Обновление индекса
INC HL
LD A, L
AND 31
OR sin_table & 255
LD L, A
LD A, H
AND sin_table >> 8
LD H, A
; 16-битная задержка (BC = 1000)
LD BC, 1000
delay: DEC BC
LD A, B
OR C
JR NZ, delay
JR main_loop
Что тут не так?
Динамик будто после каждого кванта таблицы становится на своё исходное нулевое состояние. Нужен какой-то сигнал строба, чтоб громкость была на заданном значении до следующей выборки?
- - - Добавлено - - -
Также интересует, каким макаром можно реализовать плавное затухание амплитуды.
Чтоб значение таблицы при определённой итерации уменьшалось на одно значение.
Своего родна недо-ADSR.