MIDIUtil crescendo:Python

2024-05-18 23:42:35 发布

您现在位置: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)

非常感谢。在


Tags: 代码outputtimechanneltrackfile音量音符
1条回答
网友
1楼 · 发布于 2024-05-18 23:42:35

您可以通过增加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)

这将使每个音符的速度都比前一个快,但音量不会在音符发声时增加。(还请注意,我将duration更改为4,并将每个音符的time增加4。这使每个音符成为一个完整的音符,没有重叠。在你的例子中,每个音符都是五拍长,在前一个音符之后开始一个节拍,这就造成了很多重叠。)

调用此参数volume是MIDIUtil实现者的一个错误。它应该叫做“速度”。音量在MIDI中是完全不同的。音量是连续控制器#7,它影响MIDI频道上所有声音的音量。速度是一个音符被击出的强度。甚至不能保证速度会影响音符的音量。这是很常见的,但声音可以被编程,使速度影响声音的任何方面,而不仅仅是响度。在

这是一个类似的程序,它使用音量连续控制器来增加音量,而每个音符(都是80度音速)在发声。(这不是优雅的代码。我不是一个很好的Python程序员,我已经过了睡觉时间。)

^{pr2}$

以下是前几项措施的情况:

Event list

相关问题 更多 >

    热门问题