Как воспроизвести несколько звуков в AS2 или AS3 с пользовательской задержкой?

Мне нужно реализовать многодорожечный плеер. Пользователь может загрузить несколько треков и микшировать (проигрывать их вместе). Моя проблема заключается в том, чтобы позволить пользователю определить точную начальную позицию каждой дорожки, чтобы обеспечить синхронизацию между ними, что-то вроде этого:

Трек 1: начать с [x] сек.

Трек 2: начать с [y] сек.

играть/стоп

где пользователь может установить x и y. Я пытался реализовать это с помощью AS2 (используя netstream и setInterval) и AS3 (используя netstream или звук и таймер). Только если я установлю одинаковые x и y, обе дорожки воспроизводятся одновременно.


person Alexander Zwitbaum    schedule 09.12.2009    source источник
comment
Для ясности пользователь запускает два звука в разное время.   -  person Alexander Zwitbaum    schedule 09.12.2009
comment
Итак: Пользователь нажимает кнопку воспроизведения; X секунд после нажатия кнопки воспроизведения начинается дорожка 1; Через Y секунд после нажатия кнопки воспроизведения начинается дорожка 2; ? Кажется, что это было бы легко выполнимо с парой NetStreams и таймером. Можете ли вы опубликовать свой код AS3, который почти работает?   -  person iandisme    schedule 09.12.2009


Ответы (1)


Предположим, у вас есть «движок» временной шкалы, который имеет какие-то внутренние часы. каждый «тик» часов вы будете проверять некоторый массив или вектор, который содержит ваши объекты Track, и смотреть, содержит ли он объект с startTime из n тиков с начала временной шкалы. Или, может быть, более эффективно создать вектор времени запуска, который существует в векторе TrackObjs, и проверить это, а затем, если он будет найден, запустить вектор TrackObjs и получить все аудио, которые необходимо запустить в это время.

Здесь тики могут быть секундами, десятками, миллисекундами, чем угодно. см. http://as3.casalib.org/docs/ классы org.casalib.time для основанных на кадрах хронометраж

class Track() {
  var startTime:int;
  var trackName:String;
  var fileName:String;
}

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

http://www.gaiaflashframework.com/wiki/index.php?title=Sound_Groups
Здесь может быть полезный для вас код, хотя вам, возможно, потребуется отделить его от среды Gaia. Может быть, лучше:
класс SoundManager Мэтта Пшибыльского http://www.reintroduction.com
Класс Guttershark SoundManager http://codeendeavor.com/guttershark

Кроме того, они могут представлять интерес для динамической генерации звука:
http://code.google.com/p/benstucki/
"Flaudio – это динамическая библиотека для генерации и обработки звука во время выполнения для ActionScript 3"

http://code.google.com/p/popforge/
" Аудиобиблиотека Popforge AS3 позволяет создавать действительный объект flash.media.Sound с вашими собственными семплами, что открывает новые перспективы для звукового дизайна с текущим Adobe Flash Player 9. Вы можете создавать синтезаторы, эффекты и проигрыватели сэмплов любого типа. Поставляемый класс AudioBuffer позволяет создавать бесконечное воспроизведение звука».

person ransomweaver    schedule 10.12.2009