2012-03-26 1 views
0

그래서이 하나가 저를 곤란하게합니다. 내 웹 사이트 계획은 XML 파일에서 가져온 음악 트랙을 메뉴 버튼으로로드 된 다양한 .swfs의 배경 음악으로 사용하는 것입니다. 나는. '홈 (Home)'을 치면 홈 .swf로 돌아가서 적절한 음악을 재생합니다. 나는 .swf를 크게 확장하지 않고 오디오 품질을 유지할 수없는 것처럼로드 시간을 줄이기 위해 .swf에 직접 음악을 첨부하는 대신 XML을 통해이 작업을 수행하려고합니다 (동기화는 중요하지 않습니다).AS3 - 단일 트랙 반복 기능이있는 XML 재생 목록

두 가지 문제가 발생합니다. 하나는 현재 코드로, 음악은 한 번만 재생되고 반복되지 않습니다. 다른 하나는 기능으로 하나의 노래를 소개로 연주하고 계속해서 다른 노래를 반복하기를 원한다는 것입니다. 즉 홈 버튼을 누르고 인트로 연극을하고 반복하는 섹션을 따라 가면 집에 다시 돌아올 때까지 인트로로 돌아 가지 않습니다. 모든 버튼 하나에 고유 한 기능을 만드는 것보다는이 두 가지를 관리하는 방법을 알아낼 수 없습니다.

여기에 내가 사용하고 코드는 다음과 같습니다

var my_songs:XMLList; 
var my_total:Number; 

var my_sound:Sound; 
var my_channel:SoundChannel; 

var current_song:Number; 

var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("playlist.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
    var myXML:XML = new XML(e.target.data); 

    my_songs = myXML.SONG; 
    my_total = my_songs.length(); 

    //playSong(0); 

    myXMLLoader.removeEventListener(Event.COMPLETE, processXML); 
    myXMLLoader = null; 

} 

function playSong(mySong:Number):void { 
    var myURL = my_songs[mySong][email protected]; 

    if (my_channel) { 
     my_channel.stop(); 
     my_channel.removeEventListener(Event.SOUND_COMPLETE, playSong); 
    } 

    my_sound = new Sound(); 
    my_sound.load(new URLRequest(myURL)); 
    my_channel = my_sound.play(); 
    my_channel.addEventListener(Event.SOUND_COMPLETE, playSong); 
} 

test_btn.addEventListener(MouseEvent.CLICK, onPlay); 
function onPlay(e:MouseEvent):void { 
     playSong(0); 
} 

미리 감사드립니다 당신이 줄 수있는 모든 도움을!

답변

0
YourSongstarting(0,999); // how ever you call to play the song 

위의 내용은 영원히 노래를 반복합니다. 오디오 파일을 스트리밍하여 노래를 더 빨리로드하고 메모리에 음악을 보관할 수 있습니다.이 사이트가 있으면 오디오 트랙 위치 나 XML 파일 또는 다른 외부 텍스트 파일을 플래시/클래스 파일에서 계속 사용할 수 있습니다. 콘크리트.

제어하려는 모든 이벤트를 100 %의 "버퍼"값과 비교하면됩니다. 스트리밍 오디오 as3을 보면 소스 코드가 포함 된 자습서가 많이 있습니다. 필요한 경우 알려 주시면됩니다.

+0

감사 Parele했다! 약간의 연구를했는데 스크립트 시작 부분에서 SoundLoaderContext 변수를 요청한 다음 "my_sound.load (newURLRequest (myURL));"를 변경하여 스트리밍을 설정했다고 생각합니다. "my_sound.load (newURLRequest (myURL), context)"; " - 적어도 그것이 필요한 모든 것으로 보이지만 나중에 확실히 테스트해야 할 것입니다. – DoomJTHM

+0

불행하게도 나는 당신이 제공 한 라인으로해야 할 일에 대해 정말로 분명하지 않습니다. 나는 그런 새로운 함수를 정의하고 싶습니까? 나는 그것이 어디에 배치되어야하는지, 정확히 무엇이 달성되어야하는지에 대해서 확신 할 수 없다. newb 질문에 대해 유감스럽게 생각합니다. 지금까지 도움이되었습니다. = X – DoomJTHM

0

당신은 가까운

var my_songs:XMLList; 
var my_total:Number; 

var my_sound:Sound; 
var my_channel:SoundChannel; 

var current_song:Number; 

var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("playlist.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
    var myXML:XML = new XML(e.target.data); 

    my_songs = myXML.SONG; 
    my_total = my_songs.length(); 

    playSong(0); 

    myXMLLoader.removeEventListener(Event.COMPLETE, processXML); 
    myXMLLoader = null; 

} 

function playSong(e:Event):void { 
    if(current_song > my_total) 
     current_song = 0; 

    var myURL = my_songs[current_song++][email protected]; 

    if (my_channel) { 
     my_channel.stop(); 
     my_channel.removeEventListener(Event.SOUND_COMPLETE, playSong); 
    } 

    my_sound = new Sound(); 
    my_sound.load(new URLRequest(myURL)); 
    my_channel = my_sound.play(); 
    my_channel.addEventListener(Event.SOUND_COMPLETE, playSong); 
} 

test_btn.addEventListener(MouseEvent.CLICK, onPlay); 
function onPlay(e:MouseEvent):void { 
     playSong(e); 
} 
관련 문제