Евтин трик...

2 отговора 102 прегледа
#1

Евтин трик...

Zdrasti

Всички знаем какво въздействие има върху посетителя подбраният според тематиката на web-страницата музикален фон съчетан със сполучливо синхронизирани звукови ефекти. Обичайна практика е за музикален фон да използваме малко "късче" от някоя песен или инструментал, което се повтаря, повтаря, повтаря...и така 9999 пъти, но не повече-това е максимума :-) Но ако този, които е създал страницата има фантазия и някои умения, може да избави посетителя от монотонноста на горните 9999 пъти. Когато в първите дни ( или по точно месеци ) на Flash 5 разглеждах обновения ActionScript се увлякох по експериментите и "бъзикането" с звуковия обект. Та тогава си рекох "Абе, не мога ли да сглобя няколко откъсчета от някоя МР3-ка и да ги просвирвам по случаен брои пъти и в случайна последователност?". И както се казва : речено - сторено! Ама при мен се полъчи така че няколко седмици си останах само на РЕЧЕНО - сесия братлета... И преди да пристъпя към същинският код искам да спомена няколко неща, с които е добре да се съобразяваме:
1. Тъй като преходът от едно парче към друго не трябва да се усеща, най-подходящи са "еднообразните" музикални изпълнения т.е всякакво техно, ъндърграунд, хаос и т.н.
2. Големината на крайния фаил зависи от броя на късчетата, тяхната продължителност и качество. Повечето от нас знаят че МР3 форматът "приглушава" или напълно премахва някои честоти. Не съм голям разбирач на тая тема, но съм забелязъл, че когато подсиля честотите ( ниските- 8,10hz и високите ), които МР3 кодера на Flash "приглушава" то постигам сравнително по-добро качество срещу същата големина на файла!
3. Никога не import-вайте под МР3 формат, а само в .wav! Причината е че дължината на отделните "късчета" се отчита невярно.
4. В интерес на идеята е кадрите в секунда да са около 25.

Не използвам .stop() и start(), а setVolume(), защото на му трябва време за да инициализира звука и ако използваме първите функции границата между парчетата ще е осезаема.

И преди да пристъпя към кода...добра идея е имената под които "късчетата" са подготвени за export от библиотеката - Linkage Properties, да са цифрите от 0 до 9 включително. Пример: ако имаме 3 парчета, то имената им съответно ще бъдат 0,1 и 2. И нека на сцената има понетолкова филмчета колкото са "парчетата". Кръстете ги примерно "loop0" и т.н. Важно е да се започва от нулата...

Ето иде, идеееее...в Copy&Paste формат:

// Прикачете този код към някое от филмчетата
onClipEvent (load) {
maxLoops = 3;
daljini = "3379,3366,3366,6749,3403";
daljini = daljini.split();
for (var i = 0; i<daljini.length; i++) {
set ("zvuk"+i, new Sound(eval("_root.m"+i)));
eval("zvuk"+i).attachSound(String(i));
eval("zvuk"+i).setVolume(0);
eval("zvuk"+i).start(0, 999);
}
m = Math.floor(Math.random()*daljini.length);
_root.loop = "zvuk"+String(m);
playtime = Math.ceil(Math.random()*maxloops)*daljini[m];
eval("zvuk"+m).setVolume(100);
playtime += getTimer();
}
onClipEvent (enterFrame) {
for (var i = 0; i<100; i++) {
if (playtime<=getTimer()) {
eval("zvuk"+m).setVolume(0);
m = Math.floor(Math.random()*daljini.length);
playtime = Math.ceil(Math.random()*maxloops)*daljini[m];
eval("zvuk"+m).setVolume(100);
playtime += getTimer();
_root.loop = "zvuk"+String(m);
}
}
}


Действащ пример - [линк] и [линк]

Нямам време да обработя "парченцата" както трябва и затова може да осетите преминаването, но ако вие се постараете ще има успех.

И за изпроводяк - ако използвате този код ми дължите една бира. А ако случайно забогатеете благодарение на него - 1 каса бира!

Доскоро!

|Не се изказвай за неща, които не разбираш|

Редактирано от moonjogger на

Отговор
в отговор на moonjogger #2

Re: Евтин трик...

lol :))) ei goliamo pisane golemi tutoriali postvash naposledyk ! pozdravlenia za ambiciite !
(btw tova nali niama nishto obshto s eventualnite izbori za moderator za koito se pisa.... :)))


Отговор
в отговор на Stany #3

Re: Евтин трик...

Chestno kazano ne sym mnogo natochen za moderator. Ako prosledish temite, koito sym pysnal, to vinagi sym se staral da spodelq neshto! Ili gresha?

|Не се изказвай за неща, които не разбираш|
Отговор