2010-12-19 7 views
0

세 개의 음악 트랙을 차례로 재생해야합니다. 캐시가 다시로드되지 않고 캐시에 있어야합니다. 이 코드를 사용합니다. 모든 것이 localhost에서 잘 작동하지만 서버에서 앱을 다시 시작한 후에 만 ​​작동합니다. 매번 트랙을 다시 다운로드하는 것은 잘못입니다.AS3에서 음악 트랙을 재생하는 방법은 무엇입니까?

public function musicOn():void{ 
    if (sndStart == 'true'){ 
    req = new URLRequest("media/" + track + ".mp3"); 
    snd.load(req); 
    channel = snd.play(); 
    channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 
    sndStart = 'false'; 
    } else { 
     sndStart = 'true'; 
     } 
} 

public function musicOff():void{ 
    if (snd.length>0){ 
     channel.stop(); 
     snd = new Sound(); 
     channel = new SoundChannel(); 
     sndStart = 'true'; 
      } 
} 

public function onPlaybackComplete(event:Event):void 
      { 
    if (track==3){ 
    track = 1; 
    } else { 
     track++; 
     } 
    sndStart = 'true'; 
    snd = new Sound(); 
    musicOn(); 
} 

나는 이러한 기능을 실행

if (optObj.music == 'true' && sndStart == 'true'){ 
        musicOn(); 

       } else if (optObj.music == 'false'){ 
        musicOff(); 

       } 

optObj.music을 -이 경우 응용 프로그램이 시작 또는 전 기능 설정을 변경 호출 할 때 호출되는 매개 변수를 사용하여 객체입니다.

답변

5

는 나는 당신이 쓴 모든 것을 이해 모르겠지만, 어떻게 이것에 대해 :

package test 
{ 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.media.Sound; 
import flash.media.SoundChannel; 
import flash.net.URLRequest; 

public class SoundTest extends MovieClip 
{ 
    private var files : Array = [ "file1.mp3", "file2.mp3", "file3.mp3" ]; 
    private var sounds : Array = []; 
    private var count : int = 0; 
    private var channel : SoundChannel; 


    public function musicOff() : void 
    { 
     if (channel != null) 
     { 
      channel.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete); 
      channel.stop(); 
      channel = null; 
     } 
    } 

    public function musicOn() : void 
    { 
     if (sounds[count] == null) loadSound(); 
     else playLoadedSound(); 
    } 

    private function loadSound() : void 
    { 
     var sound : Sound = new Sound(); 
     sound.addEventListener(Event.COMPLETE, onSoundLoaded); 
     sound.load(new URLRequest(files[count])); 
    } 

    private function playLoadedSound() : void 
    { 
     channel = sounds[count].play(); 
     channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete); 
    } 

    private function onSoundComplete (ev : Event) : void 
    { 
     channel = null; 
     count++; 
     if (count >= files.length) count = 0; 
     musicOn(); 
    } 

    private function onSoundLoaded (ev : Event) : void 
    { 
     var snd : Sound = ev.target as Sound; 
     sounds.push(snd); 
     channel = snd.play(); 
     channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete); 
    } 

    public function SoundTest() 
    { 
     musicOn(); 
    } 
} 
} 

(이로드 될 때까지 BTW 당신은 ​​당신의 스크립트는 다시 시작한 후에 작동하는 이유입니다 사운드를 재생할 수 없습니다. , mp3가 브라우저 캐시에있는 경우).

+0

감사합니다. weltraumpirat 하지만 같은 문제가 발생합니다. 재생 후 함수 musicOn()을 호출하면 음악이 처음에는 재생되지 않지만 두 번째에만 재생됩니다. – Astraport

+0

그럼 다른 프로그램에서 다른 문제가 생길 것입니다. 제 서버에서 똑같은 스크립트를 시도했지만 정상적으로 작동합니다. 방법을 호출하는 버튼일까요? 아니면 위의 스크립트에서 if (sndStart == 'true')를 넣었습니까? 프로그램 시작시 sndStart = 'true'로 설정하는 것을 잊었을 수 있습니까? – weltraumpirat

+0

예, 문제는 다른 곳에서 발생했습니다. 필자는 별도의 창 설정을 사용하여 매개 변수를 주 응용 프로그램에 전달합니다. 어쨌든 항상 적절한 옵션을 통과하지는 않습니다. 이제 나는 다룰 것이다. 다시 한번 감사드립니다. – Astraport

관련 문제