Музыкальный Генератор. Api Веб-Аудио. Опыт Новичка



Контекст и предыстория Мне 62. Три года назад я решил попробовать написать достаточно сложную систему, до этого на Бейсике было всего 20 строк в 1981 году, когда нам давали 3 месяца информатики на 5 курсе радиофака (НГТУ).

, ранее NЭTI).

Профессионалом считается тот, кто владеет предметом и зарабатывает на этом деньги, поэтому по сути я новичок.

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

В 1978 году разработал и собрал синтезатор а-ля Мини-Муг (полагаю, первый за Уралом), разработал и выпустил первую в СССР звуковую карту с синтезатором для Агат7(9) - советского аналога Apple II, спроектировавшая модуль FM-синтеза для одной из фабрик, сотрудничала с Cakewalk (США), PGMusic (Канада), PowerFX (Швеция) — чаще по схеме: «идеи и реализация от нас, бюджет от них», участвовал в международных музыкальных выставках MusikMesse (Германия), NAMM (США) и др.

Все это малая часть того, что я делал, естественно, не один, а с командой, которую собрал в конкретный момент. Плюс он принял активное участие в организации кафедры информатики (1-й в СССР) в Новосибирской консерватории.

Там с 1983 по 2004 год преподавал «Музыкальную акустику», «Информатику», «Звукотехнику», подготовил диссертацию по компьютерному моделированию музыкального исполнения (ISBN 5-9294-0023-7)… Да, все начиналось с черно-белых мониторов, дискет, 256 кбайт оперативной памяти, музыкального ПК собственного изготовления.

Музыкантам все приходилось объяснять «на пальцах», ведь эти замечательные люди в большинстве своем далеко не все строго и упорядоченно.

И если тромбонист мог написать страницу текста, он был крут, а виолончелист, программировавший «Чижик-Пижик», был просто звездой.

Кстати, некоторые учителя активно сопротивлялись всей этой теме – попробуйте теперь лишить их компьютеров! Этот опыт был очень полезен для моего развития, изучения и углубления в предмет. Информатика, как и физкультура, была обязательной на всех факультетах и постоянный приток студентов позволял нам проводить множество тестов, экспериментов по психоакустике, распознаванию образов, общаться с музыкантами-теоретиками и.

понимать, что точных данных у них практически нет и формулы.

По крайней мере те, которые нужны разработчику музыкального оборудования и программ.

Музыковеды, к сожалению, по своей сути являются историками, описывающими прошлое.

Если бы у них была наука, то.

наверное, попасть к ним на консультацию было бы проще, чем попасть к мэру города-миллионника.

Сколько заплатил бы известный музыкант за «формулу хита» и «прогноз продаж»?.

Допустим, нам нужно получить ответы, подходящие, например, для алгоритмов: а) прозвучала мелодия (ну, даже если она уже записана как «ноты» в MIDI), как определить, где находится тоника? — Музыкант это сделает легко, но алгоритм не даст вам однозначного ответа; б) есть мелодия, как правильно подобрать к ней аккорды?.

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

Конечно, с их точки зрения, она будет строгой.

Только когда инженер начнет переводить это в алгоритм, возникнет несколько сложных неопределенных.

в) или барабанщик играет что-то в меру сложное, или саксофонист импровизирует - как «убрать» тактовый размер, сильные/слабые доли, начало/конец музыкальной фразы, выразительное замедление/ускорение? Речь идет не об EDM (электронной танцевальной музыке).

Музыкант-исполнитель чувствует и следует «правилам», передаваемым преподавателем по принципу «делай как я», а инженеру нужны цифры, графики, пропорции, а всего этого практически невозможно добиться ни от исполнителя, ни от музыковеда.

-теоретик.

Но именно на такие вопросы мне хотелось найти ответы.

Ведь реально звучащее произведение может иметь приблизительную модель – музыкальную композицию в формате MIDI, т.е.

, по сути, «электронную партитуру».

Это точные данные, но как с ними работать? В общем, самым интересным для меня в итоге стал анализ и преобразование MIDI-данных и алгоритмов*, таких как: Моделирование производительности 1) , Морфинг 2) , Генерация музыки 3) И при всём этом определение тональности, автогармонизация, автофразировка - это всего лишь отдельные подзадачи.

Со временем на все эти темы были получены приемлемые ответы, созданы алгоритмы и программы, что-то даже попало в Cakewalk/Sonar. *Краткая расшифровка: 1) анализ квантованных MIDI-данных, распознавание «музыкальных объектов» (фраз, фигур) и их изменение по показателям Velocity, NoteOn, Duration, а также наложение кривых Tempo, PitchWeel, Expression, Modulation для более полного используйте возможности синтезатора и добейтесь большей выразительности.

2) анализ как всего произведения, так и отдельных частей с целью преобразования их из одного размера в другой (например, из 4/4 в 6/8 или 7/4), из одного лада/гармонии в другие.

При этом результат должен быть «съедобным» — таким, чтобы, по мнению музыканта, это была «правильная» музыка, без явных нарушений.

3) создание «электронной партитуры» — системы, которая при использовании 1) и 2) и воспроизведении MIDI-данных выдавала бы на выходе звук, аналогичный тому, который музыкант, аранжировщик производит с помощью компьютера или живого инструмента.

Те.

не что-то абстрактное, сгенерированное ИИ не только для демонстрации узкому кругу специалистов, а вполне «человеческое» и пригодное для использования.

В этой длинной истории было немало забавных моментов, если смотреть на нее из настоящего времени, например, за первые 386 ПК нужно было заплатить 2 новых москвича «Шиньон» (ИЖ 2715) каждый по 290 тысяч рублей.

.

Или как консерватория чуть не приобрела у Сибирского отделения Академии наук б/у Минск 32 - я считаю, этот монстр, слабее смартфона, вроде бы занимал 60-80 м.

2 и потребляемая электроэнергия, наверное, как бар+сауна.

Итак, мои сотрудники занимались программированием (мы работали с Z80, МОС 6502, «Электроникой-60», на первом Win PC из ГДР, с сигнальными процессорами TMS и Analog Devices.), я каждый день видел «кракозябры».

на экранах и посчитал, что все они (программисты) «не от мира сего».

Хотя музыкальное сопровождение не проще! А некоторые музыканты слышат музыку, глядя на ноты, и даже получают эстетическое удовольствие, если она им нравится! В общем, мне казалось, что каждый, кто пишет код, — гений и это совсем не мое… Но, как показало будущее, я ошибался.

Не скажу, что было потеряно много времени, но, наверное, судьба многих проектов сложилась бы совсем иначе.



Первый практический опыт

Из предыдущего опыта я усвоил, что наиболее «сложными», «неприятными» для программиста являются 2 вещи: GUI и интерфейсы (т.е.

переход из одной среды в другую.

Например, получение MIDI-данных с внешнего устройства), особенно когда Подходящих готовых решений нет. Для начала я взял AutoPlay Media Studio (Indigo Rose Software) — это что-то вроде конструктора для чайников.

Изначально видимо предназначался для быстрого создания меню CD, DVD и autorun.exe. Но оказалось, что функций очень много, и внутри (в LUA) можно делать практически всё: анимацию, воспроизведение ogg. Таким образом, большую часть «неприятной» работы (кстати, я думаю, именно в такие моменты новички застревают) можно было и не делать — все было готово.

В итоге за 2 месяца дома, в нерабочее время, я написал аналог образовательной музыкальной программы, которую мы разработали и официально поставили.

Тем более, что с другим GUI, более интересным функционалом — благо сделать аудио и графический контент и протестировать его мне не составляет труда.

Показал в офисе и спросил у одного из ведущих, сколько времени ему нужно, чтобы сделать такую версию, ответ - 6 месяцев! Здесь, видимо, я впервые задумался: а может, мне не только побаловать себя, но начать чему-то учиться и попробовать заняться чем-то серьезным и.

правильно ли я организовал работу.

На самом деле его ответ был честен — просто «они» не будут использовать конструктор, а напишут всё сами.

С 2009 года часть своего времени я посвящаю работе в студии звукозаписи и созданию видеорекламы.

Друг как-то спросил, можно ли быстро (и недорого) сделать сотню 1-минутных видеороликов (видимо для продвижения на YouTube).

Я очень люблю такие задачи! (Кстати, я давно знаю, что если программиста заставить 3 раза сделать что-то не очень креативное, он напишет скрипт).

Я спросил у программистов, существует ли такая программа, которая могла бы сама «нажимать» кнопки на экране? Вау, это AutoIt! Итак, просто ради интереса я написал скрипт, который:

  1. запустил Opera, открыл сайт какой-то (кажется, голландской) компании, специализирующейся на «преобразовании текста в речь»;
  2. на странице прокручивается до RU (русская озвучка);
  3. открыл в Блокноте файл *.

    txt, куда заранее, по абзацам, скопировал из сети 20-30 анекдотов;

  4. скопировал одну шутку и вставил ее в поле на сайте;
  5. запустил SoundForge для записи и включил воспроизведение на сайте;
  6. Результат я записал и сохранил в папке mp3 с названием «серийный номер + первые 15 символов из текста самой шутки».

Это сработало, и я был счастлив, как ребенок.

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

я могу сделать вам не 100, а 200 таких роликов (это легко в Vegas Pro с AutoIt), просматривая их выборочно, и вы подберете для себя необходимый номер.

Мне не пришлось всего этого делать, но спасибо, что спросили ее! Позже я постепенно стал что-то исправлять на сайте, что-то читать, что-то пробовать ради интереса.

В частности, создавайте сценарии JavaScript/CSS для простых анимаций, необходимых при создании видео.

Так появились некоторые общие идеи и небольшой опыт работы с PHP, HTML, jQuery, JavaScript, CSS, MySQL. «Сухари» почти исчезли и меня больше не пугает сама эта тема «программирования».

Окончательный перелом в моем отношении к ней и своим возможностям произошел, когда я осознал 2 вещи:

  • вся эта сфера — бесконечный мир, и даже сильный программист не всегда ответит на вопрос, не его ли это область.

    Как и в любой другой сфере.

    В целом да, но по поводу нюансов ищите специалиста, а еще лучше копайте сами.

    К счастью, есть сеть.

  • 99% вопросов, которые возникали у меня при разработке, я решил сам, причем порой эффективнее, чем в примерах, найденных в Интернете.

    При этом я понимаю, что с точки зрения стиля написания мой код мог быть ужасен.



Музыкальный генератор

Не помню, как я наткнулся на Web Audio API, к тому времени у меня не было ни ООО, ни ИП, ни команды, но после 2-3 экспериментов, когда звук начал работать, я решился на самый серьезный для меня проект — музыкальный генератор (который я теперь называю АлексАр ).

Ведь в Web Audio было все необходимое — генераторы, фильтры, конверты, микшеры, процессор (на C++), а jQuery, JavaScript и CSS позволяли решить все проблемы с графическим интерфейсом.

На самом деле в Web Audio, как мне кажется, можно заниматься и обработкой, и синтезом звука любой сложности.

Вот тут-то и началась настоящая работа, почти как в молодости, когда тебе 25+.

Раза 3-4 начинал заново, отбрасывая одну версию системы и собирая новую.

Иногда кардинально меняют подход к проектированию того или иного модуля.

При этом я провёл много экспериментов и протестировал новые алгоритмы, которые раньше не использовал.

Я сделал для себя несколько открытий, которых бы не произошло без запуска системы.

В частности, в психоакустике, в восприятии «сходства» музыкальных треков – какие параметры будут давать «разную» музыку, а какие, несмотря на формальные различия, будут звучать для уха «одинаково».

Были найдены очень полезные вещи в плане использования гармонии, имитации при щипковом синтезе, фразировки при смене аккордов, лучшего понимания «стилистической точности».

Вполне возможно, что всё это открыто и описано.

Но в жизни часто бывает, что проще (и полезнее) разобраться самому.

Да, было бы здорово, если бы Web Audio API позволял привязку, использование для синтеза VSTi или что-то еще из коробки.

С другой стороны, был повод вспомнить молодость и написать все необходимые синтезаторы, придумать, оптимизировать, как по структуре, так и по алгоритмам и содержанию.

Почти как в старину, когда художник не только писал картину, но и сам делал краски.

В итоге после нескольких откатов и переделок, модернизаций (что было хорошей школой и тренировкой мозгов) система стала стабильной и вполне работоспособной.

Ну, не в таком виде, конечно, когда его можно передать третьему лицу.

Это примерно как самодельный автомобиль, который «слушает» только своего создателя и если он сломается, то починить его будет некому.



Музыкальный генератор.
</p><p>
 API веб-аудио.
</p><p>
 Опыт новичка

В целом готовую композицию она создает за 4-5 минут за 40-50 секунд. (на Intel Core i5, 2,8 ГГц, 12 ГБ ОЗУ).

Я поставил задачу, например, «сделать 100 танцевальных треков», переключился на обед или пошел на прогулку.

Он пришёл через час и, если система не зависла, прослушал и определил %% годности результата.

Потом я что-то поменял в параметрах и запустил заново.

Если бы я вел себя «разумно», т.е.

ставил параметры, которые не приводили к размытию стиля (например, так будет, если использовать джазовую гармонию в EDM), то 90-95% треков звучали вполне прилично, и если нет, то 60-70%% можно было бы выбросить.

Система сработала, можно радоваться, но тут начались, казалось бы, смешные, но настоящие проблемы: «Как я могу слушать столько музыкиЭ» И осознание еще одного пункта: «Кто авторЭ» Мой знакомый хороший человек, "в курсе" сказал, что "автор - компьютер, в т.ч.

оно тебе не принадлежит»… Если так, то обидно, потому что я вписал туда мелодии, фразы, гармонии, формы, настроил пару сотен параметров, где иногда в результате отражаются 5 мс, и система только выдала результат, опять же по тому алгоритму, который я в нее заложил.

Поискал в сети и не понял, что в таком случае с авторскими правами.

В результате я выпустил около 3500 композиций общим временем звучания более 200 часов и остановился, а точнее переключился — планирую запустить SongModeler — онлайн-генератор аранжировок, основанный на подходах, отработанных в AlexAr. Ну а примеры автоматической генерации музыки вы можете посмотреть в AlexAr. Здесь .

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

нотам), но синтез и сведение, конечно, могли бы быть гораздо лучше.

В итоге я проверил идеи и сам подход — он правильный.

А такие проекты требуют команды; люди редко берутся за междисциплинарные темы.

Правда, с другой стороны, работать становится гораздо комфортнее, когда нет никого «ни над тобой, ни под тобой».

Но настоящая ирония в том, что, когда у меня была команда и ресурсы, я не пробовал что-то подобное, потому что считал это слишком сложным.

Уже где-то в середине работы над AlexAr я понял, что вполне возможно, что если бы я начал программировать раньше, то 10 программистов (иногда меня в штате было значительно больше) можно было бы заменить три : сам (дизайн, программирование, тестирование, контент); очень умно — для узких мест, для разведки подходов, новых библиотек, сервисов (сразу после университета или с 3-4 курса); продуктивный работник для рутинных задач, без фантазии, кому не чешется сегодня использовать то, что появилось вчера.

Уверен, проблема решилась бы быстрее, а сколько нервов и денег было бы сэкономлено! Откуда берется экономия? Итак, перед обедом сел кое-что протестировать — «ну кнопка не удобная, а индикатор надо побольше и вправо сдвинуть».

ОК - сел и сделал за полчаса, настроение было 5+.

Как что-то подобное решалось бы раньше в моем офисе с моей командой, если бы вы не писали это сами? Я бы сначала спросил, сколько времени это займет, потом нарисовал в Фотошопе, посчитал пиксели, написал ТЗ, включил в план, подождал пару дней или.

вообще забросил - работает, уже хороший.

И так постоянно.



Выводы и мотивация

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

  1. В любой сфере профессионал скептически относится к дилетанту, новичку, и причин для этого достаточно.

    Однако сильных профессионалов в любой области не так много и они, как правило, более снисходительны, чем новоиспеченный специалист. Я уверен, что Каждый должен попробовать программировать и как можно скорее.

    Вполне возможно, что через 10 лет теорию и практику будут преподавать в школе так же, как родной язык и математику (а может, уже делают?).

  2. Какой язык НЕ важно.

    Раньше я думал, что если заказчик просит что-то на macOS или Android, то ему нужен человек с опытом в этом.

    Немного навыки структурирования задачи важнее к подзадачам, построить архитектуру и способность к обучению .

    Особенно, если проект сложный.

  3. Никогда не смешивайте код графического интерфейса с частями, в которых выполняются алгоритмы и обработка данных - структура.

    Я слышал об этом несколько лет подряд, но по-настоящему почувствовал это только тогда, когда не раз наступал на эти грабли.

    Хотя очень хочется прикрепить перевод к экспоненте, запись в массив, вывод в индикатор и еще что-то прямо к ползунку.

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

    Это сработало – он сразу бросил школу и продолжил «пилить».

    Но я всегда чувствовал себя семиклассником, провалившим первые шесть классов школы.

    Кажется, можно успокоиться – ведь это работает, а почему – не важно.

    Да, радиоинженер может уже не знать и не помнить закон Ома.

    За что? Все цельно – хозяйка может собрать усилитель по инструкции, подключить акустику и устроить вечеринку для гостей.

    Но я всё равно испытываю определённый дискомфорт во всех случаях, когда я «не понимаю физику» — т. е.

    что именно происходит, когда эта линия «работает».

  5. С другой стороны, теперь я понимаю, что этого достаточно.

    большинство программистов ( инженер-программист , если быть точным!) вообще НЕ инженеры .

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

    И, вполне возможно, если бы они действительно были инженер , они бы решили задачу иначе, потому что разбирались бы в «физике, природе», т.е.

    не только методом «копипаста».

  6. Как и в жизни, в реальном проекте, даже если работа только с текстами — это фактически «винегрет» из разных языков, библиотек, фреймворков и т. д. А это не очень приятно.

    Было бы здорово изучать одно и не знать о существовании другого.

    Но если эти языки и инструменты появились и используются, то они работают. Только для разных задач - разные средства .

    В таких случаях я говорю – смиритесь с этим.

    И, кстати, настоящий музыкант слушает, понимает и умеет играть разную музыку.

  7. Что отличает профессионала от любителя в любой области? профессиональный, проверенный инструмент .

    Вам нужно найти время и выбрать, изучить, настроить IDE, VCS. К сожалению, я до сих пор этого не сделал: я использовал только NotePad++, инструменты разработчика FireFox и ZIP-архив через день.

    Освоить инструменты «на лету» не удалось.

    Попробовал, бросил и продолжил делать на коленях, но обязательно разберусь.

  8. Что дает вам уверенность? Когда ты решил нетривиальную для себя задачу .

    В моем проекте такого было много, но было два четких, общих момента — основной таймер и UnDo/ReDo. Стандартных функций JavaScript для таймера недостаточно, то, что я нашел в сети, да и хороших решений не так много, громоздко.

    В итоге я сделал свой, скорее всего, на основе давнего подхода, восходящего к радиотехнике.

    А с UnDo - честно говоря, я просто не понял, как прикрепить найденное к своей системе.

В общем, мне кажется, что взрослым, особенно тем, кто имеет инженерное образование и не посвятил свою жизнь программированию, стоит попробовать.

Если вы знаете свой предмет, то 50% уже сделано.

От вас требуется логика, четкое понимание «физики, природы» вашей области, и она у вас, скорее всего, есть.

В «кракозябрах» нет ничего плохого, а JavaScript намного проще русского или английского.

В конце концов, вы, возможно, и не станете настоящим инженером-программистом, но эти навыки, даже небольшие, добавят еще одну возможность к вашей инженерной квалификации.

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

В конце концов, они едут в ваш район, где вы профи.

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

И в любом случае – программирование для инженера – это СВОБОДА! Наилучшие пожелания всем.

P.S.: Если кого-то интересует история моего творчества за разные годы в более подробном виде, то вот она Здесь .

Теги: #JavaScript #API веб-аудио #генератор музыки #опыт для новичков

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.