ActionScript3.0 における音楽再生と停止

AS 3.0において、mp3を埋め込んで再生するのはすごく簡単で、

 import flash.media.Sound;
 [Embed(source='hoge.mp3')]
 private const BGM01:Class;

 private function play():void{
   var s:Sound = new BGM01();
   s.play(0,256) 
 }

とかやればいい。埋め込んだデータがクラス扱いになっているのがミソで、そのインスタンスとしてSoundオブジェクトを作る。

で、普通は音楽の停止もそのインスタンスを使って

  s.stop();

とかやればいいように思うのだが、AS 3.0ではそうなっていない。playを呼んだ返り値としてSoundChannelクラスのインスタンスが返されるので、それを受け取って、そこから制御する。

こんな感じ。

 import flash.media.*;
 [Embed(source='hoge.mp3')]
 private const BGM01:Class;
 private var channel:SoundChannel;

 public function play():void{
   var s:Sound = new BGM01();
   channel = s.play(0,256) 
 }

 public function stop():void{
   channel.stop();
 }

SoundChannelクラスの完全名は flash.media.SoundChannelなので、サウンドを扱う際はflash.media.*をimportする。

Soundクラスのインスタンスを通じて全部制御できたほうが自然だと思うんだがなぁ。