AS3 Встроить динамические аудиофайлы / Использовать переменные во встраивании

Создание приложения для фортепиано/клавиатуры и попытка выяснить, как лучше всего это настроить, и буду рад любым предложениям.

Я планирую иметь каталог звуков для каждого «инструмента» в папке с моими активами (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);
}

Или было бы лучше иметь класс для каждого из этих «типов», который извлекает все заметки?


person kilrizzy    schedule 10.02.2012    source источник


Ответы (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
}
person J. Holmes    schedule 10.02.2012

Я сделал себе скрипт для более быстрого импорта графических ресурсов, вы можете сделать то же самое для своих звуков. Импортируйте все песни в файл .fla с именем, например, sound.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. Ваш sound.fla должен быть скомпилирован как swc и вставлен в ваш проект.

Удачи!

person Dr.Denis McCracleJizz    schedule 10.02.2012