[英]AS3 unwanted delay between playing audio
我有一首歌分為四首:前奏,A,B,結尾。 我有一個播放簡介的程序,然后兩次A,然后兩次B,然后再次回到A,並不斷重復AABB,直到按下結束按鈕。 如果按下結束按鈕,則結束當前播放的樂曲,播放結束並停止。 它的工作原理就像一種魅力,只是在樂曲之間的過渡上有一個非常明顯的刺激性延遲。 如何擺脫延遲並在上一首曲目結束后立即播放歌曲? (我在Flash CS6中使用的是ActionScript 3.0,歌曲為mp3格式,已導入到庫中)。 這是程序: https : //dl.dropboxusercontent.com/s/6f9w906x9uja683/Loop%20music%20test.swf這是我正在使用的代碼:
import flash.events.MouseEvent;
stop();
//variables
var track_var: Number = 0;
var music_cnl:SoundChannel = new SoundChannel();
var intro_msc:Sound = new intro_mp3();
var a_msc:Sound = new A_mp3();
var b_msc:Sound = new B_mp3();
var outro_msc:Sound = new ending_mp3();
//stopping the movieclips
a_mc.stop();
b_mc.stop();
ending_btn.stop();
//intro
music_cnl = intro_msc.play();
track_var= 1;
intro_mc.gotoAndStop(2);
music_cnl.addEventListener(Event.SOUND_COMPLETE, playnext_fn);
trace("debug:track value set to",track_var);
//track selector
function playnext_fn(event:Event){
trace("debug:playnext_fn called");
switch(track_var){
case 0:
//stop
music_cnl.stop();
intro_mc.gotoAndStop(1);
a_mc.gotoAndStop(1);
b_mc.gotoAndStop(1);
ending_btn.gotoAndStop(1);
trace("debug:track value set to",track_var);
ending_btn.removeEventListener(MouseEvent.MOUSE_UP, ending_fn);
break;
case 1:
//first A track
track_var=2;
intro_mc.gotoAndStop(1);
b_mc.gotoAndStop(1);
a_mc.gotoAndStop(2);
music_cnl= a_msc.play();
music_cnl.addEventListener(Event.SOUND_COMPLETE, playnext_fn)
trace("debug:track value set to",track_var);
break;
case 2:
//second A track
track_var=3;
music_cnl= a_msc.play();
music_cnl.addEventListener(Event.SOUND_COMPLETE, playnext_fn);
trace("debug:track value set to",track_var);
break;
case 3:
//first B track
track_var = 4
a_mc.gotoAndStop(1);
b_mc.gotoAndStop(2);
music_cnl= b_msc.play();
music_cnl.addEventListener(Event.SOUND_COMPLETE, playnext_fn);
trace("debug:track value set to",track_var);
break;
case 4:
//second B track
track_var=1;
music_cnl= b_msc.play();
music_cnl.addEventListener(Event.SOUND_COMPLETE, playnext_fn);
trace("debug:track value set to",track_var);
break;
case 5:
//ending
a_mc.gotoAndStop(1);
b_mc.gotoAndStop(1);
intro_mc.gotoAndStop(1);
ending_btn.gotoAndStop(2);
music_cnl=outro_msc.play();
track_var=0;
music_cnl.addEventListener(Event.SOUND_COMPLETE, playnext_fn);
trace("debug:track value set to",track_var);
break;
}
}
//ending button
ending_btn.addEventListener(MouseEvent.MOUSE_UP, ending_fn);
function ending_fn(Event:MouseEvent){
track_var=5;
ending_btn.gotoAndStop(2)
trace("debug: ending button pressed|","track value set to",track_var);
}
我看不到您的代碼有問題(除了有關MAX_BUFFERSIZE的冗余和不正確的語法外,但我認為這看起來像是試圖解決問題的殘余!)
我認為最可能造成此問題的是您的源音頻-如果將其作為MP3導入,或者以48比特率導入,則可能會導致同步問題。
無論是從庫,從外部加載,mp3,wav,任何咬合速率,使用傳統的Sound對象都無法擺脫延遲。 Flash Sound API的設計很差,播放聲音時不可避免地會有延遲。
但是,根據您的情況,您可能會希望通過使用SampleEventData並將其混合在一起來擺脫它。 初始延遲可能長達1000毫秒,但是在您的情況下,這可能是無關緊要的,因為聲音之間的同步更為重要:
http://help.adobe.com/zh_CN/as3/dev/WSE523B839-C626-4983-B9C0-07CF1A087ED7.html
以任何方式播放Flash中的聲音時,延遲時間(開始播放聲音所需的時間)可能從60毫秒變為400毫秒,具體取決於系統。 推薦的行業標准是30ms,這使得Flash在任何與聲音相關的應用中都是過時的技術。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.