2016-12-27 23 views
0

音符の値からMIDIファイルを書き込むためにmusic21を使用しています。music21:音符をノートの位置でMIDIファイルに書き込む

次のコードは3つの音符を順番に書き込みます。

ただし、ノート間に「空」スペースを挿入するにはどうすればよいですか?

音符を「位置」で挿入すれば、各無音区間の位置/長さを計算する必要がなくなります。それはmusic21でも可能ですか?

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を取得することはできません.dt.timeは直接印刷されませんでした – ytrewq

答えて

1

MIDIファイルでは、すべてのイベントの前に、最後のイベントからの待機時間を指定するデルタ時間値があります。

コードには、ttLastの両方がノートの長さだけ増加するため、ノートオフと次のノートの間に休止がありません。

次のメモを後で開始する場合は、より多くの金額でtを増やす必要があります。

関連する問題