Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python music21:按音符位置将音符写入MIDI文件_Python_Midi_Music21 - Fatal编程技术网

Python music21:按音符位置将音符写入MIDI文件

Python music21:按音符位置将音符写入MIDI文件,python,midi,music21,Python,Midi,Music21,我正在使用music21从音符值编写midi文件 下面的代码按顺序写三个注释 但是,如何在注释之间插入“空白”空间 如果我能按音符的“位置”插入音符,那就很容易了,这样我就不必计算每个无声音程的位置/长度。这在音乐21中是可能的吗 import music21 from music21 import * mt = midi.MidiTrack(1) mt2 = midi.MidiTrack(1) # duration, pitch, velocity data = [[1024, 60, 9

我正在使用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()

在MIDI文件中,所有事件前面都有一个增量时间值,该值指定从最后一个事件开始等待的时间

在您的代码中,
t
tLast
都随注释的持续时间而增加,因此在注释关闭和后续注释打开之间没有停顿


如果你想让下一个音符晚一点开始,你必须增加
t

你知道你在用
t
tLast
dt.time
做什么吗?@CL。不完全是…@CL。我试过调试,但tLast和t总是设置为相同的值,所以我没有真正得到t-tLast部分。。而dt.time并没有直接打印出来