前回からのつづき。
セッション中で私が質問した内容です。
音は鳴らないんだろうな、と思ったら何が何が。QBasic互換のMMLが使えるとのこと。
さっそく試してみました。
コード
Sound.PlayMusic("O4 L8") Sound.PlayMusic("CFA4 AAA4 GAGf2R") Sound.PlayMusic("CFA4 FA>C4 <B-AG2R") Sound.PlayMusic(">C<B-A4 AGF4 GA>C<B-2R") Sound.PlayMusic("DC+C4 EFG4 AGF2R") TextWindow.WriteLine("おわり")
単音ですが確かにMMLで制御できます。ピアノのペダルを踏み込んだままの状態な感じなのが気になりますがともかく鳴ります。すげー。
先のLOGO的なグラフィックといい、今回のMMLのような楽曲作成といい、近代プログラム言語だと結構敷居が高いんですが、これがあっさりできるというのは、回顧主義なのかもしれませんが、なにげに気持ちよい ^^;
QBasic互換のMMLがどのようなものが使えるのかが不明ですが、とりあえず確認できた使えるコマンドは以下。
R … 休符
C,D,E,F,G,A,B … 音(音名)
C+ … Cは音名。♯ (シャープ, 半音階上げる)
C- … Cは音名。♭ (フラット, 半音階下げる)
Cn … Cは音名。nは音の長さ。 例) 1:全音符 / 2:二分音符 / 4:四分音符 …
Cn. … Cは音名。nは音の長さ。"."は付点。"C2."は付点二分音符で長さが二分音符+四分音符。
Ln … デフォルトの音の長さ。L4とすると、音名の横に数字を書かない場合、Lnの長さになる。
On … オクターブ。デフォルトは4。いわゆる 「ドレミファソラシド」 は 「O4 CDEFGAB O5 C」
> … オクターブを一つ上げる。上記の 「O4 CDEFGAB O5 C」 は 「O4 CDEFGAB>C」 でも 同じ。
< … オクターブを一つ下げる。
逆に確認できていないのは以下。
テンポ … Tn で指定できそうだが無視された。
音色 … とりあえず音色ひとつだけ? @nは無視された。
ペダルオフ? … ないのかなあ?
和音 … 当面ないんだろうな。
このあたり、もっと強化されるとよいな。
# ってなことを勉強会懇親会中にネタつくってたんですが、タイムアウトで披露に失敗しました… _| ̄|○
よねけん
そんな懐かしいこともできるんですね。
Small Basicの存在は知ってましたが、昔のBASIC的なことができるとは。
ちょっと試したくなりました。
Link | 2010年7月6日 00:35
オールトの雲
変に新しいけど、基本は昔のBasicをシミュレーションしている感じ。
ただplay文がブロックI/O的になっているのを再現されるのはいまいち…バックグラウンドでループ演奏可能な様にしておいてよ。でないとBGMにできないじゃん。とか、かつての8bitと同じ葛藤が沸き起こるところまで再現しないでよって感じですね…
Link | 2010年7月11日 00:24
よねけん
SBインストールして、ブログのMMLを流してみました。
おぉ、ちゃんとした曲になってる!
確かに音の鳴り方が変ですね。
> ただplay文がブロックI/O的になっているのを再現されるのはいまいち…
子ども心に、A、B、C、…を適当に並べるだけで音楽になるので、
楽しかったなという思い出があります。(MZ-80BなのでMUSIC文でしたけど)
そういう意味でブロックされたっていいと思うのですが、
今の子どもたちだとどう反応するのでしょうね~。
Link | 2010年7月11日 11:51
オールトの雲
> 楽しかったなという思い出
ええ、楽しいですとも。おかげさまで私は最終的にMIDI(Roland SC88)に手を出す羽目になったのは内緒です(ぉ
>そういう意味でブロックされたっていいと思うのです
そうですね。ます現状文字列から音が出せないので、それから考えるとこの点でも満足というのはあるのですが…
ただ、私の経験則から言えば、単音だせたら次は和音、次は音色、次はゲームとかのBGMに…とか言う方向に流れたので…
単純に欲望にはきりがないという話ですが --;
Link | 2010年7月11日 23:03
オールトの雲
ちなみに私はMSX(1)出身なので、PSGでPLAY文でしたね。その後PC88でYM2203→YM2608,X68でYM2151を経てRoland SC88でした。
Link | 2010年7月11日 23:06
[SBasic] タートルグラフィック # Small Basic その2 | オールトの雲
[...] つづく [...]
Link | 2012年10月20日 14:30