就是 sound 輪播得時候 會有小中斷的感覺!
這個問題有兩個層面!
第一個
就是 sound 檔本身的處理的問題
Ticore大大寫的這篇 解決 Mp3 循環音效停頓的問題
可以解決這個問題
第二個
就是使用 sound.play()
然後聽他的 complete 的事件
然後再一次的使用 sound.play() 去播放
通常這樣的都是為了準確的了解這個聲音是否 結束了沒有!
我自己的聲音播放的類別也是這樣做~
不過聽說使用 sound.play(0, 次數)
卻不會有 斷音的問題
所以我就寫了測試程式測試~
//
package demo
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import ui.sound;
public class soundDemo extends Sprite
{
private var soComp:Sound;
private var soCompChannel:SoundChannel;
//
private var soLoop:Sound;
private var soLoopChannel:SoundChannel;
public function soundDemo()
{
super();
soComp = new sound();
soCompChannel = soComp.play();
soCompChannel.addEventListener(Event.SOUND_COMPLETE, onSoundCompleteFun);
soLoop = new sound();
soLoopChannel = soLoop.play(0, int.MAX_VALUE);
soLoopChannel.addEventListener(Event.SOUND_COMPLETE, onSoundCompleteFun);
this.addEventListener(Event.ENTER_FRAME, onEnterFrameFun);
}
private function onSoundCompleteFun(e:Event):void
{
soCompChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundCompleteFun);
soCompChannel = soComp.play();
soCompChannel.addEventListener(Event.SOUND_COMPLETE, onSoundCompleteFun);
}
//
private function onEnterFrameFun(e:Event):void
{
var flag:Boolean = false;
if(soCompChannel.leftPeak == 0) flag = true;
if(soCompChannel.rightPeak == 0) flag = true;
if(flag) trace('soCompChannel lp : ' + soCompChannel.leftPeak + ' rp: ' + soCompChannel.rightPeak);
//
flag = false;
if(soLoopChannel.leftPeak == 0) flag = true;
if(soLoopChannel.rightPeak == 0) flag = true;
if(flag) trace('soLoopChannel lp : ' + soLoopChannel.leftPeak + ' rp: ' + soLoopChannel.rightPeak);
}
}
}
//
用上面的程式測試! 會發現有下面的 trace
//
soCompChannel lp : 0 rp: 0
soLoopChannel lp : 0 rp: 0
soCompChannel lp : 0 rp: 0
soCompChannel lp : 0 rp: 0
soCompChannel lp : 0 rp: 0
soCompChannel lp : 0 rp: 0
soCompChannel lp : 0 rp: 0
soCompChannel lp : 0 rp: 0
//
就程式面的角度看!
是代表聽 事件 重播的機制會讓 channel 有一個影格左右的沒有聲音!
因為我自己試聽不出來一個影格的差異 !
所以我是這樣去看到底有沒有斷音!
總之結論是使用 原生 sound.play 去 LOOP
會比聽事件 去 loop 順
所以我是這樣去看到底有沒有斷音!
總之結論是使用 原生 sound.play 去 LOOP
會比聽事件 去 loop 順
上面的測試環境
聲音是使用 SWC 鑲進去的
如果是使用
soComp = new Sound(new URLRequest('../asset/sound.mp3'));
的方式 測試也是一樣 ! (以我手邊第一次處理的 MP3)
不過~我後來有處理另外一個WAV
用SWC 的方式 是只有開始會有 0
但是使用 new URLRequest 的方式~
卻是和聽事件的一樣! 會中斷!
所以還是要看 Sound 檔
用SWC 的方式 是只有開始會有 0
但是使用 new URLRequest 的方式~
卻是和聽事件的一樣! 會中斷!
所以還是要看 Sound 檔
沒有留言 :
張貼留言