|
Born Dead
#09
30 мая 1999 |
|
Coding - Проигрыватель музыкальных сэмплов: 101 градация громкости.

╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
╠╬╣║╞╪╡█████████████╡╪╞║╣╬╠ CODING ╠╬╣║╞╪╡█████████████╡╪╞║╣╬╠
╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟╟
(c) UnBEL!EVER^Speed co.^XTM
Сегодня, продолжая массированную пропаганду MCC метода, мы
публикуем новый вариант проигрывателя цифровых самплов, более
простой для понимания и удобный в работе. Дело в том, что в
погоне за минимизацией числа тактов на байт MONSTER использовал
несколько нестандартный прием контроля окончания проигрывания
звука. Предварительно нужно было преобразовать сампл с помощью
специальной процедурки. Однако, это давало ощутимую прибавку во
времени - исходник, опубликованный в приложении к BORN DEAD'у #5
мог легко воспроизводить звук с частотой вплоть до 26KHz.
Однако, как показала практика, такая высокая частота
воспроизведения практически никогда не нужна, а хитрый способ
контроля конца сампла лишает проигрыватель определенной
гибкости. Вот поэтому и был сделан другой player, более
медленный (верхний предел всего 24KHz), но удобный в
использовании. Теперь, как обычно, перед входом в проигрыватель
задается длина и стартовый адрес сампла.
Но не только player подвергся изменениям! Благодаря новым
данным, полученным о музыкальном процессоре из литературы,
удалось рассчитать действительно идеальную MCC таблицу, которая
теперь имеет 108 уровней громокости. Да и общая громкость
воспроизведения звука по сравнению со старой таблицей
увеличилась. В этом исходнике таблица оформлена как текст
ассемблера (DEFB), что несколько упрощает жизнь - не надо делать
incbin'ов! Хотя, кому как нравится....
Для облегчения конечного использования проигрывателя были
рассчитаны задержки, которые необходимо вставить в основной цикл
для точного воспроизведения оцифровок на стандартных частотах
8,11,16KHz. Задержки были рассчитаны ALK'ом на PENTAGON'е по
достаточно интересному принципу: частота воспроизведения звука
кратна строчной развертке монитора. Возможно, эти задержки не
идеальны и опытный математик сможет рассчитать что-то поточнее,
но по крайней мере эти цифры больше соответствуют правде, чем
подбор скорости воспроизведения "на слух".
И еще, на некоторых совершенно глючных паталогах не срабатывает
обращение к портам сопроцессора по схеме OUT (253),A. В таких
тяжелых случаях (когда стандартный player молчит) рекомендуется
использовать полную адресацию портов сопроцессора, _НО_
увлекаться этим (использовать по умолчанию в любых случаях) ни в
коем случае нельзя. При использовании полной адресации
увеличивается время между выдачей основного и корректирующего
сигнала, а следовательно, ставится под сомнение сама концепция
MCC метода.
Ну и конечно, при использовании метода в конечном продукте нужно
обязательно дать возможность пользователю выбрать центральный
канал сопроцессора (тот, куда будет выдаваться корректирующий
сигнал), то есть раскладку стерео на данной машине: ABC, ACB или
BAC (и такое встречается)! Иначе, при неверном указании
централього канала MCC метод просто теряет смысл, а звук
получится совершенно ужасным :(
;Samples Player with MCC_metod (C)Monster/Sage Group
;24305.556 Hz Discretisation Frequency
;Freeware
MCC_TBL EQU #6200 ;#200
SAMPLE EQU #8000 ;Sample Adress
SIZE EQU #4000 ;Sample Size
ORG #6400
DI
LD BC,#FFFD ;Init AY
LD A,#07
OUT (C),A
LD A,B
LD B,#BF
OUT (C),A
LD HL,SAMPLE ;Set Sample Adress
LD BC,SIZE ;Set Size Sample
LD D,'MCC_TBL+1
EXX
LD BC,#FFFD
LD DE,#080A ;Set Right_Left AY channel
LD H,#09 ;Set Center AY cnannel
EXX
CALL MCC_PLY
EI
RET
MCC_PLY LD E,(HL) ;E =8bit Sample Data
LD A,(DE) ;A =Correction Data from table
EX AF,AF'
DEC D
LD A,(DE) ;A'=Main Data
INC D
EXX
OUT (C),D
OUT (253),A ;Set Main Data in Right_Left
OUT (C),E ;AY channels
OUT (253),A
EX AF,AF'
OUT (C),H
OUT (253),A ;Set Correction Data in Center
EXX ;AY cannels
INC HL ;next sample data
DEC BC ;dec size sample
;--------------------------------------------------------------
; LD A,4 ;80 tackts delay
;DELAY DEC A ;to use with 16khz samples
; JR NZ,DELAY
; OR 0
; OR 0
;--------------------------------------------------------------
; LD A,11 ;182 tackts delay
;DELAY DEC A ;to use with 11KHz samples
; JR NZ,DELAY
; NOP
;--------------------------------------------------------------
; LD A,18 ;304 tackts delay
;DELAY DEC A ;to use with 8KHz samples
; JR NZ,DELAY
; OR 0
; OR 0
;--------------------------------------------------------------
LD A,B ;All code takes
OR C ; only
JP NZ,MCC_PLY ;144 tackt per Sample Byte
RET
ORG MCC_TBL
;MCC Table with 108 syntesed levels for YM2149F
;and 52% mixed center channel
DEFB #A0,#A1,#A1,#A2,#A3,#A3,#A4,#A4,#A4,#A5,#A5,#A5
DEFB #A6,#A6,#A6,#A6,#A6,#A7,#A7,#A7,#A7,#A7,#A7,#A7
DEFB #A8,#A8,#A8,#A8,#A8,#A8,#A8,#A8,#A9,#A9,#A9,#A9
DEFB #A9,#A9,#A9,#A9,#A9,#A9,#A9,#A9,#A9,#AA,#AA,#AA
DEFB #AA,#AA,#AA,#AA,#AA,#AA,#AA,#AA,#AA,#AA,#AA,#AA
DEFB #AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB
DEFB #AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB
DEFB #AB,#AB,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC
DEFB #AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC
DEFB #AC,#AC,#AC,#AC,#AC,#AC,#AC,#AC,#AD,#AD,#AD,#AD
DEFB #AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD
DEFB #AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD
DEFB #AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD
DEFB #AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AD,#AE,#AE,#AE
DEFB #AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE
DEFB #AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE
DEFB #AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE
DEFB #AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE,#AE
DEFB #AE,#AE,#AE,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF
DEFB #AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF
DEFB #AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF,#AF
DEFB #AF,#AF,#AF,#AF,#A0,#A0,#A1,#A1,#A0,#A1,#A0,#A1
DEFB #A3,#A1,#A2,#A3,#A0,#A1,#A2,#A3,#A4,#A0,#A1,#A3
DEFB #A4,#A5,#A5,#A6,#A0,#A1,#A2,#A3,#A4,#A5,#A6,#A6
DEFB #A0,#A1,#A2,#A3,#A4,#A5,#A6,#A6,#A6,#A7,#A7,#A7
DEFB #A8,#A0,#A0,#A1,#A2,#A3,#A4,#A5,#A6,#A6,#A6,#A7
DEFB #A7,#A7,#A8,#A8,#A0,#A0,#A1,#A2,#A3,#A4,#A5,#A5
DEFB #A6,#A6,#A7,#A7,#A7,#A8,#A8,#A8,#A8,#A9,#A9,#A9
DEFB #A9,#A9,#A9,#AA,#AA,#AA,#A0,#A0,#A0,#A1,#A2,#A3
DEFB #A4,#A5,#A6,#A6,#A6,#A7,#A7,#A7,#A8,#A8,#A8,#A8
DEFB #A9,#A9,#A9,#A9,#A9,#AA,#AA,#AA,#AA,#AA,#AA,#AA
DEFB #A0,#A0,#A0,#A1,#A2,#A3,#A4,#A5,#A5,#A6,#A6,#A7
DEFB #A7,#A7,#A8,#A8,#A8,#A8,#A9,#A9,#A9,#A9,#A9,#A9
DEFB #AA,#AA,#AA,#AA,#AA,#AA,#AA,#AB,#AB,#AB,#AB,#AB
DEFB #AB,#AB,#AB,#AB,#AB,#AB,#AC,#AC,#AC,#AC,#AC,#AC
DEFB #AC,#A0,#A0,#A0,#A0,#A1,#A2,#A3,#A4,#A5,#A5,#A6
DEFB #A6,#A7,#A7,#A7,#A8,#A8,#A8,#A8,#A9,#A9,#A9,#A9
DEFB #A9,#A9,#AA,#AA,#AA,#AA,#AA,#AA,#AA,#AB,#AB,#AB
DEFB #AB,#AB,#AB,#AB,#AB,#AB,#AB,#AB,#AC,#AC,#AC,#AC
DEFB #AC,#AC,#AC,#AC,#AC,#AC,#AC,#A0,#A0,#A0,#A0,#A0
DEFB #A1,#A2,#A3,#A4,#A5,#A5,#A6,#A6,#A7,#A7,#A7,#A8
DEFB #A8,#A8,#A8,#A9,#A9,#A9,#A9,#A9,#A9,#AA,#AA,#AA
DEFB #AA,#AA,#AA,#AA,#AA,#AB,#AB,#AB
ORG #6400
Другие статьи номера:
Похожие статьи:
В этот день... 17 ноября