Сегодня мы поговорим о исследовать , который рассматривает звук и музыку с точки зрения математики и программирования.
Такой подход позволяет нам оценить многогранность всего, что мы привыкли слушать по дороге на работу или дома.
Мы постараемся изложить основные моменты простыми словами.
Интересный момент в том, что человек слышит в конкретный момент, заключается в том, что это заставляет мозг концентрироваться на восприятии, когда какое-то событие резко выделяется на общем фоне и начинает рассматриваться человеком осознанно, а не как часть общего.
среда.
Разница между чувством и слухом – это внимание.
В некоторых ситуациях внимание к определенным аспектам и нюансам позволяет перейти к зависимостям и алгоритмическим описаниям, что не является редким явлением в мире музыки.
Давайте посмотрим, как для этого можно использовать машинное обучение и цепь Маркова второго порядка.
Основная идея
Цепь Маркова описывает псевдослучайный процесс перехода из одного состояния в другое без запоминания предыдущего состояния (такой переход называется «марковизмом»).Короче говоря, переход из одного состояния в другое — это случайный процесс, носящий вероятностный характер.
Все это хорошо сочетается с алгоритмизацией музыкальных композиций.
Ноты (их 128) являются вероятностными состояниями.Для корректной работы этого подхода необходима матрица весов, которая получается с помощью трех нот. Для каждой комбинации из трех нот первые две всегда являются «начальным» состоянием, а третья — «конечным»; результатом всегда является приращение соответствующего поля в матрице весов [первая нота*127+вторая нота][третья нота].Для реализации всего процесса я буду использовать цепь Маркова второго порядка, а это значит, что следующее состояние системы будет построено на основе двух предыдущих (примечания).
Все вероятности хранятся в матрице 2^14x2^7. На вход синтезатор получает два целых числа (0 <= n, m <= 127), which act as starting notes. На их основе алгоритм рассчитывает/генерирует следующую ноту и продолжает процесс расчета до бесконечности (пока вы его не остановите).
Для упрощения задачи громкость всех нот будет одинаковой (127), как и временной интервал между ними (300 мс).
Далее матрица весов «нормализуется» (или преобразуется) в матрицу перехода путем замены целых чисел их процентом от суммы всех значений в строке.
Процесс изучения
Описанный в статье алгоритм использует для обучения MIDI-файлы (с расширением .mid), он обрабатывает аудиофайл по нотам, одновременно обновляя матрицу весов с помощью Java-инструмента под названием Sequencer. Образец кода:
public Learn(String midiName) { try { Sequence sequence = MidiSystem.getSequence(new File(midiName)); int id[] = {0, 0, 0}; int nArr[][] = new int[2][2]; for(Track track : sequence.getTracks()) { for(int i = 0; i < track.size(); i++) { MidiEvent event = track.get(i); MidiMessage message = event.getMessage(); if(message instanceof ShortMessage) { ShortMessage sm = (ShortMessage) message; if(sm.getCommand() == NOTE_ON) { int key = sm.getData1(); for(int j = 0; j < 2; j++) { if(id[j] == 2) { id[j] = 0; Score.updateWeight(nArr[j][0], nArr[j][1], key); } else { nArr[j][id[j]++] = key; } } } } } } cnt++; } catch(InvalidMidiDataException|IOException e) { e.printStackTrace(); } }
Выбор правильной ноты
Этот процесс основан на случайных величинах: текущем состоянии (две последние ноты последовательности) и полученной ранее матрице перехода.Вероятность генерируется случайным образом с помощью функции Java Math.random().
Затем алгоритм просматривает матрицу перехода и возвращает вероятность, которая соответствует (или наиболее близка к ней) вероятности, сгенерированной функцией Math.random().
Результат воспроизводится с помощью инструмента «Синтезатор» — результат определяется двумя стартовыми нотами, случайно сгенерированными или выбранными пользователем.
Здесь
Теги: #Популярная наука #Звук #Алгоритмы #Сделай сам или сделай сам #музыка
-
Борьба С Интернетом Вещей
19 Oct, 24 -
Мартовское Обновление Для Windows Phone 7
19 Oct, 24 -
Расчет Окупаемости Seo Продвижения Сайта
19 Oct, 24