Python編曲実践(四):MIDIファイルにドラムトラックを追加
前言
前の3つの記事では、PythonのMidoライブラリを通じてメロディー、和弦、模擬滑音、振動音を追加する方法を紹介しました.しかし、ドラムの役割も無視できないもので、それは骨格のように音楽全体を支え、編集ドラムのスタイルも想像力の発揮に無限の空間を提供し、非常に楽しいことであり、この文章ではMIDIファイルにドラムのトラックを追加する方法を紹介します.
専属チャンネル
他の楽器とは異なり、MIDI形式はドラムセットに専属のチャンネルを提供しており、デフォルトでは10番チャンネルで、このチャンネルの40以上の音符対応に異なる種類のドラムスタイルを置き換えており、より呼び出しやすいように関数を作成して参考にしています.
35から81まですべて対応するドラムのスタイルで、通常の編曲には十分であることがわかります.
プログラミング実装
専属のチャンネルがあれば、私たちは簡単に自分のドラムのトラックを作ることができます.便宜上、ドラムポイントを追加する関数を書きました.参考にしてください.
自分のドラムポイントをもっと豊かにするために、私は2つのドラムのトラックを追加しました.1つは踏んで(Hi-HAt)、主に基本的なリズムの把握に使用され、もう1つは軍ドラム(Snare)、トントンドラム(Tom)、強音シンバル(Crash Cymbal)で、リズムをもっとFunkyとGroovyにし、他の楽器の空白の隙間にドアを加えて、音楽をもっと豊かにしました.まず それから花遊びの軌道で、私は2つの関数を使って実現しました:
ドラムセットトラックのMIDIファイルはdrum.midフルアイテムはGithub-Truedick 23/MusicCritiqueを参照
参考資料 MIDI Tutorial GM 1 Sound Set
前の3つの記事では、PythonのMidoライブラリを通じてメロディー、和弦、模擬滑音、振動音を追加する方法を紹介しました.しかし、ドラムの役割も無視できないもので、それは骨格のように音楽全体を支え、編集ドラムのスタイルも想像力の発揮に無限の空間を提供し、非常に楽しいことであり、この文章ではMIDIファイルにドラムのトラックを追加する方法を紹介します.
専属チャンネル
他の楽器とは異なり、MIDI形式はドラムセットに専属のチャンネルを提供しており、デフォルトでは10番チャンネルで、このチャンネルの40以上の音符対応に異なる種類のドラムスタイルを置き換えており、より呼び出しやすいように関数を作成して参考にしています.
def get_drum_dict():
drum_dict = {
'acoustic_bass': 35,
'bass1': 36,
'side_stick': 37,
'acoustic_snare': 38,
'hand_clap': 39,
'electric_snare': 40,
'low_floor_tom': 41,
'closed_hi-hat': 42,
'high_floor_tom': 43,
'pedal_hi-hat': 44,
'low_tom': 45,
'open_hi-hat': 46,
'low-mid_tom': 47,
'hi-mid_tom': 48,
'crash_cymbal1': 49,
'high_tom': 50,
'ride_cymbal1': 51,
'chinese_cymbal': 52,
'ride_bell': 53,
'tambourine': 54,
'splash_cymbal': 55,
'cowbell': 56,
'crash_cymbal2': 57,
'vibraslap': 58,
'ride_cymbal2': 59,
'hi_bongo': 60,
'low_bongo': 61,
'mute_hi_bongo': 62,
'open_hi_bongo': 63,
'low_conga': 64,
'high_timbale': 65,
'low_timbale': 66,
'high_agogo': 67,
'low_agogo': 68,
'cabasa': 69,
'maracas': 70,
'short_whistle': 71,
'long_whistle': 72,
'short_guiro': 73,
'long_guiro': 74,
'claves': 75,
'hi_wood_block': 76,
'low_wood_block': 77,
'mute_cuica': 78,
'open_cuica': 79,
'mute_triangle': 80,
'open_triangle': 81
}
return drum_dict
35から81まですべて対応するドラムのスタイルで、通常の編曲には十分であることがわかります.
プログラミング実装
専属のチャンネルがあれば、私たちは簡単に自分のドラムのトラックを作ることができます.便宜上、ドラムポイントを追加する関数を書きました.参考にしてください.
def add_drum(name, time, track, delay=0, velocity=1):
bpm = get_bpm(track)
meta_time = 60 * 60 * 10 / bpm
drum_dict = get_drum_dict()
try:
note = drum_dict[name]
except:
print(traceback.format_exc())
return
track.append(Message('note_on', note=note, velocity=round(64 * velocity), time=delay, channel=9))
track.append(
Message('note_off', note=note, velocity=round(64 * velocity), time=round(meta_time * time), channel=9))
自分のドラムポイントをもっと豊かにするために、私は2つのドラムのトラックを追加しました.1つは踏んで(Hi-HAt)、主に基本的なリズムの把握に使用され、もう1つは軍ドラム(Snare)、トントンドラム(Tom)、強音シンバル(Crash Cymbal)で、リズムをもっとFunkyとGroovyにし、他の楽器の空白の隙間にドアを加えて、音楽をもっと豊かにしました.
def hi_hat(track):
for i in range(8):
add_drum('open_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.5, track, velocity=0.6)
add_drum('open_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.5, track, velocity=0.6)
for i in range(16):
add_drum('open_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.25, track, velocity=0.6)
add_drum('closed_hi-hat', 0.25, track, velocity=0.6)
add_drum('closed_hi-hat', 0.25, track, velocity=0.6)
add_drum('closed_hi-hat', 0.25, track, velocity=0.6)
add_drum('open_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.5, track, velocity=0.6)
add_drum('closed_hi-hat', 0.5, track, velocity=0.6)
def tom_and_snare_pt1(track):
for i in range(7):
add_drum('acoustic_snare', 0.5, track, velocity=0.8)
add_drum('low_tom', 0.5, track, velocity=0.6)
add_drum('low-mid_tom', 0.5, track, velocity=0.6)
add_drum('acoustic_snare', 0.5, track, velocity=0.6)
add_drum('low_tom', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.5, track, velocity=0.8)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('acoustic_snare', 0.5, track, velocity=0.8)
add_drum('low_tom', 0.25, track, velocity=0.6)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('crash_cymbal1', 0.25, track, velocity=1.2)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('crash_cymbal2', 0.25, track, velocity=1.2)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
def tom_and_snare_pt2(track, num):
for i in range(3): #6
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('low_tom', 0.5, track, velocity=0.6)
add_drum('high_tom', 0.25, track, velocity=0.6)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('acoustic_snare', 0.5, track, velocity=0.6)
add_drum('low_tom', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.5, track, velocity=0.9)
add_drum('low-mid_tom', 0.125, track, velocity=0.6)
add_drum('hi-mid_tom', 0.125, track, velocity=0.6)
add_drum('acoustic_snare', 0.5, track, velocity=0.8)
add_drum('low_tom', 0.25, track, velocity=0.6)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('high_tom', 0.25, track, velocity=0.6)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('crash_cymbal1', 0.25, track, velocity=1.2)
add_drum('high_tom', 0.25, track, velocity=0.6)
add_drum('crash_cymbal2', 0.25, track, velocity=1.2)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('acoustic_snare', 0.5, track, velocity=0.8)
add_drum('low_tom', 0.25, track, velocity=0.6)
add_drum('low-mid_tom', 0.25, track, velocity=0.6)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.125, track, velocity=0.8)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('crash_cymbal1', 0.25, track, velocity=1.2)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('crash_cymbal2', 0.25, track, velocity=1.2)
add_drum('acoustic_snare', 0.25, track, velocity=0.8)
add_drum('high_tom', 0.125, track, velocity=0.9)
add_drum('high_tom', 0.125, track, velocity=0.9)
add_drum('hi-mid_tom', 0.125, track, velocity=0.9)
add_drum('hi-mid_tom', 0.125, track, velocity=0.9)
add_drum('low-mid_tom', 0.125, track, velocity=0.9)
add_drum('low-mid_tom', 0.125, track, velocity=0.9)
add_drum('low_tom', 0.125, track, velocity=0.9)
add_drum('low_tom', 0.125, track, velocity=0.9)
add_drum('high_floor_tom', 0.25, track, velocity=1.1)
add_drum('high_floor_tom', 0.25, track, velocity=1.1)
add_drum('low_floor_tom', 0.25, track, velocity=1.2)
add_drum('low_floor_tom', 0.25, track, velocity=1.2)
if num == 1:
add_drum('crash_cymbal1', 0.25, track, velocity=1.2)
add_drum('crash_cymbal2', 0.25, track, velocity=1.2)
add_drum('crash_cymbal1', 0.25, track, velocity=1.2)
add_drum('crash_cymbal2', 0.25, track, velocity=1.2)
if num == 2:
add_drum('low_floor_tom', 0.25, track, velocity=1.3)
add_drum('low_floor_tom', 0.25, track, velocity=1.3)
add_drum('chinese_cymbal', 1, track, velocity=1.9)
ドラムセットトラックのMIDIファイルはdrum.midフルアイテムはGithub-Truedick 23/MusicCritiqueを参照
参考資料