1−18 サウンド
PC-6601では、専用のサウンドLSIを使って3重和音+1ノイズの演奏が可能です。音量は、16段階に、音の長さは64段階に設定できます。音域は8オクターブまで表現できます。その他に休符、テンポ、音の波形などを指定することもできます。
1−18−1 音楽を発声させる。PLAY文
文字列を与えることによって音楽を演奏することができます。
ボイス文字列は音階を表す文字(A〜G)の他、次の文字と数字により構成されます。
文字 | 意味 |
Mx | エンペロープ周期の設定(1≦x≦65535) |
Sx | エンペロープ形状の設定(0≦x≦15) |
Vx | 音量の設定(0≦x≦15) |
Lx | 長さの設定(1≦x≦64) |
Ox | オクターブの設定(1≦x≦8) |
Tx | テンポの設定(32≦x≦255) |
Rx | 休符の設定(1≦x≦64) |
+ | 音を半音上げる |
- | 音を半音下げる |
テンポ(T)と長さ(L)は、その積(T×L)が9750を超えないように設定してください。(ただし、32≦T≦255、1≦L≦64)
【例】play "cdefgab"
例を実行すると、ドレミファソラシドと聞こえてきます。
1−18−2 サウンドLSIに直接命令する。SOUND文
サウンドLSIにはR0〜R15までのレジスタが有り、それを指定することによって、サウンドLSIを直接使用することができます。
|
ビット |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
レジスタ |
|
|
|
|
|
|
|
|
R0 |
チャンネルA周波数 |
8BIT FT A |
R1 |
|
4BIT CT A |
R2 |
チャンネルB周波数 |
8BIT FT B |
R3 |
|
4BIT CT B |
R4 |
チャンネルC周波数 |
8BIT FT C |
R5 |
|
4BIT CT C |
R6 |
ノイズ周波数 |
|
5BIT NP |
R7 |
チャンネル設定 |
~IN/OUT |
~NOISE |
~TONE |
IOB |
IOA |
C |
B |
A |
C |
B |
A |
R8 |
チャンネルA音量 |
|
M |
L3 |
L2 |
L1 |
L0 |
R9 |
チャンネルB音量 |
|
M |
L3 |
L2 |
L1 |
L0 |
R10 |
チャンネルC音量 |
|
M |
L3 |
L2 |
L1 |
L0 |
R11 |
エンベローブ周期 |
8BIT FT |
R12 |
8BIT CT |
R13 |
エンベローブ形状 |
|
E3 |
E2 |
E1 |
E0 |
R14 |
I/Oポート Aデータ |
8BITパラレルI/OポートA |
R15 |
I/Oポート Bデータ |
8BITパラレルI/OポートB |
レジスタを指定するためには以下の式を使用します。
(1)周波数の設定方法
周波数設定レジスタR0、R1(チャンネルA)に入れる値は次式によって計算できます。
fclock | : | 1.99675〔MHz〕 |
fT | : | 出力する周波数〔Hz〕 |
FT10 | : | FT A(R0)の値(10進) |
CT10 | : | CT A(R1)の値(10進) |
【例】出力したい周波数が1KHzの場合、
※R0にはFT10=125(10進)、R1にはCT10=0(10進)を設定します。
チャンネルB、Cについても同様に計算します。
(2)ノイズ周波数の設定方法
ノイズ周波数設定レジスタR6に入れる値は次式によって計算できます。
fclock | : | 1.99675〔MHz〕 |
fN | : | 出力したいノイズ周波数〔Hz〕 |
NP10 | : | NP(R6)に設定する値(10進) |
【例】出力したいノイズ周波数が20KHzの場合、
※R6にはNP10=6(10進)を設定します。
(3)チャンネル設定の方法
チャンネル設定レジスタにおいて、使用したいチャンネルのビットのみを0にします。
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
~IN/OUT | ~NOISE | ~TONE |
IOB | IOA | C | B | A | C | B | A |
【例】チャンネルAのTONEとNOISEのみを使う場合、
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | =&HF6 |
をR7に設定します。
(4)チャンネル音量の設定方法
音量設定では、大きさが一定のモードと、変化するモード(エンベロープモード)を選ぶことができます。音量が一定のときは、R8(チャンネルAの場合)の下位4ビットに0から15(10進)を入れることによって設定され、0のときに無音になります。
音量が時間的に変化するエンベロープモードはR8の4ビット目を1にすることにより設定できます。この場合どのような形状で振幅を増加または減衰させるのか、またその時間がどれほどなのかを指定しなければなりません。
(5)エンベロープ周期の設定方法
エンベロープ周期(R11、R12)は次式によって計算できます。
fclock | : | 1.99675〔MHz〕 |
fE | : | 音が増加または減衰する周波数〔Hz〕 |
FT10 | : | FT(R11)に設定する値(10進) |
CT10 | : | CT(R12)に設定する値(10進) |
【例】音が減衰してゼロになるまでの時間が2秒の場合、周波数は1/2ですから
※R11にはFT10=240(10進)。R12にはCT10=60(10進)を設定します。
(6)エンベロープ形状の選択
エンベロープ形状レジスタR13のE0からE3の値より形状を設定することができます。
E0からE3の値がどのような波形に対応しているのかを下図に示します。なお、図中の×は意味をもちません。0でも1でもかまいません。
E3 |
E2 |
E1 |
E0 |
|
0 |
0 |
× |
× |
|
0 |
1 |
× |
× |
|
1 |
0 |
0 |
0 |
|
1 |
0 |
0 |
1 |
|
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
1 |
|
1 |
1 |
0 |
0 |
|
1 |
1 |
0 |
1 |
|
1 |
1 |
1 |
0 |
|
1 |
1 |
1 |
1 |
|
|
EP10:エンベロープ周期 |
|