そろそろSoundまわりに手を付けてみますかね。ということで、開発ガイドやリファレンスに目を通してみました。うーん、なかなかお手軽に使えそうですね。
//Test.as package{ import flash.display.*; import flash.media.Sound; import flash.net.URLRequest; public class Test extends Sprite { public function Test() { new Sound(new URLRequest("nyandaful.mp3")).play(); } } }
最低限再生するだけならこのくらいでOK。エラーに備えてEvent.IO_ERRORくらいは補足した方が良さそうですが。
playメソッドでは開始位置やリピート回数を指定することも出来るみたいです。ただ、ループ区間を指定することは出来ないみたいなのが残念。
サウンドを止めるためにSoundにstopメソッドがあるのかな、と思ったらそうではなく、play()の戻り値であるSoundChannelにstopメソッドがあります。Soundオブジェクトは今鳴っている音そのものを表すのではなく、あくまで一つの音の種類というか、データソースというか、一つの音源を表すみたいです。今鳴っている音自体はSoundChannelオブジェクトで表されます。だから、Soundのplay()でSoundChannelオブジェクトが生まれ、stop()でその役目を終える。再度再生したい場合はSoundのplay()でまた新たなSoundChannelオブジェクトを作る。ボリュームやパンニングは再生中の音に対する属性だから、SoundChannelのsoundTransformプロパティで制御する。そういった考え方のようです。
こういう設計だから、一つの音源を同時に複数鳴らすことも簡単にできます。Soundのplay()メソッドを何回も呼べば、呼んだ分だけSoundChannelオブジェクトが作られ、同時に再生されます。
//Test.as [PLAY]の文字をクリックするとmp3を再生する例。何回もクリックすると、その分音が重なっていく。 package{ import flash.display.*; import flash.text.*; import flash.media.Sound; import flash.net.URLRequest; import flash.events.*; public class Test extends Sprite { private var snd:Sound = new Sound(new URLRequest("nyandaful.mp3")); private var tf:TextField = new TextField; public function Test() { tf.text = "[PLAY]"; tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); tf.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(e:MouseEvent):void { snd.play(); } } }