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クラスでの再生タイミングがずれる原因を調べる
  • とりあえずタイミングのズレは気にせず先に進む


そんな感じの土曜日を過ごしております。