Тип работы:
Предмет:
Язык работы:


Автоматизация написания музыкальных мелодий

Работа №51322

Тип работы

Дипломные работы, ВКР

Предмет

информатика

Объем работы93
Год сдачи2017
Стоимость4240 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
61
Не подходит работа?

Узнай цену на написание


Введение 3
Глава 1. Анализ предметной области 6
1.1. Что такое мелодия 6
1.2. Правила создания мелодии 8
1.3. Стиль мелодии. Гаммы 10
1.4. Темп 12
Глава 2. Разработка программы 13
2.1. Инструменты разработки 13
2.2. Постановка задачи. Функционал приложения 14
2.3. Кодирование гаммы 15
2.4. Кодирование и генерация нот 16
2.5. Кодирование и генерация ритма 22
2.6. Композиция. Воспроизведение 25
2.7. Построение сетки. Подсвечивание нот 28
Глава 3. Запуск программы 31
3.1. Ввод параметров, работа с сеткой, генерация 31
3.2. Изменение, сохранение, удаление 35
3.3. Хранение мелодии. Формат 37
Глава 4. Дополнения 40
4.1. Модульная арифметика 40
4.2. Многопоточность 40
4.3. Анализ аналогов и сравнение 43
4.4. Листинг программы 45
Заключение 90
Список литературы

Уже много лет людей интересует вопрос о том, смогут ли машины полностью заменить человека. Стремление к автоматизации всех процессов может привести к тому, что роль человека в жизнедеятельности сведется к минимуму. Возникает спор между теми, кто считает, что эра человеческого труда подходит к концу, и между теми, кто считает, что машина никогда не сможет иметь человекоподобный интеллект, способный принимать решения в условиях недостатка данных; интеллект, способный к творчеству, способный к абстрактному мышлению. Успехи в области ИИ продолжают удивлять нас изо дня в день, однако мы не можем похвастаться тем, что подошли достаточно близко к решению проблемы искусственного интеллекта.
Тем не менее, когда речь идет об экспертных системах, системах распознавания образов, кластеризации, проще говоря, когда речь идет о каких- то конкретных областях науки, мы можем смело перечислять свои достижения. Но когда речь идет о таких противоречивых вещах, как, например, творчество и эмоции, ученые приходят в ступор и начинают спорить. В настоящее время эти вещи являются самым принципиальным различием между роботом и человеком. Возможно, что ответы можно было бы найти, дав конкретное определение творчеству или тем же самым эмоциям. Но вряд ли найдется человек, который с уверенность объяснит нам, что же такое творчество. Если б мы хотя бы знали, является творчество детерминированным процессом или нет, можно было бы спокойно заниматься изучением этих процессов.
Подойдем ближе к нашей проблеме, а именно, к проблеме автоматизации написания музыкальных мелодий. Эта проблема волновала ученых, математиков и музыкантов еще с давних времен. Одни пытались описать музыку как математическую науку, другие пытались выявить закономерности среди мелодий, которые мы называем «благозвучными». Даже сейчас находятся люди, которые могут твердо заявить вам, что музыка - это сплошная математика. Очевидно, что просто «закодировать» музыку, т.е. представить её в виде числовых данных, не представляется сложным. В данной работе будет вестись речь и об этом. Числа, вектора, модульная арифметика - всё это наводит на мысль о том, что музыка подчиняется каким-то законам. Но то, что музыка состоит из простых вещей, не означает, что её можно с легкостью сгенерировать машинным путем. Тем не менее кое-какие успехи есть. К тому же, музыка действительно подчиняется некоторым законам. Остается только формализовать эти законы на уровне предметной области и запрограммировать их.
Однако стоит заметить, что вопрос о формализации предметной области не так прост. На первый взгляд, кажется, что чем больше правил мы сможем выявить и формализовать, тем лучше. Но на деле оказывается, что важно найти баланс между количеством правил и степенью свободы, которую мы должны дать нашему генератору мелодий. Чем меньше правил, тем меньше ограничений. Тем самым можно избавить себя от шаблонов, и возрастают шансы, что мы получим что-то действительно оригинальное, или даже гениальное. И в то же время правила предотвращают хаос, который мы можем получить на выходе, применяя недостаточное количество правил.
Отодвигая на второй план философские размышления об искусственном интеллекте, рассмотрим поближе цель данной дипломной работы. Наша цель - изучить предметную область, описать необходимое количество правил(законов), запрограммировать их и, в конце концов, разработать приложение, которое будет генерировать случайные мелодии, по возможности благозвучные. Приложение будет представлять из себя генератор мелодий. В процессе работы важно определить наши возможности: определить, какой функционал мы действительно сможем реализовать. Важно определить, что будет подаваться на вход генератору и какая у него будет степень свободы. Мы должны ответить на самые главные вопросы: как представлять мелодию в программе? Что есть мелодия для машины? Какие правила нужно программировать? Что нам под силу сделать, а что нет?
Актуальность и практический аспект проблемы генерации мелодий состоит в том, что проблема сама по себе очень интересная, и хочется узнать, каких успехов можно добиться в этой области. Также генератор можно воспринимать, как источник вдохновения. Правда встает интересный вопрос: кому принадлежит мелодия, созданная машиной? Можно упомянуть и более практическое применение. Например, создание саундтреков к мобильным приложениям, играм, клипам. Такое применение сейчас довольно популярно. В мелодии, созданной программой, есть свои плюсы. Во-первых, генератор избавляет нас от рутинной работы, если мелодий нужно придумать достаточно много. Во-вторых, вероятность того, что музыка не пройдет проверку на плагиат, крайне мала. В-третьих, удобство. На данный момент, существуют генераторы, которые могут принимать на вход множество параметров, таких как настроение, темп. Т.е. вы можете просто потребовать у программы тихую, спокойную мелодию для титров или агрессивную - для батальных сцен.
Генератор мелодий будет иметь дружелюбный интерфейс. В нем будет небольшое количество настроек понятных любому пользователю, не разбирающемуся в музыке. Генератор будет создаваться применительно к гитаре. С помощью такого генератора, пользователь сможет не только сгенерировать случайную мелодию, но также сможет увидеть, как она проигрывается на грифе гитары. Предполагается, что мелодия будет иметь стиль, например, блюз, фламенко. Пользователь сам сможет выбирать его перед созданием мелодии. В итоге в приложении можно будет задать параметры мелодии, сгенерировать мелодию, сохранить, изменить и удалить её. Также будет реализовано несколько дополнительных функций.
Объектом исследования для нас, очевидно, является теория музыки. Очень важным является начальный этап: этап моделирования и формального описания предметной области. На данном уровне формализации необходимо изучить предметную область: выделить основные аспекты, сущности, связи. Нужно использовать достаточный уровень абстракции для того, чтобы наша модель не была слишком загруженной. Для этого нам нужен эксперт предметной области. Мы сами попробуем стать этим экспертом. Достаточно быть осведомленным в некоторых вещах и изучить дополнительную литературу.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Можно с большой долей уверенности можно считать, что цель данной дипломной работы была достигнута. В процессе работы было разработано приложение, способное генерировать случайные мелодии с заданными параметрами: количество нот, стиль, темп, тоника. Приложение имеет удобный и интуитивно понятный интерфейс. Также имеется наглядная демонстрация проигрывания мелодий путем подсвечивания проигрываемых нот на гитарном грифе. Приложение работает в двух потоках. Основной поток реагирует на пользовательские действия и постоянно находится в режиме ожидания этих действий. Во втором потоке происходит проигрывание сгенерированных или сохраненных мелодий. В приложении был реализован полный CRUD мелодий. Таким образом мелодию можно не только сгенерировать, но и изменить, сохранить и удалить её.
Безусловно, более важным этапом являлся этап моделирования и формального описания предметной области. На данном уровне предметная область была детально изучена и описана. Были выделены основные сущности и их связи. Был применен достаточный уровень абстракции, позволяющий не потерять смысл всего процесса.
Конечный результат получился достаточно приемлемым для проблемы такого уровня. Мелодии генерируются в необходимой степени благозвучные.
В процессе работы была разработана система машинного представления мелодии, музыкальных ладов, ритма. Были разработаны алгоритмы генерации нот по определенному звукоряду, алгоритмы генерации ритма, алгоритм построения аппликатурной сетки по музыкальному ладу.
Стоит отметить, однако, что мелодии не всегда могут показаться нам приятными для слуха. Попробуем ответить на вопрос: хорошо это или плохо. Стоит вспомнить рассуждения, касающиеся степени свободы генератора. Первая мысль такова: чем больше правил мы сможем выявить и формализовать, тем лучше. Но было сказано про баланс между количеством правил и степенью свободы, которую мы должны дать нашему генератору мелодий. Таким образом было принято решение взять только определенный набор правил, необходимый для того, чтобы мелодия принадлежала пространству мелодий данного музыкального лада. Но не давалось никаких намёков на более конкретную структуру мелодии для того, чтобы избежать шаблонности.
В процессе разработки мы столкнулись с проблемой блокирования пользовательского интерфейса в связи с тем, что воспроизведение мелодии занимало основной поток своим выполнением. Для решения этой проблемы очевидным стало создание второго потока, в котором выполнялось воспроизведение мелодии. Основной поток приложения стал свободным и использовался теперь для того, чтобы постоянно находиться в режиме ожидания пользовательских действий.
В начале проектирования архитектуры приложения было не совсем понятно, в каком виде хранить мелодию. Для этого был создан класс Melody. Параметрами его конструктора служили название мелодии, ноты, ритм, название лада. Таким образом мелодия состоит из нот и ритма. Ноты берутся из гаммы музыкального лада, который задан. Причем ноты имеют не абсолютное значение, а относительное. Они указываются относительно тоники: нашей точки отсчета. Так достигается гибкость, так как наша мелодия не зависит от тоники, которую мы укажем, и мы можем проигрывать нашу мелодию от любой начальной ноты. Такое решение кажется наиболее гибким.
Также было неясно, как представлять и генерировать ритм. Хотя после того, как решение получено, кажется, что оно очевидное и единственно верное. Ритм - совокупность нот и пауз. Первая мысль - хранить эти длительности нот и пауз в виде промежутков времени. Но наилучшим вариантом является хранение двоичных векторов, как это и сделано в нашем приложении. Таким образом время всей мелодии делится на равные доли, и каждая доля имеет своё соответствующее значение в двоичном векторе. 1 - играется нота, 0 - пауза. При таком проектировании опять же достигается гибкость, так как темп мелодии никак не будет зависеть от ритма. Получается, что мелодия не зависит ни от тоники, ни от темпа, что и соответствует действительности. В самом деле, мелодия ни коим образом не зависит от выбранной тоники и от темпа. При изменении этих параметров, мелодия остается прежней. Все эти нюансы учитывались при разработке приложения.
Для задания стиля мелодии использовались названия музыкальных ладов, и, следовательно, стиль полностью определяется набором нот из гаммы выбранного звукоряда. Конечно, стиль определяется и другими параметрами, например, ритмом и приемами игры. Но в данной работе эти параметры не учитываются, что, безусловно, дает мотивацию для дальнейших усовершенствований.
Правда, остались нерешенными некоторые интересные задачи, ставшие следствием нашей работы. Открытым остался вопрос гармонизации мелодии. Наша мелодия не зависит от аккомпанемента. Таким образом можно было бы разрабатывать алгоритм генерации мелодии, которая зависит от играющего в аккомпанементе аккорда. Но тогда пришлось быть значительно менять алгоритм генерации. Вместо этого лучше было бы предпочесть другой вариант: предлагать аккомпанемент по уже сгенерированной мелодии.
Приложение является законченным продуктом с достаточным набором функций. Однако оно может быть расширено. Не представляет труда пополнить список музыкальных ладов. В данной работе был реализован только небольшой список, но архитектура приложения позволяет без труда добавить большее количество ладов. Конечно, в перспективе наилучшим вариантом будет возможность добавления ладов самим пользователем. Также существуют варианты для реализации аккомпанемента, о котором было сказано чуть выше. Множество идей может быть реализовано, так как тема генерации мелодий довольно обширна. Мы же рассмотрели эту проблему только с одной стороны: стороны генерации основной мелодии произведения. Также существуют проблемы гармонизации и многие другие проблемы, которые требуют тщательного анализа и изучения.



Гуриков,С.Р. Введение в программирование на языке Visual С#/С.Р.Гуриков.- М.:Инфра-М, 2013. - 448 c
Молотков,В.А. Джазовая импровизация на шестиструнной гитаре
/В.А.Молотков.-Киев.:Музычна Украйина,1989.-150с.
Приемы объектно-ориентированного программирования. Паттерны
проектирования /Э.Гамма, Р.Хелм, Р.Джносон и др.-СПб.:Питер,2001.-368с.
Рихтер,Д. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C# /Д.Рихтер.-СПб.:Питер, 2013. - 896 c.
Русаков,М.В. Секреты импровизатора /М.В.Русаков.-М., 2013.-80с.
Стиллмен,Э. Изучаем C# /Э.Стиллмен, Дж.Грин.-СПб.:Питер, 2012.-696с. Фленов, М.Г. Библия C# /М.Г.Фленов.-СПб.:Питер, 2011. - 560 c.
Чакон,С. Git для профессионального программиста /С.Чакон, Б.Штрауб.- СПб.:Питер,2016.-496с.
Шилдт,Г. С#: Полное руководство /Г.Шилдт.-М.:Вильямс, 2011.-1056с.


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ