2.06.組み込み関数3
以下の追加の組み込み関数が存在します(MML音楽演奏等)。
戻り値のない関数は、式の中では使えません。
audcheck() 音楽演奏機能が利用可能かチェックします。
audmode() 音楽モードを設定します。(戻り値なし)
audmake() MMLを指定して音楽プレイヤーを作成します。(戻り値なし)
audmakedata() data URI schemeの文字列を指定して音楽プレイヤーを作成します。(戻り値なし)
audmakestat() audmakedata()の完了待ち状態を返します。
audplay() 音楽を再生します。(戻り値なし)
audspeedrate() 再生速度レートを設定します。(戻り値なし)
audstat() 再生状態を返します。
audstop() 再生を停止します。(戻り値なし)
audvolume() 音量を設定します。(戻り値なし)
disaud() 音楽プレイヤーを削除します。(戻り値なし)
2.6.1.組み込み関数3の詳細
--
audcheck()
音楽演奏機能(Web Audio API)が利用可能かチェックします。
音楽演奏機能が利用可能であれば1が返ります。
音楽演奏機能が利用可能でなければ0が返ります。
--
audmode(mode)
音楽モードを設定します。
modeに0を指定すると、音楽なしになります。以後、音楽演奏の命令は無視されます。
modeに1を指定すると、音楽ありになります。以後、音楽演奏の命令は実行されます。
そして、命令実行時に 音楽演奏機能(Web Audio API)が利用可能でなければ エラーになります。
modeに2を指定すると、音楽演奏機能が利用可能な場合のみ 音楽ありになります。
音楽演奏機能(Web Audio API)が利用可能であれば、音楽演奏の命令は実行されます。
音楽演奏機能(Web Audio API)が利用可能でなければ、音楽演奏の命令は無視されます。
デフォルトは mode=1 です。
(戻り値なし)
--
audmake(no,mml)
音楽プレイヤー番号 no の音楽プレイヤーを作成します。
mmlにはMML(Music Macro Language)の文字列を指定します。
(MML(Music Macro Language)については 2.6.2.を参照ください)
演奏の例.
audmake(0,"cdefg")
audplay(0)
while(audstat(0)>0){sleep(100)} // 演奏終了待ち
音楽演奏には Web Audio API を使用しています。
MMLをコンパイルして音声バッファに展開するため、
あまり長い音楽は再生できないと思われます。
また、現状は ある程度 高い音や低い音が うまく再生できません。
また、現状は ベロシティ(音の強さ)は未対応です。
また、音色も相当限定的なものになっています。
(戻り値なし)
--
audmakedata(no,dat)
audmake()と同様に、音楽プレイヤー番号 no の音楽プレイヤーを作成します。
ただしdatには、音楽ファイル(mp3等)をdata URI schemeに変換した文字列を指定します。
注意点として、audmakedata()は 作成が完了するまでに時間がかかります。
そして 作成が完了するまでは、音楽を再生することができません。
このため、作成完了を 以下のようにaudmakestat()をチェックして待つ必要があります。
audmakedata(no,dat)
while(audmakestat(no)){sleep(100)}
作成完了後の再生等の手順は、audmake()の場合と同じです(audplay()等))
音楽演奏には Web Audio API を使用しています。
音楽データをコンパイルして音声バッファに展開するため、
あまり長い音楽は再生できないと思われます。
(戻り値なし)
--
audmakestat(no)
audmakedata()の完了待ち状態を返します。
noには audmakedata()の引数と同じ音楽プレイヤー番号を指定してください。
audmakedata()の処理中は1が返ります。
audmakedata()の処理が完了すると0が返ります。
--
audplay(no,repeat)
音楽プレイヤー番号 no の音楽プレイヤーで、音楽を再生します。
音楽プレイヤーは 事前に作成済みである必要があります。
repeatに0以外を指定すると、リピート再生を行います。
repeatは省略可能です。省略した場合にはリピートは行いません。
現在再生中の音楽プレイヤーで 再度 audplay()を実行した場合は、
現在の再生を停止し、先頭から再生します。
(戻り値なし)
--
audspeedrate(no,spd)
音楽プレイヤー番号 no の音楽プレイヤーで、再生速度レートを設定します。
spdには再生速度レート(倍率)を数値で指定します。
例えば、1.5とすると 1.5倍速で再生します。
デフォルトは1です。
音楽プレイヤーは 事前に作成済みである必要があります。
(戻り値なし)
--
audstat(no)
音楽プレイヤー番号 no の音楽プレイヤーの 再生状態を返します。
再生中は1が、停止中は0が返ります。
また、音楽演奏機能(Web Audio API)が利用可能でないか、もしくは、
audmode()で音楽なし(mode=0)に設定していた場合には、-1 が返ります。
音楽プレイヤーは 事前に作成済みである必要があります。
--
audstop(no)
音楽プレイヤー番号 no の音楽プレイヤーで、再生を停止します。
音楽プレイヤーは 事前に作成済みである必要があります。
(戻り値なし)
--
audvolume(no,vol)
音楽プレイヤー番号 no の音楽プレイヤーで、音量を設定します。
volには音量を0-100までの数値で設定します。
デフォルトは100です。
音楽プレイヤーは 事前に作成済みである必要があります。
(戻り値なし)
--
disaud(no)
音楽プレイヤー番号 no の音楽プレイヤーを削除します。
(戻り値なし)
2.6.2.MML(Music Macro Language)について
MMLは "t120 !c0 @0 v120 cdefg" のように文字列で音楽を記述します。
本アプリで使用可能なMMLの命令は、以下の通りです。
(MMLには方言が多数あり、本アプリも独自文法になっています)
アルファベット、数字、記号は、すべて半角です。
アルファベットの大文字小文字の区別はありません。
割り当てのない記号や空白は、無視されます。
(1)テンポ(全チャンネル共通)
テンポは、t120 のように指定します。数字は20-1200までです。デフォルトは120です。
数字は 1分間に演奏する4分音符の数になります。
(2)チャンネル
チャンネルは、!c0 のように指定します。数字は0-7までです。デフォルトは0です。
複数のチャンネルは同時に演奏されます。
(3)音色(チャンネルごと)
音色は、@0 のように指定します。指定できる数字は以下の通りです。デフォルトは0です。
=0:方形波
=1:正弦波
=2:のこぎり波
=3:三角波
=4:ホワイトノイズ
=500:ピアノ(仮)
=501:オルガン(仮)
=502:ギター(仮)
(4)音符(チャンネルごと)
音符は、c+4. のように 音の高さ、変化記号(シャープ/フラット/ナチュラル)、
音の長さ、符点(音長を1.5倍します) の順に記述します。
音の高さ以外は省略可能です。
音の高さは、cdefgabの各文字が、ドレミファソラシに対応します。休符は r になります。
変化記号は、シャープが + になります。フラットが - になります。
ナチュラルが = になります。( + のかわりに #、 = のかわりに * を使うこともできます)
音の長さは、4分音符が4、8分音符が8 のようになります。
符点(.)をつけると音長を1.5倍します。
数字の前に%をつけると絶対音長の指定となり、
4分音符が48、8分音符が24 のようになります(c%48とc4は同じ意味)。
音の長さを省略した場合は、後述のデフォルト音長(Lコマンド)で指定した長さになります。
(デフォルトでは4分音符の長さになります)
また、タイ/スラーは、& 記号で音符をつないで表現します(c4&c4等)。
また、タイは、^ 記号で音長だけを連結することもできます(c4^4等)。
(5)オクターブ(チャンネルごと)
オクターブは、o4のように指定します。数字は0-8までです。デフォルトは4です。
また、< で 1オクターブ下げます。 > で 1オクターブ上げます。
また、!o で < と > の意味を逆にします(全チャンネル共通)。
(現状は、ある程度高い音や低い音が うまく再生できません
(オクターブがおおよそ3~6の間である必要があります))
(6)調号(チャンネルごと)
調号は、!+cfg のように シャープをつける音符を複数指定します。
また、!-eab のように フラットをつける音符を複数指定します。
また、!=cfg のように ナチュラルに戻す音符を複数指定します。
( + のかわりに #、 = のかわりに * を使うこともできます)
(演奏の音符と区別するため、この命令の終わりには空白を入れてください)
(7)ボリューム最大値(全チャンネル共通)
ボリューム最大値は、!v127 のように指定します。数字は1-1000までです。デフォルトは127です。
例えば、!v16 とすると チャンネル音量が 0-16 までであるようなMMLを実行できます。
(8)チャンネル音量(チャンネルごと)
チャンネル音量は、v120 のように指定します。
数字は0-ボリューム最大値(!vで指定した値)までです。デフォルトは120です。
(9)ベロシティ(チャンネルごと)
ベロシティ(音の強さ)は、k100 のように指定します。数字は0-127までです。デフォルトは100です。
(現状は、ベロシティは未対応です。記述しても無視されます)
(10)デフォルト音長(チャンネルごと)
デフォルト音長は、L4 のように指定します。音符の音の長さを省略した場合に この値が使われます。
数字は、4分音符が4、8分音符が8 のようになります。デフォルトは4です。
符点(.)をつけると音長を1.5倍します。
また、数字の前に%をつけると絶対音長の指定となり、
4分音符が48、8分音符が24 のようになります(L%48とL4は同じ意味)。
(11)発音割合指定(チャンネルごと)
発音割合指定は、q8 のように指定します。
数字は1-8で、音長の8分のいくつまで発音するかという意味になります。デフォルトは8です。
(12)ループ指定(チャンネルごと)
ループ指定は、[ abc : de ]2 のように指定します。
[ ] の中を、数字の回数だけ実行します。数字を省略した場合は 2回実行します。
(2より小さい数を指定した場合も 2回実行します)
また、: があると、最後の1回だけは : のところでループを終了します。
また、ループは入れ子にすることが可能です。
例えば、[cd:e [fg]3 ] を実行すると cde fg fg fg cd が実行されます。
注意点として、ループ指定はチャンネルごとであるため、
複数のチャンネルをまたぐようなループは実行できません。
(2016-8-15)