pls_noise:@@"pls"用ノイズベースサイクル設定#MB:CONFIG {
pls_noise: clock=3993600: prescale=32: width=17,
}
パルス音源(@@"pls")には、2値ノイズモジュールも含まれており、仕組みはPSGノイズ音源と同様です。
パルス音源のノイズは、変位の維持時間が更新される間隔を、@nコマンドで変更することによって、ノイズの質感を変えることができます。
当設定では、変位維持時間間隔の基本単位を設定することが出来ます。
この設定は、全トラックへの初期設定となります。
当設定を使用しなかった場合の初期設定は次の通りです。
#MB:CONFIG {
pls_noise: clock=3993600: prescale=32: width=17,
}
この初期設定では、@nコマンドによる設定の音が、PC88モードとよく似た質感になります。
clock定義値には、仮想PSGのマスタークロックを数値で設定します。
少数以下の指定も受け付けます。
設定範囲は 1.0 〜 10000000.0(10MHz) です。
prescale定義値には、分周比を数値で指定します。マスタークロックを割る数です。
少数以下の指定も受け付けます。
設定範囲は 1.0 〜 65536.0 です。
width定義値には、ノイズ生成シフトレジスタのビット幅を選ぶインデックス値を指定します。
設定範囲は 0 〜 31 です。
変位維持時間間隔の基本単位は、clock÷prescale になります。
widthに指定するビット幅について。2値ノイズは、線形帰還シフトレジスタ(LFSR)を使って生成しています。(LFSRの詳しい説明はWikipedia参照)
V3MMLで使用しているビット幅は次の通りです。
static inline const int NOISE_REGTAP[MAX_NZTAP] = {
// 21098765432109876543210987654321
0b00000000000000000100000100000000, //width 0: XNOR from:15,9 (FC short 93 cycle,width:4)
0b00000000000000010010000000000000, //width 1: -
0b00000000000000010010000000000000, //width 2: -
0b00000000000000010010000000000000, //width 3: -
// 21098765432109876543210987654321
0b00000000000000010010000000000000, //width 4: -
0b00000000000000000000000000010100, //width 5: XNOR from:5,3 (31 cycle)
0b00000000000000000000000000110000, //width 6: XNOR from:6,5 (63 cycle)
0b00000000000000000000000001100000, //width 7: XNOR from:7,6 (127 cycle)
// 21098765432109876543210987654321
0b00000000000000000000000010111000, //width 8: XNOR from:8,6,5,4 (255 cycle)
0b00000000000000000000000100010000, //width 9: XNOR from:9,5 (511 cycle)
0b00000000000000000000001001000000, //width 10: XNOR from:10,7 (1023 cycle)
0b00000000000000000000010100000000, //width 11: XNOR from:11,9 (2047 cycle)
// 21098765432109876543210987654321
0b00000000000000000000100000101001, //width 12: XNOR from:12,6,4,1 (4095 cycle)
0b00000000000000000001000000001101, //width 13: XNOR from:13,4,3,1 (8191 cycle)
0b00000000000000000010000000010101, //width 14: XNOR from:14,5,3,1 (16383 cycle)
0b00000000000000000110000000000000, //width 15: XNOR from:15,14 (FC long 32767 cycle)
// 21098765432109876543210987654321
0b00000000000000001101000000001000, //width 16: XNOR from:16,15,13,4 (65535 cycle)
0b00000000000000010010000000000000, //width 17: XNOR from:17,14 (PSG 131071 cycle)
0b00000000000000100000010000000000, //width 18: XNOR from:18,11 (262143 cycle)
0b00000000000001000000000000100011, //width 19: XNOR from:19,6,2,1 (524287 cycle)
// 21098765432109876543210987654321
0b00000000000010010000000000000000, //width 20: XNOR from:20,17 (1048575 cycle)
0b00000000000101000000000000000000, //width 21: XNOR from:21,19 (2097151 cycle)
0b00000000001100000000000000000000, //width 22: XNOR from:22,21 (4194303 cycle)
0b00000000010000100000000000000000, //width 23: XNOR from:23,18 (8388607 cycle)
// 21098765432109876543210987654321
0b00000000111000010000000000000000, //width 24: XNOR from:24,23,22,17 (16777215 cycle)
0b00000001001000000000000000000000, //width 25: XNOR from:25,22 (33554431 cycle)
0b00000010000000000000000000100011, //width 26: XNOR from:26,6,2,1 (67108863 cycle)
0b00000100000000000000000000010011, //width 27: XNOR from:27,5,2,1 (134217727 cycle)
// 21098765432109876543210987654321
0b00001001000000000000000000000000, //width 28: XNOR from:28,25 (268435455 cycle)
0b00010100000000000000000000000000, //width 29: XNOR from:29,27 (536870911 cycle)
0b00100000000000000000000000101001, //width 30: XNOR from:30,6,4,1 (1073741823 cycle)
0b01001000000000000000000000000000, //width 31: XNOR from:31,28 (2147483647 cycle)
};
static inline const int NOISE_WIDTH[MAX_NZTAP] = {
4,17,17,17, 17, 5, 6, 7, 8, 9,10,11, 12,13,14,15,
16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31,
};
概ねインデックス値とビット幅は一致していますが、インデックス値0は特例で FCノイズのショートモードになっています。インデックス値1〜4は未使用扱 いです。