Как работает это скрипт?
Помогите пожалуйста разобраться в работе скрипта. Хочется понять, как генерировать 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(); |
Полагаю смысл в том, что base64 кодирует простой подстановкой, а потому по сути строка base64 - это тот же обычный последовательный набор бит, только в непривычной записи. Соответственно можно сразу генерировать этот набор в виде base64, вместо генерирования бинарника с последующим кодированем. На заре data:url когда ещё canvas не появился я так делал гифки с кастомной палитрой.)
Сам код генерирует base64 строку(p+=...) из рандомных символов(с определённым условием) и добавляет её к строке c wav заголовком/вступлением и объявлением data:url(const H). |
Часовой пояс GMT +3, время: 09:12. |