文法編1-18 サウンド


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)に入れる値は次式によって計算できます。
 
fclock1.99675〔MHz〕
fT出力する周波数〔Hz〕
FT10FT A(R0)の値(10進)
CT10CT A(R1)の値(10進)

【例】出力したい周波数が1KHzの場合、
 
 
※R0にはFT10=125(10進)、R1にはCT10=0(10進)を設定します。
 チャンネルB、Cについても同様に計算します。

(2)ノイズ周波数の設定方法
 ノイズ周波数設定レジスタR6に入れる値は次式によって計算できます。
 
fclock1.99675〔MHz〕
fN出力したいノイズ周波数〔Hz〕
NP10NP(R6)に設定する値(10進)

【例】出力したいノイズ周波数が20KHzの場合、
 

※R6にはNP10=6(10進)を設定します。

(3)チャンネル設定の方法
 チャンネル設定レジスタにおいて、使用したいチャンネルのビットのみを0にします。
B7B6B5B4B3B2B1B0
~IN/OUT~NOISE~TONE
IOBIOACBACBA

【例】チャンネルAのTONEとNOISEのみを使う場合、
B7B6B5B4B3B2B1B0
11110110=&HF6
 をR7に設定します。

(4)チャンネル音量の設定方法
 音量設定では、大きさが一定のモードと、変化するモード(エンベロープモード)を選ぶことができます。音量が一定のときは、R8(チャンネルAの場合)の下位4ビットに0から15(10進)を入れることによって設定され、0のときに無音になります。
 音量が時間的に変化するエンベロープモードはR8の4ビット目を1にすることにより設定できます。この場合どのような形状で振幅を増加または減衰させるのか、またその時間がどれほどなのかを指定しなければなりません。

(5)エンベロープ周期の設定方法
 エンベロープ周期(R11、R12)は次式によって計算できます。
 
fclock1.99675〔MHz〕
fE音が増加または減衰する周波数〔Hz〕
FT10FT(R11)に設定する値(10進)
CT10CT(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:エンベロープ周期