MML reference: Delta PCM define block

定義(Define)

DPCM{
	nnumber,"filename",rate,mode(,volume)(,next)(,offset)(,size)
	note(Accidentals)octave,"filename",mode(,volume)(,next)(,offset)(,size)
}
@DPCM{
	nnumber,"filename",rate,mode(,volume)(,next)(,offset)(,size)
	note(Accidentals)octave,"filename",mode(,volume)(,next)(,offset)(,size)

引数(Inputs)

number

定義する⊿PCMの番号を0~254で指定してください。
⊿PCMの発音の際は、ノートナンバーの値を参照し、その番号の⊿PCMを発音します。

notenote number
o1c 0
o1c+1
o1d 2
o1d+3
o1e 4
o1f 5
o1f+6
o1g 7
o1g+8
o1a 9
o1a+10
o1b 11
o2c 12
・・・ ・・・

note

⊿PCMの波形を割り当てる音階を、音階で指定します。

a …
A, La, ラ
b …
H, Si, シ
c …
C, Do, ド
d …
D, Re, レ
e …
E, Mi, ミ
f …
F, Fa, ファ
g …
G, Sol, ソ

Accidentals

⊿PCMの波形を割り当てる音階に対する臨時記号です。省略可能です。

+ …
♯ Sharp
# …
♯ Sharp
- …
♭ Flat

octave

⊿PCMの波形を割り当てるオクターブです。1~8で指定してください。

filename

割り当てる⊿PCMの波形ファイル(*.dmc)を指定してください。

rate

発音するサンプリングレートです。

rateclocksample ratescale(*)
0 0x0D60 4.182 kHzo7c
1 0x0BE0 4.711 kHzo7d
2 0x0AA0 5.264 kHzo7e
3 0x0A00 5.594 kHzo7f
4 0x08F0 6.259 kHzo7g
5 0x07F0 7.047 kHzo7a
6 0x0710 7.920 kHzo7b
7 0x06B0 8.364 kHzo8c
8 0x05F0 9.421 kHzo8d
9 0x0500 11.188 kHzo8f
10 0x0470 12.606 kHzo8g
11 0x0400 13.984 kHzo8a
12 0x0350 16.877 kHzo9c
13 0x02A8 21.059 kHzo9e
14 0x0240 24.861 kHzo9g
15 0x01B0 33.148 kHzo10c

(*) サンプルレート÷2の音程換算。振幅が小さい時に発生するノイズはこの音程になります。)

mode

0 …
1 shot
1 …
loop
2 …
IRQ (発音終了時にnextで指定したノート番号の⊿PCMを発音します。)

volume

⊿PCMの初期ボリュームです。
0~127の範囲で指定した場合は、波形再生開始時に$4011番地に書く初期ボリュームとなります。
-1を指定した場合は、波形再生開始時に$4011番地に何も書きません。
省略した場合は、0となります。

next

発音終了時に次にならすノート番号です。
バンクに対応したbin(nsd_all.bin, nsd_all2.bin)でのみ対応しています。
modeが2の場合は、必ず指定してください。

offset

発音開始位置を指定の分だけずらします。
1で64[Byte](512[サンプル])ずれます。
省略した場合は、0となります。

size

発音サイズを指定します。
0を指定した場合はdmcファイルに合せたサイズで再生されます (offsetの指定がある場合、その分だけサイズを自動で小さくします)。
1で16[Byte](128[サンプル])に相当します。
省略した場合は、0となります。

内容(Contents)

指定の各音階に、⊿PCMを割り当てます。

注意(Notes)

⊿PCMを割り当てる場合は、 #OffsetPCMコマンドにて⊿PCMの波形データの配置アドレスを設定してください。
⊿PCMは、設定したアドレスから、0xFFFFのメモリ空間に配置されます。
若しくは、#Bankコマンドを記述しバンクに対応したbin(nsd_all.bin, nsd_all2.bin)を使用して下さい。

⊿PCMにてIRQを使用している場合、&(スラー)ではなく、^(タイ)を使ってください。
&(スラー)を利用して音を繋げた場合、繋げた先のノートナンバーに⊿PCMの発音中ポインタが設定され、 次のIRQではそのノートナンバーの次に示される⊿PCMが再生されます。

また、多くのNSFプレイヤーは、IRQに対応しておりません。
以下、2014年 1月 3日時点での対応状況です。

IRQ対応プレイヤ

IRQ非対応プレイヤ

例(Sample)

#OffsetPCM	$C000

DPCM{
	b1,	"../dmc/bd.dmc",14,0,64
	c2,	"../dmc/bd.dmc",15,0,64
	d2,	"../dmc/sd.dmc",15,0,64
	e2,	"../dmc/sd.dmc",14,0,64
	f+2,	"../dmc/hhc.dmc",15,0,64
	a+2,	"../dmc/hho.dmc",15,0,64
	c+3,	"../dmc/cymbal.dmc",15,0,64

	f2,	"../dmc/tom.dmc",10,0,64
	g2,	"../dmc/tom.dmc",11,0,64
	a2,	"../dmc/tom.dmc",12,0,64
	b2,	"../dmc/tom.dmc",13,0,64
	c3,	"../dmc/tom.dmc",14,0,64
	d3,	"../dmc/tom.dmc",15,0,64
}