Просмотр полной версии : Возможно ли сделать эхо у подгружаемого звука? (loadSound)
Кот Баюн
23.03.2014, 10:22
Всем доброго дня!
Интересный вопрос возник.
Можно подгрузить внешний звук на таймлайн при помощи
var my_sound = new Sound();
my_sound.loadSound("snd/my_sound.mp3", true);
my_sound.onLoad = function ()
{
my_sound.start();
};
А есть ли возможность сделать "эхо" у такого звука, то есть запустить его клон еще два раза подряд с некоторой задержкой и более тихой громкостью?
То есть к примеру -
Звук.
Спустя 0,25 секунды - тот же звук, но тише.
И спустя 0,5 секунды - тот же звук, но еще тише.
Буду благодарен за любые варианты))
Кот Баюн, да, возможно.
Для этого лучше использовать звук из библиотеки, а не загружаемый.
Но принцип один и тот же, — создаете несколько инстансов звуков, запускаете с задержкой. Звуки для эха с пониженной громкостью.
Собственно, вашего кода должно хватать. Ну, setTimeout еще пригодится.
Держите пример.
Если непонятно, для чего создавать пустые мувики для каждого экземпляра звука.
PS. Подгружаемый звук придется подгружать столько раз, сколько нужно эхо-экземпляров, поэтому звук целесообразно заранее положить в библиотеку.
Кот Баюн
23.03.2014, 17:02
Я посмотрел этот вариант - хороший вариант, к нему можно прикрутить подгрузку звука, и усовершенствовать стерео-панорамирование)))
this.createEmptyMovieClip('mc_s1', 0);
this.createEmptyMovieClip('mc_s2', 1);
this.createEmptyMovieClip('mc_s3', 2);
this.createEmptyMovieClip('mc_s4', 3);
var s1:Sound = new Sound(mc_s1);
s1.loadSound("snd/28.mp3", false);
var s2:Sound = new Sound(mc_s2);
s2.loadSound("snd/28.mp3", false);
var s3:Sound = new Sound(mc_s3);
s3.loadSound("snd/28.mp3", false);
var s4:Sound = new Sound(mc_s4);
s4.loadSound("snd/28.mp3", false);
startSound(s1, 100); //нормальный старт
setTimeout(startSound, 25, s2, 20, -50);
setTimeout(startSound, 50, s3, 10, 100);
setTimeout(startSound, 75, s4, 5, -50);
function startSound(sound:Sound, vol:Number, pan:Number)
{
sound.setVolume(vol);
sound.setPan(pan);
sound.start();
}
stop();
Но вот что интересно, значения задержки при определенных цифрах не работают.
И при выставлении задержки, например, меньше 25, звук просто пропадает.
А допустим, как сделать эффект "ванной комнаты" - когда задержки очень малы?
Кот Баюн для подобных задач целесообразнее либо готовить звуки заранее, либо использовать ас3.
Кот Баюн
23.03.2014, 17:20
Хотелось бы, так сказать, понять причину.
Можно вот тут почитать на вашу тему:
http://www.flasher.ru/forum/showthread.php?t=205696
Обратите внимание на использование события "onLoad"
Кот Баюн
26.03.2014, 14:13
Про OnLoad - оно было в первоначальном коде.
var my_sound = new Sound();
my_sound.loadSound("snd/my_sound.mp3", true);
my_sound.onLoad = function ()
{
my_sound.start();
};
В варианте от mooncar отсутствует, потому что там звуки из библиотеки.
Я честно пытался прикрутить туда onload, но в конечном итоге он все-таки не прикрутился.
Я честно пытался прикрутить туда onload, но в конечном итоге он все-таки не прикрутился.
А туда и не надо. В чем смысл? Считается, что добавление объектов из библиотеки в рантайме происходит синхронно, в отличии от асинхронной (по отношению к исполнению кода) подгрузки ресурсов извне (считай - из инета), поэтому обработчик события загрузки не нужен.
Кот Баюн
26.03.2014, 16:51
Очень много звуков, которые надо "реверберировать" и весят они нехило.
Затолкать все в библиотеку - "компиляция" SWF будет длиться полчаса.
Потому подгружаю.
А делать копии файлов с заранее наложенным эхом было бы слишком хлопотно.
Про задержку в курсе.
Но не совсем ясно, почему после уменьшения задержек в копиях эхо пропадает вообще.
Точность исполнения setTimeout, setInterval зависят от FPS. При временах, приближенных к FPS, могут возникать неточности исполнения отложенных действий. Я сам никогда не использую во флеше временные промежутки, меньше чем 50 мс, не вижу смысла по вышеуказанной причине.
Возможно, кто-либо даст развернутый ответ и укажет более точные причины.
Кот Баюн
27.03.2014, 09:10
Проблему можно было бы решить, если бы к одному из sound-объектов приделать seconds offset (это первый аргумент в скобках после start).
sound.start(secondsoffset, loops)
Но они стартуют все одновременно, если бы была возможность их разделить.
А кстати, один кадр при 25fps - это 40 ms?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.