MIDIU 渐强:Python
MIDIUtil crescendo: Python
我想使用 MIDIUtil 在每个音符中增加渐强(音量增加)。有没有办法做到这一点?我有简单的 MIDIUtil 演示代码并对其进行了修改,因此每个音符持续 5 拍。我有这样的基本代码:
from midiutil.MidiFile import *
degrees = [60, 62, 64, 65, 67, 69, 71, 72]
track = 0
channel = 0
time = 0
duration = 5
tempo = 120
volume = 100
MyMIDI = MIDIFile(1)
MyMIDI.addTempo(track,time, tempo)
for pitch in degrees:
MyMIDI.addNote(track, channel, pitch, time, duration, volume)
time = time + 1
with open("major-scale.mid", "wb") as output_file:
MyMIDI.writeFile(output_file)
非常感谢。
您可以通过增加 volume
参数的值来增加每个音符的力度。像这样:
from midiutil.MidiFile import *
degrees = [60, 62, 64, 65, 67, 69, 71, 72]
track = 0
channel = 0
time = 0
duration = 4
tempo = 120
volume = 15
MyMIDI = MIDIFile(1)
MyMIDI.addTempo(track,time, tempo)
for pitch in degrees:
MyMIDI.addNote(track, channel, pitch, time, duration, volume)
time = time + 4
volume = volume + 15
with open("major-scale.mid", "wb") as output_file:
MyMIDI.writeFile(output_file)
这将使每个音符的力度都比前一个高,但音符发声时音量不会增加。 (另请注意,我将持续时间更改为 4,并将每个音符的 time
增加 4。这使每个音符成为一个完整的音符,没有重叠。在您的示例中,每个音符长五拍,并在前一个音符之后开始一拍注意,造成很多重叠。)
调用此参数 volume
是 MIDIUtil 实现者的错误。应该叫"velocity"。音量在 MIDI 中是完全不同的东西。音量是连续控制器 #7,它会影响该 MIDI 通道上所有声音的音量。速度是敲击单个音符的强度。甚至不能保证速度会影响音符的音量。这很常见,但可以对声音进行编程,使速度影响声音的任何方面,而不仅仅是响度。
这是一个类似的程序,它使用音量连续控制器在每个音符(所有力度均为 80)发声时增加音量。 (这不是优雅的代码。我不是一个 Python 程序员而且已经过了我的就寝时间。)
from midiutil.MidiFile import *
degrees = [60, 62, 64, 65, 67, 69, 71, 72]
track = 0
channel = 0
time = 0
duration = 4
tempo = 120
volume = 8
MyMIDI = MIDIFile(1)
MyMIDI.addTempo(track, time, tempo)
for pitch in degrees:
MyMIDI.addNote(track, channel, pitch, time, duration, 80)
for i in range (0, 15):
MyMIDI.addControllerEvent(track, channel, time + i * 4 / 15, 7, volume)
volume = volume + 1
time = time + 4
with open("major-scale-with-volume.mid", "wb") as output_file:
MyMIDI.writeFile(output_file)
前几项措施如下所示:
我想使用 MIDIUtil 在每个音符中增加渐强(音量增加)。有没有办法做到这一点?我有简单的 MIDIUtil 演示代码并对其进行了修改,因此每个音符持续 5 拍。我有这样的基本代码:
from midiutil.MidiFile import *
degrees = [60, 62, 64, 65, 67, 69, 71, 72]
track = 0
channel = 0
time = 0
duration = 5
tempo = 120
volume = 100
MyMIDI = MIDIFile(1)
MyMIDI.addTempo(track,time, tempo)
for pitch in degrees:
MyMIDI.addNote(track, channel, pitch, time, duration, volume)
time = time + 1
with open("major-scale.mid", "wb") as output_file:
MyMIDI.writeFile(output_file)
非常感谢。
您可以通过增加 volume
参数的值来增加每个音符的力度。像这样:
from midiutil.MidiFile import *
degrees = [60, 62, 64, 65, 67, 69, 71, 72]
track = 0
channel = 0
time = 0
duration = 4
tempo = 120
volume = 15
MyMIDI = MIDIFile(1)
MyMIDI.addTempo(track,time, tempo)
for pitch in degrees:
MyMIDI.addNote(track, channel, pitch, time, duration, volume)
time = time + 4
volume = volume + 15
with open("major-scale.mid", "wb") as output_file:
MyMIDI.writeFile(output_file)
这将使每个音符的力度都比前一个高,但音符发声时音量不会增加。 (另请注意,我将持续时间更改为 4,并将每个音符的 time
增加 4。这使每个音符成为一个完整的音符,没有重叠。在您的示例中,每个音符长五拍,并在前一个音符之后开始一拍注意,造成很多重叠。)
调用此参数 volume
是 MIDIUtil 实现者的错误。应该叫"velocity"。音量在 MIDI 中是完全不同的东西。音量是连续控制器 #7,它会影响该 MIDI 通道上所有声音的音量。速度是敲击单个音符的强度。甚至不能保证速度会影响音符的音量。这很常见,但可以对声音进行编程,使速度影响声音的任何方面,而不仅仅是响度。
这是一个类似的程序,它使用音量连续控制器在每个音符(所有力度均为 80)发声时增加音量。 (这不是优雅的代码。我不是一个 Python 程序员而且已经过了我的就寝时间。)
from midiutil.MidiFile import *
degrees = [60, 62, 64, 65, 67, 69, 71, 72]
track = 0
channel = 0
time = 0
duration = 4
tempo = 120
volume = 8
MyMIDI = MIDIFile(1)
MyMIDI.addTempo(track, time, tempo)
for pitch in degrees:
MyMIDI.addNote(track, channel, pitch, time, duration, 80)
for i in range (0, 15):
MyMIDI.addControllerEvent(track, channel, time + i * 4 / 15, 7, volume)
volume = volume + 1
time = time + 4
with open("major-scale-with-volume.mid", "wb") as output_file:
MyMIDI.writeFile(output_file)
前几项措施如下所示: