AS3 Встраивать динамический аудиофайл (ы) / Использовать переменные в embed - PullRequest
1 голос
/ 10 февраля 2012

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

Я планирую разместить каталог звуков для каждого «инструмента» в папке моих активовpiano1 / C4.mp3, piano1 / D4.mpg, ...)

Есть ли способ импортировать / встраивать все это как массив?Также есть способ, которым я могу передать переменную этому классу, чтобы указать, из какой папки я хочу импортировать их?Идея иметь класс для каждого из этих "типов", который тянет все ноты?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Вы не можете сделать это, используя [Embed()]. Embed - это атрибут времени компиляции, а не атрибут времени выполнения. Вы могли бы , с другой стороны, упаковать свои mp3-ресурсы с возможностью развертывания (будь то приложение SWF или эфир) и использовать 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 голосов
/ 10 февраля 2012

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

Так что я могу просто вставить это и засунуть встатический класс внутри flash.Ваш файл sounds.fla должен быть скомпилирован как SWC и встроен в ваш проект.

Удачи!

...