制作钢琴/键盘应用程序,并试图找出最好的设置方法,并希望得到任何建议
我打算为每个乐器制作一个声音目录'在我的资产文件夹(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);
}
或者为这些"类型"中的每一种提供课程会更好吗?拉出所有笔记?
答案 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并嵌入到你的项目中。
祝你好运!