Flashで音楽を動的生成
Flash Player 10からなんかそういう機能が入ったらしく、
CS4 があればActionScriptで実装できるようです。
(Dynamic Sound Generation)
でもCS4がない。
どうにかCS3でできないか?
そう思って悩み続けること数時間、
いろいろ試してみたのですがうまくいきません。
そのうまくいかなかった試みを
せめてブログに残しておきます。
ENTER FRAMEで単音の音楽ファイルを再生
Soundクラスを使えば、MP3ファイルを再生できます。
幸い、昔買ったDTMソフトにループ素材がついていて、
その中にドラムの単音サンプルが入っていました。
このサンプルを ENTER_FRAME の中で再生すれば、
動的にリズムを生成できるはず。
フレームレート1fpsで60bpm、2fpsなら120bpmだ!
と思ってやってみましたが、
再生タイミングが見事なまでにバラバラ・・・
リズム楽器だからタイミングが気になるんであって、
シンセとかオルガンの音のようなアタックの弱い楽器なら
リズムのズレが気にならないのでは?
とか思いますが、単音素材が残念ながらありません。
時計アプリの作り方を参考にする
アナログ時計のアプリの作り方がよく入門書にのってますが、
あれの秒針の表示ってちゃんとタイミングとれてないと
気持ち悪くなるはずですよね?
ということは、そこにFlashを正確なタイミングで
動作させるためのノウハウがあるはず!
と思って調べたら、Dateクラスを使って
現在時刻を表示してるだけでした。
一定時刻ごとにファイル再生させる?
それでうまく行くなら前記のENTER FRAMEの方法でもうまくいくはず。
タイムラインから音楽ファイルを再生
ActionScriptから再生する方法よりは
タイミングのズレが少なかったです。(なぜ?)
でもこの方法だと、
どのフレームで何の音を出すか
事前に決めてしまうことになって、
動的生成の幅が狭まってしまうのでパス。
今後の選択肢
- CS4を調達する(クスールで作業させてもらうとか)
- CS4で用意されているその何とかというクラスを自作する
- 音素材を買ってくる
- 音素材を自分でつくる
- Soundクラスでの再生タイミングがずれる原因を調べる
- とりあえずタイミングのズレは気にせず先に進む
そんな感じの土曜日を過ごしております。