AS3嵌入动态音频文件/在嵌入中使用变量

时间:2012-02-10 15:19:46

标签: actionscript-3 flex flashdevelop

制作钢琴/键盘应用程序,并试图找出最好的设置方法,并希望得到任何建议

我打算为每个乐器制作一个声音目录'在我的资产文件夹(piano1 / C4.mp3,piano1 / 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 个答案:

答案 0 :(得分:2)

使用[Embed()]无法做到这一点。 Embed是编译时属性而不是运行时属性。另一方面,你可以将你的mp3资源打包到你的可部署(无论是swf还是air应用程序),并使用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
}

答案 1 :(得分:0)

我自己制作了一个脚本来更快地导入图形资源,你可以为你的声音做同样的事情。 导入名为sounds.fla之类的.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);

所以我可以将其粘贴并将其推入flash内的静态类中。你的sounds.fla需要编译为swc并嵌入到你的项目中。

祝你好运!