MML Player
ゲーム作るとなるとBGMほしいよね、と思ったけど音楽作るの難しいし、
適当に書いてもなんか音が出るようなものがいいなということでBASICのPLAYみたいな感じでどうかと。
つまりMMLかなーと。
使い方
(1)それっぽいMMLをはりつけます。
(2)必要に応じて+ボタンで入力欄を増やします。
(3)Playボタンで演奏開始。
※MMLはだいたい一般的(?)な「CDEFGAB+-.R」の音階休符分音符指定と「><」のオクターブ相対変化と
「TVLO」あたりが使えます。
T:テンポ、V:ボリューム(0-15)、L:分音符、O:オクターブ絶対指定
その他、ちょっと音色に手入れができるように「ZW」が使えます。
Z:音の減衰(全音符に対する%で指定)、W:波形(0:sine, 1:square, 2:sawtooth, 3:triangle)
※使ってみれば、だいたい分かると思います。
が、私の能力不足で「&(タイ・スラー)」は実現できていません……。
※複雑なMMLだと変な曲になったり音がズレたりするかも知れません。
古の人たちはそれをバグとは呼ばず、裏技と呼びました。いいね?
メインのソース
psglike.js
何を思って作ったのか
最初は「pipo」の音だけ出して「ほほぅ……」と楽しんでたわけです。連打して笑ってたんです。
で、バックグラウンドで流せるなら前述の通り、いっそのことMMLまでと。
AIチャットさんに何かいい方法ある? と聞いたら「そこらへんのライブラリ使えば?」と言われたので
「その作り方を聞いてるんだけど」と返すと「字句解析ライブラリ使えば?」と結局は外部ライブラリ……
「そうじゃなくて、自前でやってみたいの。正規表現&置換で中間データ作るのはどう?」と聞いたら
「正規表現なんて制限いっぱいあるし向いてないよ」という回答だったので、意地になって作った。
MML→JSON→Javascript Object みたいな流れです。
履歴
20240323 構造の見直し
20240308 音が大きすぎたようなので調整
20240304 外部インタフェースをちょっと整理
20240303 中間データがいまいち中途半端だったのでデータ構造をちょっと整理
20240302 初版