2016-12-06 9 views
2

Я пытаюсь использовать music21 для преобразования многодорожечных midi-файлов в массив нот и продолжительности на каждый трек.music21: синтаксический анализ нот и продолжительности на дорожку

Например, если миди файл test.mid с 16 треками в нем,

Я хотел бы получить 16 массивов кортежей, состоящих из (основного тона, длительность (плюс, может быть, положение ноты)).

Документация для music21 довольно трудно следовать, и я был бы очень признателен за любую помощь по этому ..

ответ

1

Существует более чем один способ сделать это в music21, так что это только один простой способ. Обратите внимание, что durational значение выражается как число с плавающей точкой, например, что четверть нота равна 1,0, половина ноты равна 2.0 и т.д .:

import music21 
from music21 import * 

piece = converter.parse("full_path_to_piece.midi") 
all_parts = [] 
for part in piece.parts: 
    part_tuples = [] 
    for event in part: 
    for y, in event.contextSites(): 
     if y[0] is part: 
     offset = y[1] 
    if getattr(event, 'isNote', None) and event.isNote: 
     part_tuples.append((event.nameWithOctave, event.quarterLength, offset)) 
    if getattr(event, 'isRest', None) and event.isRest: 
     part_tuples.append(('Rest', event.quarterLength, offset)) 
    all_parts.append(part_tuples) 

Альтернативным решением было бы использовать Vis-структуру, которая обращается к музыке файлы в символической записи через music21 и сохраняет информацию в pandas данных. Вы можете сделать это:

pip install vis-framework 

Другим решением было бы использовать Humdrum вместо music21.

+0

большое спасибо! Под «позицией примечания» я имел в виду временную метку заметки, чтобы я мог восстановить файл midi после манипулирования массивами. Это также часть поля событий? Кроме того, что вы имели в виду под «включать обнаружение остатков»? – ytrewq

+0

По метке времени вы имеете в виду временную позицию с начала фрагмента? В music21 parlance (и языке VIS) это часто называют «смещением» события. Если это то, что вы имеете в виду, дайте мне знать, и я отредактирую свой ответ, потому что есть атрибут «смещение», но он не так прост в использовании, как вы могли ожидать. То, что я имел в виду, включая остатки, заключается в том, что код в моем ответе в настоящее время пропускает остатки. Вы хотели знать, когда вы встретите отдыха? – Alex

+0

Также обратите внимание, что у music21 есть группа Google, которая является очень хорошим источником информации о программном обеспечении, и я считаю, что это также предпочтительное место для вопросов, связанных с музыкой21. https://groups.google.com/forum/?hl=ru#!forum/music21list – Alex

 Смежные вопросы

  • Нет связанных вопросов^_^