Контекст и предыстория Мне 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! Итак, просто ради интереса я написал скрипт, который:
- запустил Opera, открыл сайт какой-то (кажется, голландской) компании, специализирующейся на «преобразовании текста в речь»;
- на странице прокручивается до RU (русская озвучка);
- открыл в Блокноте файл *.
txt, куда заранее, по абзацам, скопировал из сети 20-30 анекдотов;
- скопировал одну шутку и вставил ее в поле на сайте;
- запустил SoundForge для записи и включил воспроизведение на сайте;
- Результат я записал и сохранил в папке 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 или что-то еще из коробки.
С другой стороны, был повод вспомнить молодость и написать все необходимые синтезаторы, придумать, оптимизировать, как по структуре, так и по алгоритмам и содержанию.
Почти как в старину, когда художник не только писал картину, но и сам делал краски.
В итоге после нескольких откатов и переделок, модернизаций (что было хорошей школой и тренировкой мозгов) система стала стабильной и вполне работоспособной.
Ну, не в таком виде, конечно, когда его можно передать третьему лицу.
Это примерно как самодельный автомобиль, который «слушает» только своего создателя и если он сломается, то починить его будет некому.
В целом готовую композицию она создает за 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+.
Как что-то подобное решалось бы раньше в моем офисе с моей командой, если бы вы не писали это сами? Я бы сначала спросил, сколько времени это займет, потом нарисовал в Фотошопе, посчитал пиксели, написал ТЗ, включил в план, подождал пару дней или.
вообще забросил - работает, уже хороший.
И так постоянно.
Выводы и мотивация
Не знаю, насколько гармонично мне удастся сформулировать реальные выводы, особенно не в моей области, но я попробую.
- В любой сфере профессионал скептически относится к дилетанту, новичку, и причин для этого достаточно.
Однако сильных профессионалов в любой области не так много и они, как правило, более снисходительны, чем новоиспеченный специалист. Я уверен, что Каждый должен попробовать программировать и как можно скорее.
Вполне возможно, что через 10 лет теорию и практику будут преподавать в школе так же, как родной язык и математику (а может, уже делают?).
- Какой язык НЕ важно.
Раньше я думал, что если заказчик просит что-то на macOS или Android, то ему нужен человек с опытом в этом.
Немного навыки структурирования задачи важнее к подзадачам, построить архитектуру и способность к обучению .
Особенно, если проект сложный.
- Никогда не смешивайте код графического интерфейса с частями, в которых выполняются алгоритмы и обработка данных - структура.
Я слышал об этом несколько лет подряд, но по-настоящему почувствовал это только тогда, когда не раз наступал на эти грабли.
Хотя очень хочется прикрепить перевод к экспоненте, запись в массив, вывод в индикатор и еще что-то прямо к ползунку.
- Как бы ни чесались руки побыстрее что-то собрать, все равно нужен фундамент - основы, курсы, статьи и т. д. Да, когда я заходил в тупик, когда что-то не получалось, я смотрел видео и сайты.
Это сработало – он сразу бросил школу и продолжил «пилить».
Но я всегда чувствовал себя семиклассником, провалившим первые шесть классов школы.
Кажется, можно успокоиться – ведь это работает, а почему – не важно.
Да, радиоинженер может уже не знать и не помнить закон Ома.
За что? Все цельно – хозяйка может собрать усилитель по инструкции, подключить акустику и устроить вечеринку для гостей.
Но я всё равно испытываю определённый дискомфорт во всех случаях, когда я «не понимаю физику» — т. е.
что именно происходит, когда эта линия «работает».
- С другой стороны, теперь я понимаю, что этого достаточно.
большинство программистов ( инженер-программист , если быть точным!) вообще НЕ инженеры .
Это механики, зачастую не очень высокой квалификации, которые могут по аналогии (спасибо им за это) собрать из готовых модулей что-то, что будет выглядеть и работать достойно у заказчика.
И, вполне возможно, если бы они действительно были инженер , они бы решили задачу иначе, потому что разбирались бы в «физике, природе», т.е.
не только методом «копипаста».
- Как и в жизни, в реальном проекте, даже если работа только с текстами — это фактически «винегрет» из разных языков, библиотек, фреймворков и т. д. А это не очень приятно.
Было бы здорово изучать одно и не знать о существовании другого.
Но если эти языки и инструменты появились и используются, то они работают. Только для разных задач - разные средства .
В таких случаях я говорю – смиритесь с этим.
И, кстати, настоящий музыкант слушает, понимает и умеет играть разную музыку.
- Что отличает профессионала от любителя в любой области? профессиональный, проверенный инструмент .
Вам нужно найти время и выбрать, изучить, настроить IDE, VCS. К сожалению, я до сих пор этого не сделал: я использовал только NotePad++, инструменты разработчика FireFox и ZIP-архив через день.
Освоить инструменты «на лету» не удалось.
Попробовал, бросил и продолжил делать на коленях, но обязательно разберусь.
- Что дает вам уверенность? Когда ты решил нетривиальную для себя задачу .
В моем проекте такого было много, но было два четких, общих момента — основной таймер и UnDo/ReDo. Стандартных функций JavaScript для таймера недостаточно, то, что я нашел в сети, да и хороших решений не так много, громоздко.
В итоге я сделал свой, скорее всего, на основе давнего подхода, восходящего к радиотехнике.
А с UnDo - честно говоря, я просто не понял, как прикрепить найденное к своей системе.
Если вы знаете свой предмет, то 50% уже сделано.
От вас требуется логика, четкое понимание «физики, природы» вашей области, и она у вас, скорее всего, есть.
В «кракозябрах» нет ничего плохого, а JavaScript намного проще русского или английского.
В конце концов, вы, возможно, и не станете настоящим инженером-программистом, но эти навыки, даже небольшие, добавят еще одну возможность к вашей инженерной квалификации.
Да, вы сразу перестанете смотреть на айтишников как на людей с ореолом над головой и сможете ставить перед ними задачи на более компетентном уровне.
В конце концов, они едут в ваш район, где вы профи.
А может быть, вы реализуете свой проект, используя собственные данные, о которых давно мечтали, но не сложились условия для его реализации – не знаю, считаю себя счастливчиком, потому что не побоялся попробовать.
И в любом случае – программирование для инженера – это СВОБОДА! Наилучшие пожелания всем.
P.S.: Если кого-то интересует история моего творчества за разные годы в более подробном виде, то вот она Здесь .
Теги: #JavaScript #API веб-аудио #генератор музыки #опыт для новичков
-
Плюсы И Минусы Аппаратного Шифрования
19 Oct, 24 -
Фантастическая Технология Hd-Dvr
19 Oct, 24 -
Брэд
19 Oct, 24 -
О Флагах 0X41414141 Раз
19 Oct, 24