FlMML -マクロ、HTML出力など
10/24追記:繰り返し指定のバグを修正してこちらにコミットしました。
TSSCPの仕様を眺めながら思わず変な声を出しそうになりました。
「制御文は仕様をあわせるつもりだったのに、手遅れじゃん!」
繰り返しの使い方は取り違えてるし、大文字小文字を区別しないからマクロも同じにできないし、申し訳ないこと山の如しです。
まあこの際仕方がないんで、独自のマクロ機能を実装してみました。結構いいと思うんですけど、どうですかね?
※Signalを出す機能にまだバグがありまして、今回のバージョンは該当機能を無効にしてあります。
直り次第修正版を出す予定でいますが未定です。すんません。
追記:とりあえずハングしないようになりました(バージョン062)。Timerを使ってnミリ秒後にイベントを起こし、Dateを見て誤差を修正する形です。Timerの更新間隔が本体のswfのフレームレートに引き摺られてしまうのを無理やり誤魔化してるんですが、なんかもっと巧いやり方ありませんかねぇ。
さて、ソースはこちらです。使い方は続きをどうぞ。
TSSCPの仕様を眺めながら思わず変な声を出しそうになりました。
「制御文は仕様をあわせるつもりだったのに、手遅れじゃん!」
繰り返しの使い方は取り違えてるし、大文字小文字を区別しないからマクロも同じにできないし、申し訳ないこと山の如しです。
まあこの際仕方がないんで、独自のマクロ機能を実装してみました。結構いいと思うんですけど、どうですかね?
直り次第修正版を出す予定でいますが未定です。すんません。
追記:とりあえずハングしないようになりました(バージョン062)。Timerを使ってnミリ秒後にイベントを起こし、Dateを見て誤差を修正する形です。Timerの更新間隔が本体のswfのフレームレートに引き摺られてしまうのを無理やり誤魔化してるんですが、なんかもっと巧いやり方ありませんかねぇ。
さて、ソースはこちらです。使い方は続きをどうぞ。
MML初心者の方は第3回の記事を。リファレンスが見たいかたは
第5回をご覧ください。そのうちまとめページ作ります。
ではまずマクロ命令の説明を。
簡単にいうと、自由に略称をつけるための機能です。
モーツァルトのフルネームはヴォルフガング・アマデウス・モーツァルトですけれども、長いからモーちゃんでいいよねとか そんな感じの機能です。
使い方。
まずは '$名前=内容;' という書き方でマクロを定義します。
'$' で始めて '=' で間をつなぎ、';'(セミコロン)で締めます。
すると、それ以降に記述された '$名前' は全て '内容' に置き換えられます。
マクロの中でマクロを使うこともできます。
ただし、必ず使われるものが使うものよりも先にくるようにしてください。
1文字目はアルファベットまたは '_'(アンダースコア)。
2文字目以降はアルファベットまたは '_'(アンダースコア)、数字、'+'、'#'、’(’、')’。
これだけあればウクレレ記法でサポートしているコードくらいはカバーできるかなという計算です。
最後に。FlMMLのマクロは単純な文字列置換なので、ちょっと変わった使い方もできます。
このテクニックはドラムパートを作るときに役に立つと思います。
追記:HTML出力についても軽く触れておきます。
まずはここから swf ファイルをダウンロード。ftpで好きなところにアップロードし、実行してみてください。
適当にMMLを打ち込んだら「HTML」のタブをクリックして、「flmml.swf」となっている欄を先ほどアップロードしたURLに変更します。貼り付け用のタグが表示されているので「setClipboard」を押したあと、自分のブログにでも貼り付けてください。
これで はてな以外のひとにも少しは使ってもらいやすくなるかな?
ではまずマクロ命令の説明を。
簡単にいうと、自由に略称をつけるための機能です。
モーツァルトのフルネームはヴォルフガング・アマデウス・モーツァルトですけれども、長いからモーちゃんでいいよねとか そんな感じの機能です。
使い方。
まずは '$名前=内容;' という書き方でマクロを定義します。
'$' で始めて '=' で間をつなぎ、';'(セミコロン)で締めます。
すると、それ以降に記述された '$名前' は全て '内容' に置き換えられます。
$C=ceg; $C $C $C;と書いた場合は
ceg ceg cegと同じことになります。
マクロの中でマクロを使うこともできます。
ただし、必ず使われるものが使うものよりも先にくるようにしてください。
$Am =/:4 a<ce>;a :/; $EonG#=/:4 g#b<e>b :/; $SOLO =$Am $EonG#; t150 l16 o5 $SOLO名前は自由につけられるのかな?と思われたかもしれませんが、もちろん制限があります。
最後に。FlMMLのマクロは単純な文字列置換なので、ちょっと変わった使い方もできます。
$C=cd; $C2$C4$C8;ドレーードレドレッという具合にレの音の長さが変わったのが分かりましたか?
このテクニックはドラムパートを作るときに役に立つと思います。
追記:HTML出力についても軽く触れておきます。
まずはここから swf ファイルをダウンロード。ftpで好きなところにアップロードし、実行してみてください。
適当にMMLを打ち込んだら「HTML」のタブをクリックして、「flmml.swf」となっている欄を先ほどアップロードしたURLに変更します。貼り付け用のタグが表示されているので「setClipboard」を押したあと、自分のブログにでも貼り付けてください。
これで はてな以外のひとにも少しは使ってもらいやすくなるかな?
« はてなおそるべし。 | トップページ | FlMML - Flashでも初音 »
「ActionScript 3.0」カテゴリの記事
- FlMML - リングモジュレーターとSync(2009.07.26)
- FlMML - ファミコンDPCM(2009.05.16)
- キー入力のレベル、トリガ、リピートを取得(2009.05.06)
- FlMML - エクスプレッション(2009.05.03)
- FlMML - 引数つきマクロ(2009.04.12)
「FlMML」カテゴリの記事
- FlMMLリポジトリの引越し(2011.02.05)
- FlMML - リングモジュレーターとSync(2009.07.26)
- MML対応Twitterクライアント(2009.07.24)
- FlMML - DPCM変換ツール(2009.05.17)
- FlMML - ファミコンDPCM(2009.05.16)
コメント
この記事へのコメントは終了しました。
新機能追加やバグ修正ありがとうございます!
coderepos も使い出したとのことで、とても手軽に FlMML の最新を追いかけることが出来るようになりました:D
投稿: yuichi tateno | 2007.10.24 21:54
どうも!
いえいえ。テスト不十分なままリリースしちゃって済みません(^^;
codereposはこちらとしても便利に使わせていただいてます。
投稿: おー | 2007.10.25 02:06
.midへの変換機能等は実装予定でしょうか?
投稿: | 2007.10.26 15:10
ズバリ全然考えてません!
投稿: おー | 2007.10.27 00:53
どうもです。ようやくonSignalを利用させてもらいつつあります。それで気づいたのですが、音を重ねる時、1トラック目(というんでしょうか)の譜面が全トラックの中で最後まで書かれていないと、onSignalが途中で止まってしまうのですね。これは、Rでもよいので、とにかく最後まで何か譜面があれば大丈夫なようなので、現状でも問題ないのです。
それから、FlexBuilder3のbetaについてるFlashPlayerのベータ版だと、音を重ねたとき、現行のFlashPlayerに比べて、なんかメチャクチャ処理が重くなる気がします。本公開時にはよくなってるといいなあ。。。
以上、お知らせまで、でした。
どんどん機能追加されますね、これからのFlMMLを楽しみにしております!
投稿: kampei | 2007.10.29 13:38
どうもです。
おお~たしかに! 言われてみればそうなりますね。
現在、トラック毎にテンポを指定しなければいけない仕様が大変不評なので(^^;)、内部的にトラック1をテンポ専用にするつもりでいます。その修正時に一緒に直したいと思います。報告ありがとうございます!
FlexBuilder3ですか~。ちょっとまだ入れてみる予定はないんですが、こちらも報告ありがとうございます。デバッグ機能が強化されてて重かったりとかですかね? FlMMLの最適化自体ももう少し考えたいです。
投稿: おー | 2007.10.30 02:11