以下に、dAsmsにおけるDSPプログラムのコーディング方法を、比較的簡単な具体例に沿って解説します。
以下のプログラム例は、CD Audio等が入力可能な外部拡張入力 EXTS00、EXTS01をそれぞれLch、Rchの入力とし、Lch、Rch独立にディレイ(エコー)処理を行った結果をそれぞれ EFREG00、EFREG01 に出力しようとするものです。
ディレイへのセンドレベル | :EffSendLevelL/R |
ダイレクト信号のレベル | :DrctLevelL/R |
ディレイからのリターンレベル | :EffRtnLevelL/R |
ディレイ信号のフィードバックレベル | :FbL/R |
----------------------------------------------------- EffSendLevelL=%100 EffSendLevelR=%100 DrctLevelL=%50 DrctLevelR=%50 EffRtnLevelL=%75 EffRtnLevelR=%75 FbL=%50 FbR=%50 -----------------------------------------------------
C0L/R C1L/R C2L/R
C0L=0.40893 C0R=0.40893 C1L=0.40893 C1R=0.40893 C2L=0.18164 C2R=0.18164
waL/R raL/R
---------------------------------------------------------------- waL=ms0.0 raL=ms149.9 waR=ms150.0 raR=ms249.9 ----------------------------------------------------------------
raL raL+1
MEMS00 MEMS01
LDI MEMS00,MR[raL+DEC] LDI MEMS01,MR[raL+DEC+1]
-------------------------------------------------------------------------- @ TEMP01 * C2L + ( MEMS01 * C1L + ( MEMS00 * C0L + ) ) > TEMP00 --------------------------------------------------------------------------
-------------------------------------------------------------------------- @ TEMP00 * FbL + ( EXTS00 * EffSendLevelL + ) > MW[waL+DEC] --------------------------------------------------------------------------
-------------------------------------------------------------------------- @ EXTS00 * DrctLevelL + ( MEMS00 * EffRtnLevelL + ) > EFREG00 --------------------------------------------------------------------------
-------------------------------------------------------------------------- 'dAsms sample program. 'Function:L/R independent delay 'CD Lch Direct + Delayed -> EFREG00 'CD Rch Direct + Delayed -> EFREG01 #COEF 'Levels EffSendLevelL=%100 EffSendLevelR=%100 DrctLevelL=%50 DrctLevelR=%50 EffRtnLevelL=%75 EffRtnLevelR=%75 FbL=%50 FbR=%50 'FilterCoefs C0L=0.40893 C0R=0.40893 C1L=0.40893 C1R=0.40893 C2L=0.18164 C2R=0.18164 #ADRS waL=ms0.0 raL=ms149.9 waR=ms150.0 raR=ms249.9 #PROG 'Lch LDI MEMS00,MR[raL+DEC] LDI MEMS01,MR[raL+DEC+1] @ TEMP01 * C2L + ( MEMS01 * C1L + ( MEMS00 * C0L + ) ) > TEMP00 @ TEMP00 * FbL + ( EXTS00 * EffSendLevelL + ) > MW[waL+DEC] @ EXTS00 * DrctLevelL + ( MEMS00 * EffRtnLevelL + ) > EFREG00'Rch LDI MEMS02,MR[raR+DEC] LDI MEMS03,MR[raR+DEC+1] @ TEMP03 * C2R + ( MEMS03 * C1R + ( MEMS02 * C0R + ) ) > TEMP02 @ TEMP02 * FbR + ( EXTS01 * EffSendLevelR + ) > MW[waR+DEC] @ EXTS01 * DrctLevelR + ( MEMS02 * EffRtnLevelR + ) > EFREG01 #END --------------------------------------------------------------------------