研究室生活のメモ・・・だった過去の遺産。移転先→http://negimochix2.blogspot.com/
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Action Script 3.0でサウンドの一時停止,自動ループ再生ができた.
サウンドでは主に,
mp3の実体を扱うSoundクラス,
Soundクラスで再生を開始した音楽を制御するSoundChannelクラス
の2つが必要.
また,音量の調整,左右のスピーカーに流す割合を設定するには,SoundTransformクラスが必要.
SoundTransformクラスはSoundクラス専用というわけではなく,
Flash全体のサウンド(flvファイルのサウンドとかも)の設定にも使われるクラス.
最初は,↑の各クラスの役割をはっきり認識していなかったので,
一時停止をやっても2重再生とかのバグが起こって困った.
ソースはこんな感じ.
以後,得られたSoundChannelを使ってサウンドを制御する.
サウンドの一時停止は,flvの場合と違ってpauseメソッドがない.
なので,再生位置を予め保存しておいて,SoundChannelクラスを破棄する.
ここで,SoundChannelクラスがちゃんと破棄されていないと後で再生をしたときに2重再生の原因となるので注意.
再生時は,保存しておいた再生位置をstartメソッドの第1引数に指定でおk.
ループ再生自体は,Soundクラスのstartメソッドの第2引数でリピート回数を指定すればいいんだけど,これじゃリピートが有限になっていつかは止まってしまう.
なので,常に自動的にループさせるには,1回の再生にしておいて,再生終了後のイベントが起きたときに,再び最初から再生させればいい.
上のソースをクラスとして作っておいて, さらに再生位置の移動,ボリューム設定を追加した結果,こんな感じのFlashができました.
ちなみに,今回使用させていただいた音楽はこちら.
サウンドでは主に,
mp3の実体を扱うSoundクラス,
Soundクラスで再生を開始した音楽を制御するSoundChannelクラス
の2つが必要.
また,音量の調整,左右のスピーカーに流す割合を設定するには,SoundTransformクラスが必要.
SoundTransformクラスはSoundクラス専用というわけではなく,
Flash全体のサウンド(flvファイルのサウンドとかも)の設定にも使われるクラス.
最初は,↑の各クラスの役割をはっきり認識していなかったので,
一時停止をやっても2重再生とかのバグが起こって困った.
ソースはこんな感じ.
var sound:Sound = new Sound(); var soundCh:SoundChannel; // サウンドの再生位置 var _currentPos:Number; // 通常時のサウンドボリューム var _soundVol:Number = 1.0; var url:URLRequest = new URLRequest(mp3ファイル名); // ロード開始 sound.load(url); // サウンドのロード完了のイベントリスナー登録 sound.removeEventListener(Event.COMPLETE, SoundCompleteHandler); // サウンドのロード完了 function SoundCompleteHandler(event:Event) { // 位置0から再生開始 soundCh = sound.play(0, 1); // 音量設定 changeSoundVolume(_soundVol); // mp3の読み込み完了メソッド解除 sound.removeEventListener(Event.COMPLETE, SoundCompleteHandler); // 再生終了のイベントリスナー登録 soundCh.addEventListener(Event.SOUND_COMPLETE, SoundChannelCompleteHandler); } // サウンドの一時停止 function pauseMusic():void { // 再生位置を保存 _currentPos = soundCh.position; // ストップ soundCh.stop(); // SoundChannelの開放 soundCh.removeEventListener(Event.SOUND_COMPLETE, SoundChannelCompleteHandler); soundCh = null; } // サウンドの再生 function restartMusic():void { // 保存した再生位置から再生 soundCh = sound.play(_currentPos, 1); soundCh.addEventListener(Event.SOUND_COMPLETE, SoundChannelCompleteHandler); // 音量設定 changeSoundVolume(_soundVol); } // 音量調整 function changeSoundVolume(setVol:Number):void { // 音量の制御用クラス var soundTrans:SoundTransform; soundTrans = soundCh.soundTransform; soundTrans.volume = setVol; soundCh.soundTransform = soundTrans; } // サウンド再生の終了イベント(ループ再生用) function SoundChannelCompleteHandler(evt:Event):void { // 安全のため開放 soundCh.removeEventListener(Event.SOUND_COMPLETE, SoundChannelCompleteHandler); soundCh = null; // 最初から再生 soundCh = sound.play(0, 1); soundCh.addEventListener(Event.SOUND_COMPLETE, SoundChannelCompleteHandler); // 音量設定 changeSoundVolume(_soundVol); }Soundクラスのstartメソッドの返り値がSoundChannelクラス.
以後,得られたSoundChannelを使ってサウンドを制御する.
サウンドの一時停止は,flvの場合と違ってpauseメソッドがない.
なので,再生位置を予め保存しておいて,SoundChannelクラスを破棄する.
ここで,SoundChannelクラスがちゃんと破棄されていないと後で再生をしたときに2重再生の原因となるので注意.
再生時は,保存しておいた再生位置をstartメソッドの第1引数に指定でおk.
ループ再生自体は,Soundクラスのstartメソッドの第2引数でリピート回数を指定すればいいんだけど,これじゃリピートが有限になっていつかは止まってしまう.
なので,常に自動的にループさせるには,1回の再生にしておいて,再生終了後のイベントが起きたときに,再び最初から再生させればいい.
上のソースをクラスとして作っておいて, さらに再生位置の移動,ボリューム設定を追加した結果,こんな感じのFlashができました.
ちなみに,今回使用させていただいた音楽はこちら.
PR
この記事にコメントする
Infomation
【中の人】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー
【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@
【その他やってるもの】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー
【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@
【その他やってるもの】
・Twitter
・これは痛いピアプロ
・過去の遺産smart.fm
【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
・これは痛いピアプロ
・過去の遺産smart.fm
【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
カテゴリー
VOCALOID Ranking Watcher
新曲は常にチェックすべし。
おすすめ記事
jubeat ripples
今更やってみる
最新記事
(05/02)
(01/08)
(11/26)
(11/24)
(11/13)
(11/06)
(11/06)