何かの箱

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 初版