N88-BASIC(86) PLAY命令
PLAY
- 機能
- 音楽演奏を行う
- 書式
- PLAY [#モード番号,][文字列1][,文字列2][,文字列3][,文字列4][,文字列5][,文字列6]
- 文例
- PLAY #0,"L4O5CDEFG","L4O3GAB>CD"
〈文字列1〜6〉で指定するMML(ミュージックマクロランゲージ)の指示に従って,音楽を演奏します.
〈文字列1〜3〉はチャンネル1〜3に対応するFM音源,〈文字列4〜6〉はチャンネル4〜6に対応するSSG音源で,合わせて同時に6音までの同時演奏が可能です.
#〈モード番号〉はチャンネル3のFM音源に対しどのようなモードで演奏するかを指定するものです.指定する値とモードの関係は次のとおりです.
- #0 : 楽音モード(通常の演奏に適する)
- #1 : 効果音モード(効果音に適する)
- #2 : CSMモード(複合正弦波合成モード)
〈文字列1〜6〉 にはそれぞれ, MMLのコマンドを文字列で指定します.MMLには次のようなコマンドがあります.
Cx, Dx, Ex, Fx, Gx, Ax, Bx
音程をアルファベットで指定します.音長の指定は,各音程のあとのx(音長数字)で行います.数字の意味はLxコマンド(後述)と同じで, 4は4分音符を表します.このコマンドで音長の指定を省略した場合は, Lxコマンドにより指定された音長をとります.
Mx
SSG 音源(チャンネル4〜6) のエンベロープ周期を設定します. xの値は1〜65535 の範囲になくてはいけません.初期値は"M255"です.
xに指定する値は,発生しようとするエンベロープ周期に対して,次の式により求められます.
x=667*T/256 (T:エンベロープ周期(ms), x:設定値)
Sx
SSG 音源(チャンネル4〜6) のエンベロープ形状を指定します. x の値は1〜15 です.xの値とエンベロープ形状の対応は次の図のとおりです.初期値は"s1"です.
x | エンベロープ形状 | x | エンベロープ形状 |
---|---|---|---|
0,1,2,3,9 | 11 | ||
4,5,6,7,15 | 12 | ||
8 | 13 | ||
10 | 14 |
SSG音源には固定音量出力モードとMxコマンド, Sxコマンドで指定される可変出力モードがありますが,各チャンネルを可変出力モードにするのはSxコマンドです.Mxコマンドは周期を設定するだけでモードは変えません.また,固定音量出力モードにするのは,後述するVxコマンドです.
Vx
各チャンネルに対して大まかに音量を設定します.
"V0"が最小で"V15"が最大音量です.SSG音源に対する初期値は"V7"です.FM音源については各音色ごとに最も適した音量が設定されるので初期値は存在しません.また,FM音源については音量の大小により音色も多少変化します. @xコマンドで音色番号を切り換えると, @Vxコマンド, Vxコマンドによる設定は無効になります.
Lx
このコマンドで音の長さを指定すると, Cx, Dx, Ex, Fx, Gx, Ax, Bxコマンドで音長を省略したときには,すべてこの長さになります.
x は1〜64 の範囲で,1は全音符, 8は8分音符といったように指定します.このコマンドによる設定を省略した場合の初期値は,"L4" (4分音符)です.
Qx
音長により定められる長さ(ステップタイム)と,その聞で実際に音を出している長さ(ゲートタイム)の比を設定します.xの値は1〜8 の範囲で,ゲートタイム/ステップタイムの比はx/8で求められます.初期値は"Q7"です.
Ox
オクターブ値を設定します.xの値は1〜8で,数値が大きいほどオクターブは高くなります.初期値は"O4"です.
<,>
現在のオクターブを1オクターブだけ上げ(>), 下げ(<)します.
Kx
xで指定された高さの音を発生します. x (キ一番号)と実際に発生される音程の対応は 次のとおりです.ただし, FM音源においては"O9C"は"O1C"と同じになります.
音程/オクターブ | O1 | O2 | O3 | O4 | O5 | O6 | O7 | O8 | O9 |
---|---|---|---|---|---|---|---|---|---|
C | 0 | 12 | 24 | 36 | 48 | 60 | 72 | 84 | 96 |
C# | 1 | 13 | 25 | 37 | 49 | 61 | 73 | 85 | |
D | 2 | 14 | 26 | 38 | 50 | 62 | 74 | 86 | |
D# | 3 | 15 | 27 | 39 | 51 | 63 | 75 | 87 | |
E | 4 | 16 | 28 | 40 | 52 | 64 | 76 | 88 | |
F | 5 | 17 | 29 | 41 | 53 | 65 | 77 | 89 | |
F# | 6 | 18 | 30 | 42 | 54 | 66 | 78 | 90 | |
G | 7 | 19 | 31 | 43 | 55 | 67 | 79 | 91 | |
G# | 8 | 20 | 32 | 44 | 56 | 68 | 80 | 92 | |
A | 9 | 21 | 33 | 45 | 57 | 69 | 81 | 93 | |
A# | 10 | 22 | 34 | 46 | 58 | 70 | 82 | 94 | |
B | 11 | 23 | 35 | 47 | 59 | 71 | 83 | 95 |
Tx
演奏するテンポを指定します.どのチャンネルでテンポを指定しでもかまいません.ただし,全チャンネルを通してテンポはただ1つしか指定できないので,最後に指定したチャンネルのテンポが有効となります.xの範囲は32〜255までで, "T120"が初期値です. T120は"♪=120"に相当します.
Rx, Px
休符です.xの値は1〜64で,音長を指定します.1が全休符, 4が四分休符といったように指定します.
+(#), -
いずれも音程(Cx,Dx, Ex, Fx, Gx, Ax, Bx)のあとにつけて半音階を表します."+"または"#"で半音上げ,"-"で半音下げます.
. (ピリオド)
音程(Cx,Dx, Ex, Fx, Gx, Ax, Bx)に指定する音長数字のあとにつけることによって,符点音符を表します.休符(Rx,Px)のあとにつけて符点休符とすることもできます.
^x
前後の音長をつないで1つにします. x の値は1〜64 で,音長を指定します.たとえば,"C8^8"のように表現される音は"C4"と等しくなります.
{ … } x
連符を表します.xで指定された音長を{ }内の音符の個数で等分します.ただし,{ }内で音長を指定した場合は正しい連符となりません.また,連符の中に連符や間接指定を含めることもできません.
@x
xで示される音色番号の音に音色を切り換えます.
x の範囲は0〜81 です.このコマンドは, FM 音源チャンネルについてのみ有効です.音色番号と音色の対応は,初期状態では次のようになっています.音色番号の初期値は"@0"です.
音色番号 | 音色名 | 説明 | 備考 |
---|---|---|---|
0 | DEFAULT | (HARPSIC-11番と同じ) | |
1 | BRASS2 | 低域の金管楽器 | |
2 | STRING2 | 高域の弦楽器 | |
3 | EPIANO3 | 丸みを持ったエレクトリックピアノ | |
4 | EBASS1 | シンセサイザベース | |
5 | EORGAN1 | 堅めのエレクトリックオルガン | |
6 | PORGAN1 | 低域のパイプオルガン | |
7 | FLUTE | フルート | O5が最適です |
8 | OBOE | オーボエ | |
9 | CLARINET | クラリネット | |
10 | VIBRAPHN | ビブラフォン | |
11 | HARPSIC | ハープシコード | |
12 | BELL | ベル | |
13 | PIANO | アコースティックピアノ | |
14 | MUSHI | 虫の鳴き声 | |
15 | DESCENT | 下降するような効果音 | |
16 | UFO | UFOが飛んでいるような効果音 | |
17 | GRANPRI | レーシングカーが走って行くような効果音 | |
18 | LASER1 | SF的な効果音1 | |
19 | LASER2 | SF的な効果音2 | |
20 | SINWAVE | 正弦波 | |
21 | BRASS1 | 高域の金管楽器 | |
22 | BRASS2 | 低域の金管楽器 | |
23 | TRUMPET | トランペット | O5が最適です |
24 | STRING1 | 低域の弦楽器 | |
25 | STRING2 | 高域の弦楽器 | |
26 | EPIANO1 | エレクトリックピアノ | |
27 | EPIANO2 | 堅めのエレクトリックピアノ | |
28 | EPIANO3 | 丸みを持ったエレクトリックピアノ | |
29 | GUITAR | エレキギター | O5が最適です |
30 | EBASS1 | シンセサイザベース | |
31 | EBASS2 | ウッドベースに近い音 | O3が最適です |
32 | EORGAN1 | 堅めのエレクトリックオルガン | |
33 | EORGAN2 | やや丸いエレクトリックオルガン | |
34 | PORGAN1 | 低域のパイプオルガン | |
35 | PORGAN2 | 高域のパイプオルガン | |
36 | FLUTE | フルート | O5が最適です |
37 | PICCOLO | ピッコロ | |
38 | OBOE | オーボエ | |
39 | CLARINET | クラリネット | |
40 | GROCKEN | グロッケン | |
41 | VIBRAPHN | ビブラフォン | |
42 | XYLOPHN | シロフォン | |
43 | KOTO | 琴 | |
44 | ZITAR | チター | |
45 | CLAVINET | クラビネット | |
46 | HARPSIC | ハープシコード | |
47 | BELL | ベル | |
48 | HARP | ハープ | O5が最適です |
49 | BELL/BRASS | ベルと金管楽器のユニゾン | |
50 | HARMONICA | ハーモニカ | |
51 | STEELDRUM | スチールドラム | |
52 | TIMPANI | ティンパニー | O3が最適です |
53 | TRAIN | 汽笛の音 | |
54 | AMBULANCE | 救急車の音 | 長めの音が適します |
55 | TWEET | 小鳥の声 | O6, Q4が最適です |
56 | RAIN DROP | 雨だれの音 | 長めの音が適します |
57 | HORN | ホルン | |
58 | SNARE DRUM | スネアドラム | |
59 | COW BELL | カウベル | |
60 | PERC1 | バネのはじけるような音 | |
61 | PERC2 | 水の入ったグラスをはじくような音 | O5が最適です |
62 | PERC3 | ウインドチャイムのような音 | O6が最適です |
63 | MUSIC BOX | オルゴールのような音 | |
64 | CELLO | チェロ | |
65 | LOW BRASS | チューバのような低域の金管楽器 | |
66 | WW ENSMBL | 木管楽器のアンサンブル | |
67 | AC GUITAR | アコースティックギター | |
68 | FLUTE/HARP | フルートとハープのユニゾン | |
69 | FUNK PLUC | 打弦楽器の音 | |
70 | FUNK BASS | ファンキーなベースの音 | |
71 | SYN LEAD | メロディーライン向けのリードに適した音 | |
72 | METAL CLES | 金属的な効果音1 | O3が最適です |
73 | STAIN | 金属的な効果音2 | O3が最適です |
74 | CUBIN GLASS | 氷がグラスの中を転がるような音 | O5が最適です |
75 | HUMAN | 人の声のような音 | |
76 | WOOD BASS | ウッドベース | O3が最適です |
77 | CHIMES | チャイム | O5が最適です |
78 | SPACY | 機械的な口笛の音 | O5が最適です |
79 | OBOE/BCLAR | オーボエとバスクラリネットのユニゾン | |
80 | OLD STRING | 古いレコードのバイオリンのような音 | |
81 | STEEL'S CRY | 金属的な泣き声のような音 |
備考の欄に特に記入のないものは,どのような音域でもよいか,またはデフォルトが最も適していることを示します.
Yr, d
シンセサイザLSIのレジスタに直接値を設定します. VOICE REGと同じ機能を行うものです.
r はレジスタ番号で0〜178, d はレジスタ内容で0〜255の範囲です.定義されていないレジスタに対するこのコマンドの動作の保証はありません.また,サウンド制御命令がハードウェアの制御のために使用しているレジスタについて書き込みを行った場合も,動作の保証はありませんので注意してください.
@Vx
FM音源に対する音量を細かく設定します.
x は0〜127 の範囲で, 0が最小音量, 127で最大音量となります.
@Wx
xで指定された長さだけ何もしないで待ちます.x は1〜64 の範囲で, 1は全音符, 8は8分音符といったように指定します.
@WxコマンドはYr,dコマンドなどで直接音を発生させる場合に有効です(Rx,PXコマンドでは, -s.発音を停止させてしまいますので音がとぎれてしまいます).普通の音符(Cx,Dx, Ex, Fx, Gx, Ax, Bx)のあとに@Wxがきた場合は, Rx, PXコマンドと同等です.
_x
x移調を指示します. xは音程で, A, B, C…のように指定します.xによって示される音程を, Cの音とみなして以降のMMLを移調します.各チャンネルごとに独立して指定できます.ただし, Kxコマンドによる指定は移調しません.
移調は次の規則により行われます.
- 音程(A,B, C, D…)をキ一番号(0〜96) に直します.
- その値に,次表に示すようなベース値を加えて対応するキ一番号の音を発生します.
指定調 | Gb | G | Ab | A | Bb | B | C | C# | D | D# | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|
ベース値 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 |
たとえば, PLAY "_DDEFG"と指定した場合,実際に発生される音は, PLAY "EF#GA"と等しくなります.
!
LFO効果(ビブラート, トレモロ)を加えます.
音色番号指定直後や, VOICE LFO実行直後は, LFO効果が自動的に加えられています.ただし,音色データの値によって, LFO効果がかからない場合があります.
*
!コマンドの逆で, LFO効果を切ります.
Zp,v
指定チャンネルの音色パラメータの内容を設定します.
pはパラメータ番号で, 0〜49 の範囲です.また, vはパラメータの内容で0〜16383 までの値です.Pのパラメータ番号は, VOICEやVOICE COPYにおける音色用配列の添字に,次のように対応します.
p=(第1添字)+(第2添字)*5
たとえば,音色用配列(3,1) に対応するパラメータ番号は,次のようになります.
3+1*5=8
vの値については,各音色パラメータの有効範囲外の値を設定しようとした場合,動作は保証されません.また,負の値は8ビットの符号付数値に直して指定してください.たとえば, -5を指定したいときは,次のように256を加えた値を指定します.
256+(-5)=251
MF, MB
PLAYの演奏形態を指定します.
"MF"を指定すると, PLAYによる演奏が終了してから次の命令の実行へ移ります.これを"フォアグラウンド指定"といいます.初期状態は"MF"になっています.
"MB"を指定すると, PLAYの音楽情報をサウンドバッファに格納してすぐに次の命令に移ります.これを"バックグラウンド指定"といいます."MF","MB"ともに各チャンネルごとに指定できますが, "MF"で指定されたチャンネルと"MB"で指定されたチャンネルが同時にあった場合, "MF"指定のチャンネルが終了するまで次の命令へは移れません."MB"が指定された場合であっても,次の条件が起こると演奏は中断されます.
- STOPキーまたはSTOPの実行
- PLAY ALLOC, ERRORの実行
- エラーの発生による中断
MMLの間接指定
MMLの一部を文字変数や数値変数で置き換えることも可能です.このことを間接指定といいます.間接指定には,次のものがあります.
- 数値の置き換え
"L=A;"のように"="+(変数名)+";" で表します.ただし,変数名は配列の要素であったり型宣言文字("!""や"%"など)がついていてはいけません. - 文字列の置き換え
"X=A$;"のように"X="+(文字変数名)+";"で表します.ただし,変数名は配列の要素であってはなりません.
注意:
PLAYを使用する際には,次のことに注意してください.
- PLAYを実行する前には,必ずPLAY ALLOCを実行して,サウンドバッファを各チャンネルのために用意しておかなければなりません.
- エラー発生時には音色は自動的に0番に設定されます.
- PLAYにより演奏される音長は他の処理などの影響により若干長くなることがあります.
- MBによる演奏時, BASICプログラムの実行は若干遅くなります.
- MFによる演奏時に連続してPLAYを実行させた場合,命令解析の時間のためにMMLの最後の音長が長めになったり,演奏が息つぎをしているように聞こえることがあります.
- 音量が大きすぎると音がひずむおそれがあります.また, 2チャンネル以上を使って演奏を行う場合, 1チャンネルで演奏するときに比べ音量が増し,音がひずむ場合があります.このようなときは, @Vxコマンドで音量を調節してください.
- MMLの中で,音を各種調節するコマンドをひんぱんに使用する(たとえば, 1音ごとに音量を設定する)とリズムが少し遅くなります.
参照:VOICE, VOICE COPY, VOICE REG, PLAY ALLOC,サンプルプログラム41
出典:N88-日本語BASIC(86)(Ver6.2) リファレンスマニュアル、日本電気株式会社、1991年発行