Matlab MIDI Toolbox

♦June 2012 ♦

MATLAB (сокращение от англ. «Matrix Laboratory») — пакет прикладных программ для решения задач технических вычислений и одноимённый язык программирования, используемый в этом пакете. Язык MATLAB является высокоуровневым интерпретируемым языком программирования, включающим основанные на матрицах структуры данных, широкий спектр функций, интегрированную среду разработки, объектно–ориентированные возможности и интерфейсы к программам, написанным на других языках программирования. Для MATLAB имеется возможность создавать специальные наборы инструментов (англ. toolbox), расширяющие функциональность. Наборы инструментов представляют собой коллекции функций, написанных на языке MATLAB для решения определённого класса задач

Набор инструментов MIDI Toolbox, разработанный финскими учеными из университета Ювяскюля Томасом Эуролой и Петри Тойваненом, является самым мощным набором инструментов для статистического анализа, визуализации, генерации MIDI–файлов, и, соответственно, вполне подходит для решения задач алгоритмической композиции в среде Matlab (существующий родной пакет Signal Processing Toolbox не в счет, так как его основная функция — обработка и фильтрация звуковых данных).

Рассмотрим возможности программы на примере финской народной песни "Läksin minä kesäyönä”, входящей в состав набора. Считывание MIDI–файла в программу происходит посредством функции readmidi nmat = readmidi('laksin.mid'). После этого файл представляется в виде так называемой нотной матрицы со следующими столбцами : первая колонка отображает начало ноты исходя из доли, вторая — продолжительность ноты в долях, третья — канал midi, в котором звучит нота, четвертая — высоту ноты, пятая — силу нажатия, а шестая и седьмая — то же, что и первая и вторая, только в секундной системе отсчета.

пример представления MIDI файла Laksin в виде нотной матрицы

пример представления MIDI файла Laksin в виде нотной матрицы

MIDI данные могут быть проанализированы различными способами — функция pcdist1 выдаст нам письменное распределение нот в данной композиции, при комбинировании этой функции с функцией plodist plotdist(pcdist1(nmat)), мы увидим графическое плотностное распределение нот в этом файле, функция ivdist1 тоже выдает распределение, но уже интервалов между нотами.

представление плотности распределения нот в графическом виде

представление плотности распределения нот в графическом виде

распределение плотности интервалов между ноты в графическом виде

распределение плотности интервалов между ноты в графическом виде

Также с помощью функции pcdist2 можно узнать значения распределения плотности вероятности между двухнотными последовательностями: по факту эта функция выдаст нам переходную матрицу Марковской цепи первого порядка. Эту матрицу возможно представить в графическом виде.

распределение плотности вероятности между двухнотными последовательностями

распределение плотности вероятности между двухнотными последовательностями

Данный набор инструментов также имеет мощную функцию — вычисление тональности композиции с помощью алгоритма Крумшансла–Кесслера, реализованного в функции kkkey. Этот алгоритм также может быть визуализирован в форме самоорганизующейся карты тональностей (SOM), в которой центр красного цвета будет наиболее близко лежать к значению тональности.

самоорганизующаяся карта тональности

самоорганизующаяся карта тональности

Данный тулбокс также позволяет анализировать сколь угодно большие коллекции MIDI–файлов одновременно с помощью функции analyzecoll.

Далее пройдемся по некоторым другим основным функциям, реализованным в этом ПО:

  • dir2coll - Конвертирует папку, содержащую несколько MIDI в нотную матрицу
  • readmidi - Считывает один midi файл в нотную матрицу
  • writemidi - Записывает midi файл из нотной матрицы
  • playmidi - Проигрывает существующий midi файл с помощью внешнего проигрывателя
  • dropmidich - Обрезает все остальные каналы в midi файлы кроме выбранного
  • transpose2c - Транспонирует существующую нотную матрицу в тональность до
  • pianoroll - Визуализирует нотную матрицу в виде «пиано ролла»
  • entropy - Вычисляет энтропию распределения
  • durdist1 - Вычисляет плотность распределения нотных длительностей
  • durdist2 - Вычисляет плотность распределения последовательностей нотных длительность по парам
  • settempo - Меняет темп мелодии
  • gettempo - Показывает текущий темп
  • mididemo - Показывает демонстрационный материал относительно всех функций набора
  • Стоит отметить отдельно одну особенность тулбокса — такие статистические инструменты, как анализ распределения нот, интервалов, длительностей работает только с монофоническими мелодиями. В остальном же Midi Toolbox является прекрасным набором инструментов для статистического анализа музыкальных произведений.