Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как работает это скрипт? (https://javascript.ru/forum/misc/48606-kak-rabotaet-ehto-skript.html)

SVARAI 10.07.2014 00:07

Как работает это скрипт?
 
Помогите пожалуйста разобраться в работе скрипта. Хочется понять, как генерировать wav музыку, но странно, что здесь не весь заголовок. По идее, должен быть data:audio/wav;base64,TVRoZAAAAAYAAQADAGRNVHJrAAAAHwDAUACQUH9 ggFAAAJBSf2CAUgAAkFR/YIBUAAD/LwBNVHJrAAAAEADAUQCQAACCIIAAAAD/LwBNVHJrAAAAEADAUgCQAACCIIAAAAD/LwAgIA==
В общем, как генерировать музыку?
B=new Audio();
const l=7e3;
const H="data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEAwF0AAMBdAAABAAgAZGF0YQ";
p='';


/*
*  GATE = 1;
*  C4   = 31;
*  C#4  = 28;
*  D4   = 27;
*  D#4  = 26;
*  E4   = 24;
*  F4   = 23;
*  F#4  = 22;
*  G4   = 20;
*  G#4  = 19;
*  A4   = 18;
*  A#4  = 17;
*  B4   = 16;
*  C5   = 15;
*  C#5  = 15;
*  D5   = 13;
*  D#5  = 13;
*  E5   = 12;
*  F5   = 11;
*  F#5  = 10;
*  G5   = 10;
*  G#5  = 9;
*  A5   = 9;
*  A#5  = 8;
*  B5   = 8;
*/

b=[100,100,100,100];

for(i in b){
  k=b[i];
  for(i=0;i<l;i++){p+=String.fromCharCode(65+Math.round((i>>4)%k)%26)} 
}
B.src=H+p;B.play();

Aetae 10.07.2014 01:13

Полагаю смысл в том, что base64 кодирует простой подстановкой, а потому по сути строка base64 - это тот же обычный последовательный набор бит, только в непривычной записи. Соответственно можно сразу генерировать этот набор в виде base64, вместо генерирования бинарника с последующим кодированем. На заре data:url когда ещё canvas не появился я так делал гифки с кастомной палитрой.)

Сам код генерирует base64 строку(p+=...) из рандомных символов(с определённым условием) и добавляет её к строке c wav заголовком/вступлением и объявлением data:url(const H).


Часовой пояс GMT +3, время: 09:12.