2017-03-16 3 views
0

MIDIUtilを使用して、各音符ごとにクレッシェンド(音量を上げる)をしたいと考えています。これを行う方法はありますか?私はシンプルなMIDIUtilのデモコードを持っていて、各音符が5ビート持続するように変更しました。私はこのような基本的なコードを持っています:MIDIUtilクレッシェンド:Python

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) 

多くのありがとう。

+2

(例えば、ボリューム<100:volume + = increase_per_note' - 明らかにdefine())の中で最大値に達するまで、最小の値(0、私が仮定)で始めることができます。ループの前に 'increase_per_note')。それは動作しますか? – berna1111

+0

速度のクレッシェンドまたはボリュームのクレッシェンド(それらは同じではありません)? – Elmex80s

+0

「各音符を通して」とは、各音符が異なる音量を持つべきであることを意味するか、または単一の音符が演奏されている間に音量が変化することを意味するか? –

答えて

0

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に変更し、それぞれのノートにつきを4ずつ増加させることに注意してください。多くのオーバーラップ)

このパラメータをvolumeと呼ぶのは、MIDIUtilの実装者側で間違いです。それは "速度"と呼ばれるべきです。音量は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) 

はここで最初のいくつかの対策がどのように見えるかです:あなたは `持っ

Event list