2016-12-27 12 views
0

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

Следующий код записывает три примечания последовательно.

Однако, как мне вставить «пустое» пространство между заметками?

Было бы очень легко, если бы я мог просто вставить ноты по их «положению», чтобы мне не приходилось вычислять положение/длину каждого бесшумного интервала. Это возможно с музыкой21?

import music21 
from music21 import * 

mt = midi.MidiTrack(1) 
mt2 = midi.MidiTrack(1) 

# duration, pitch, velocity 
data = [[1024, 60, 90], [1024, 50, 70], [1024, 51, 120],[1024, 62, 80], ] 

t=0 
tLast=0 
for d,p,v in data: 
    dt = midi.DeltaTime(mt) 
    dt.time = t-tLast 
    #add to track events 
    mt.events.append(dt) 

    me=midi.MidiEvent(mt) 
    me.type="NOTE_ON" 
    me.channel=1 
    me.time= None #d 
    me.pitch = p 
    me.velocity = v 
    mt.events.append(me) 

    # add note off/velocity zero message 
    dt = midi.DeltaTime(mt) 
    dt.time = d 
    # add to track events 
    mt.events.append(dt) 

    me=midi.MidiEvent(mt) 
    me.type="NOTE_ON" 
    me.channel=1 
    me.time= None #d 
    me.pitch = p 
    me.velocity = 0 
    mt.events.append(me) 
    tLast = t+d 
    t +=d 

dt=midi.DeltaTime(mt) 
dt.time = 0 
mt.events.append(dt) 
me = midi.MidiEvent(mt) 
me.type = "END_OF_TRACK" 
me.channel = 1 
me.data ='' # must set data to empty string 
mt.events.append(me) 

mf = midi.MidiFile() 
mf.ticksPerQuarterNote = 1024 # cannot use: 10080 
mf.tracks.append(mt) 

mf.tracks.append(mt2) 


mf.open('test.mid', 'wb') 
mf.write() 
mf.close() 
+0

Вы понимаете, что делаете с 't',' tLast' и 'dt.time'? –

+0

@CL. не совсем ... – ytrewq

+0

@CL. Я попробовал отладку, но tLast и t всегда были одинаковыми, поэтому я не получаю t-tLast part .. и dt.time не печатается напрямую – ytrewq

ответ

1

В MIDI-файле всем событиям предшествует значение времени дельты, указывающее, как долго ждать от последнего события.

В вашем коде t и tLast оба увеличены на длительность ноты, поэтому между запиской и следующей записью нет паузы.

Если вы хотите, чтобы следующее примечание начиналось позже, вы должны увеличить t на большую сумму.

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

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