0
음표 값에서 MIDI 파일을 쓰려면 music21을 사용하고 있습니다.music21 : 음표로 음표를 MIDI 파일에 쓰십시오.
다음 코드는 3 개의 노트를 순차적으로 씁니다.
그러나 노트 사이에 "빈"공간을 어떻게 삽입합니까?
각 "침묵 간격"의 위치/길이를 계산할 필요가 없도록 "위치"별로 음표를 삽입 할 수 있다면 매우 쉽습니다. 음악 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()
't','tLast' 및'dt.time'으로 무엇을하고 있는지 이해하고 있습니까? –
@CL. 별로 ... – ytrewq
@CL. 디버깅을 시도했지만 tLast와 t는 항상 동일한 값으로 설정되었으므로 실제로 t- 부분을 얻지는 않습니다. dt.time은 직접 인쇄되지 않았습니다. – ytrewq