トップ 一覧 検索 ヘルプ RSS ログイン

サウンド_Flexの変更点

-    m_soundChannel = m_soundFactory.play(); 
+    m_soundChannel = m_soundFactory.play();
+    m_soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
-     
+
+Soundクラスのplayを呼んだ場合、再びイベント登録やSoundTransformでのパンとボリューム設定を行う必要があります。
+
+!!mp3をswfファイルに埋め込む
+
+今までの説明は外部のmp3を読み込む場合の例でしたが、今度はswfファイルにmp3を埋め込んでしまいます。
+これにより、1つのswfファイルだけ持ち運べばよいので楽なんですが、ファイルサイズはmp3のサイズ分増えます。
+
+ package {
+    import flash.display.*;
+    import flash.utils.*;
+    import flash.geom.*;
+    import flash.text.*;    
+    import flash.events.*;
+    import flash.media.Sound;
+    import flash.media.SoundChannel;
+    import flash.media.SoundTransform;
+    import flash.net.URLRequest;
+ 
+    public class SoundTest extends Sprite {
+        private var m_text:TextField;
+ 
+        // 読み込む外部mp3を指定 ==> sound0
+        [Embed(source='test.mp3')]
+        private var sound0:Class;
+ 
+        private var m_soundFactory:Sound;               ///< サウンドデータ
+        private var m_soundChannel:SoundChannel;        ///< サウンド再生用
+ 
+        public function SoundTest() {
+            // テキストの作成
+            m_text = new TextField();
+            m_text.text = "";
+            m_text.autoSize  = "left";
+            m_text.multiline = true;
+            m_text.x = 0;
+            m_text.y = 0;
+            
+            addChild(m_text);       // ルートのSpriteにオブジェクトを追加
+            
+            // 埋め込みサウンド
+            m_soundFactory = new sound0() as Sound;
+            
+            // 再生処理
+            m_soundChannel = m_soundFactory.play();
+ 
+            // 音量とパンの設定
+            var transform:SoundTransform;
+            transform = new SoundTransform();
+            transform.pan    = 0.0;         // パンは中心(-1 〜 +1)
+            transform.volume = 1.0;         // フルボリューム
+            m_soundChannel.soundTransform = transform;
+ 
+            // 再生時のイベント割り当て
+            m_soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
+        }
+ 
+        /**
+         * サウンドの再生終了を取得
+         */
+        private function onSoundComplete(event:Event):void {
+            // 終了したSoundChannelを判定
+            if(m_soundChannel == event.target) {
+                m_text.appendText("\nサウンドの再生が完了しました。");              
+            }
+        }
+    }
+ }
+
+ [Embed(source='test.mp3')]
+ private var sound0:Class;
+にて「test.mp3」を埋め込みます。
+
+これを使って
+ m_soundFactory = new sound0() as Sound;
+としてSoundクラスとして埋め込んだsound0にてnewします。
+この場合は、SoundクラスのaddEventListener関数での読み込みチェックイベントなどは(埋め込まれているゆえに)不要になります。
+
+後は、
+ m_soundChannel = m_soundFactory.play();
+として再生です。この後は、外部のmp3を処理したときと同じになります。