2012-02-10 6 views
1

피아노/키보드 응용 프로그램을 제작하고이를 설정하는 가장 좋은 방법을 알아 내려고 변수를 사용하는 디렉토리를 필요에AS3 삽입 동적 오디오 파일 (들)/삽입

내가 계획 제안을 사랑 내 자산 폴더 (악기 1/C4.mp3, 피아노 1/D4.mpg, ...)의 각 악기에 대한 소리

이 모든 것을 가져 오기/가져올 수 있습니까? 또한이 클래스에 변수를 전달하여 가져올 폴더를 나타낼 수있는 방법이 있습니까?

var type = "piano2"; //passed from class being called by 
foreach(notes as note){ 
    [Embed(source = 'assets/sounds/'+type +'/'+note+'.mp3')] private const C3:Class; 
    public var c3:Sfx = new Sfx(C3); 
} 

이상적 일 것이다 아니면 모든 노트를 가져옵니다이 "종류"의 각각의 클래스를 가지고 더 좋은 생각이 될 것

뭔가?

답변

2

[Embed()]을 사용하여 수행 할 수 없습니다. Embed는 런타임 속성이 아닌 컴파일 시간 속성입니다. 일 수 있으며 배포 가능한 (swf 또는 air 응용 프로그램이든) mp3 리소스를 패키지하고 Sound.load()을 사용하십시오. 같은

뭔가 :

public initialize():void { 
    var type = "piano2"; //passed from class being called by 
    foreach(notes as note){ 
     var url = 'assets/sounds/'+type +'/'+note+'.mp3'; 
     var req:URLRequest = new URLRequest(url); 
     var sound:Sound = new Sound(); 
     sound.addEventListener(Event.COMPLETE, noteLoaded); 
     sound.load(req); 
    } 
} 

private noteLoaded(e:Event):void { 
    // do something with the loaded sound 
} 
0

난 당신이 소리에 대해 동일한 작업을 수행 할 수 있습니다, 더 빠른 그래픽 자산을 가져 자신에게 스크립트를했다. .fla의 모든 노래를 sounds.fla와 같은 이름으로 가져옵니다. 그런 다음 폴더를 만들어 원하는대로 주문할 수 있습니다. 일단 내가 선택한 모든 구문 분석하고 가져올 빈 클래스를 만들고 다음이 같은 것을 인쇄하는 jsfl 스크립트가 완료.

//  this is the name   this is the class referencing what i exported in flash 
private ID_PIANO_SOUND_1:Sound = getClassByName(PIANO_SOUND_1); 
private ID_PIANO_SOUND_2:Sound = getClassByName(PIANO_SOUND_2); 
private ID_PIANO_SOUND_3:Sound = getClassByName(PIANO_SOUND_3); 
private ID_GUITAR_SOUND_1:Sound = getClassByName(GUITAR_SOUND_1); 

그래서 붙여 넣기 만하면 플래시 내부의 정적 클래스에 붙여 넣을 수 있습니다. sounds.fla는 swc로 컴파일하고 프로젝트에 포함해야합니다.

행운을 빈다.