Оглавление

Введение        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. Изменение, сохранение, удаление        34

3.3. Хранение мелодии. Формат        37

Глава 4. Дополнения        39

4.1. Модульная арифметика        39

4.2. Многопоточность        39

4.3. Анализ аналогов и сравнение        42

4.4. Листинг программы        44

Заключение        89

Список литературы        92

                                        Введение



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

НЕ нашли? Не то? Что вы ищете?

Тем не менее, когда речь идет об экспертных системах, системах распознавания образов, кластеризации, проще говоря, когда речь идет о каких-то конкретных областях науки, мы можем смело перечислять свои достижения. Но когда речь идет о таких противоречивых вещах, как, например, творчество и эмоции, ученые приходят в ступор и начинают спорить. В настоящее время эти вещи являются самым принципиальным различием между роботом и человеком. Возможно, что ответы можно было бы найти, дав конкретное определение творчеству или тем же самым эмоциям. Но вряд ли найдется человек, который с уверенность объяснит нам, что же такое творчество. Если б мы хотя бы знали, является творчество детерминированным процессом или нет, можно было бы спокойно заниматься изучением этих процессов.

Подойдем ближе к нашей проблеме, а именно, к проблеме автоматизации написания музыкальных мелодий. Эта проблема волновала ученых, математиков и музыкантов еще с давних времен. Одни пытались описать музыку как математическую науку, другие пытались выявить закономерности среди мелодий, которые мы называем «благозвучными». Даже сейчас находятся люди, которые могут твердо заявить вам, что музыка – это сплошная математика.  Очевидно, что просто «закодировать» музыку, т. е. представить её в виде числовых данных, не представляется сложным. В данной работе будет вестись речь и об этом. Числа, вектора, модульная арифметика – всё это наводит на мысль о том, что музыка подчиняется каким-то законам. Но то, что музыка состоит из простых вещей, не означает, что её можно с легкостью сгенерировать машинным путем. Тем не менее кое-какие успехи есть. К тому же, музыка действительно подчиняется некоторым законам. Остается только формализовать эти законы на уровне предметной области и запрограммировать их.

Однако стоит заметить, что вопрос о формализации предметной области не так прост. На первый взгляд, кажется, что чем больше правил мы сможем выявить и формализовать, тем лучше. Но на деле оказывается, что важно найти баланс между количеством правил и степенью свободы, которую мы должны дать нашему генератору мелодий. Чем меньше правил, тем меньше ограничений. Тем самым можно избавить себя от шаблонов, и возрастают шансы, что мы получим что-то действительно оригинальное, или даже гениальное. И в то же время правила предотвращают хаос, который мы можем получить на выходе, применяя недостаточное количество правил.

Отодвигая на второй план философские размышления об искусственном интеллекте, рассмотрим поближе цель данной дипломной работы. Наша цель – изучить предметную область, описать необходимое количество правил(законов), запрограммировать их и, в конце концов, разработать приложение, которое будет генерировать случайные мелодии, по возможности благозвучные. Приложение будет представлять из себя генератор мелодий. В процессе работы важно определить наши возможности: определить, какой функционал мы действительно сможем реализовать. Важно определить, что будет подаваться на вход генератору и какая у него будет степень свободы. Мы должны ответить на самые главные вопросы: как представлять мелодию в программе? Что есть мелодия для машины? Какие правила нужно программировать? Что нам под силу сделать, а что нет?

Актуальность и практический аспект проблемы генерации мелодий состоит в том, что проблема сама по себе очень интересная, и хочется узнать, каких успехов можно добиться в этой области. Также генератор можно воспринимать, как источник вдохновения. Правда встает интересный вопрос: кому принадлежит мелодия, созданная машиной? Можно упомянуть и более практическое применение. Например, создание саундтреков к мобильным приложениям, играм, клипам. Такое применение сейчас довольно популярно. В мелодии, созданной программой, есть свои плюсы. Во-первых, генератор избавляет нас от рутинной работы, если мелодий нужно придумать достаточно много. Во-вторых, вероятность того, что музыка не пройдет проверку на плагиат, крайне мала. В-третьих, удобство. На данный момент, существуют генераторы, которые могут принимать на вход множество параметров, таких как настроение, темп. Т. е. вы можете просто потребовать у программы тихую, спокойную мелодию для титров или агрессивную – для батальных сцен.

Генератор мелодий будет иметь дружелюбный интерфейс. В нем будет небольшое количество настроек понятных любому пользователю, не разбирающемуся в музыке. Генератор будет создаваться применительно к гитаре. С помощью такого генератора, пользователь сможет не только сгенерировать случайную мелодию, но также сможет увидеть, как она проигрывается на грифе гитары. Предполагается, что мелодия будет иметь стиль, например, блюз, фламенко. Пользователь сам сможет выбирать его перед созданием мелодии. В итоге в приложении можно будет задать параметры мелодии, сгенерировать мелодию, сохранить, изменить и удалить её. Также будет реализовано несколько дополнительных функций.

Объектом исследования для нас, очевидно, является теория музыки. Очень важным является начальный этап: этап моделирования и формального описания предметной области. На данном уровне формализации необходимо изучить предметную область: выделить основные аспекты, сущности, связи. Нужно использовать достаточный уровень абстракции для того, чтобы наша модель не была слишком загруженной. Для этого нам нужен эксперт предметной области. Мы сами попробуем стать этим экспертом. Достаточно быть осведомленным в некоторых вещах и изучить дополнительную литературу.

Глава 1. Анализ предметной области

                                1.1. Что такое мелодия        



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

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

       Попробуем дать определение мелодии. Мелодия – это 

1) последовательность нот, сыгранных

2) с определенным ритмом,

3) от выбранной тоники,

4) с выбранным темпом,

5) каким-либо инструментом.

       Что здесь для нас важно? Мелодия = ноты + ритм. Мелодия не зависит от тоники и темпа. Хотя эти два слова присутствуют в нашем упрощенном определении, но изменение одного из этих параметров не меняет суть мелодии. Тоника это всего лишь точка отсчета, «начало координат». Если проводить аналог с математикой, то тоника – это константа, которая присутствует в общем решении уравнения. Темп – это всего лишь скорость, а точнее, количество ударов метронома в единицу времени. Про них еще будет сказано в данной работе.

       Здесь мы конечно не учитываем то, каким инструментом играется мелодия. Т. е. тембр. Это всего лишь технические детали, которые не касаются нашей проблемы.

       Уточним некоторые детали относительно последовательности нот. Какую ноту имеет тоника – неважно, но сама тоника в связке с другими нотами мелодии играет для нас очень важную роль, поэтому мы дадим ей определение и опишем её роль в генерации мелодии. В последовательности нот нам важны интервалы между соседними нотами. Эти интервалы будут браться из гаммы. Мы будем рассматривать только те последовательности нот, которые подчиняются правилам какой-либо гаммы. Таким образом гамма это – подпространство, из которого мы не можем выходить. Если задана гамма, то мы имеем область допустимых значений для нот мелодии при выбранной тонике.

Теперь дадим более точное определение уже названных терминов. «Музыкальная теория, что бы не говорили ученые теоретики, не совсем точная наука. Там есть всего две величины, которые претендуют на звание абсолютных – высота звука, определяемая частотой – количеством колебаний в секунду (пример Ля = 440 Гц), и темп – количество ударов в минуту. А все остальное, построенное друг на друге, настолько относительно…»1.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11