chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

DTM: まずはパーカッションから学ぶ

課題:DTM(EDM)をやりたいのだが、いつも飽きて途中で投げ出してしまっている。
アプローチ:確実に学べる方法を取るべし
解決策:推薦図書の「DTM打ち込みフレーズ制作技法」でまずは打ち込みから学ぶ
詳細:
EDMを作りたいと思いつつ、どうやったらそういうスキルが身につくのか、学習過程が分からなかった。Udemyを見たり、Youtubeの解説動画を見ながら適当にやってみたが、気に入った楽曲なんて簡単にできるはずもなく、作れる音楽のレベルの低さから飽きてしまった。そんな時に、「DTM打ち込みフレーズ制作技法」は分かりやすくてスキルアップにつながる(だったか)と紹介されていて、まずはDTMの打ち込みからやってみるかと思った。

特に、パーカッションがへなちょこだと、それに続けてメロディを乗せようという気にもなれないので、、イカスパーカッションを作れるようになりたい。
で、、DTM打ち込みフレーズ制作技法は、MIDIを基本に説明されている。MIDIのパラメータベースで説明されており、FL-Studioとかだとあまりきっちり再現できない。それに、、できたら、試作したデータをきっちりストックしていつでも再生できるようにしたいと思っている。
そんな中、PythonMIDI用ライブラリmidoを使うと、MIDIデータを自由に生成できると知り、MIDI打ち込みをmido+プログラムで作ってみようと思った。
以下のソースは、「DTM打ち込みフレーズ制作技法」のEX-4①をコーディングしたものです。

#!/usr/bin/python3

import mido

MIDI_FILE = 'perc1.mid'
RTHM=120
CHH = 42
BD = 35
SD = 38

mid = mido.MidiFile()
track = mido.MidiTrack()
mid.tracks.append(track)
track.append(mido.MetaMessage('set_tempo', tempo=mido.bpm2tempo(120)))

for _ in range(4):
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 120, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = BD, velocity = 120, time = 0))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 50, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 70, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 50, time = RTHM))

    track.append(mido.Message('note_on', channel = 9, note = SD, velocity = 110, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 40, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 60, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 50, time = RTHM))

    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 110, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 40, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 50, time = 0))
    track.append(mido.Message('note_on', channel = 9, note = BD, velocity = 110, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 40, time = RTHM))

    track.append(mido.Message('note_on', channel = 9, note = SD, velocity = 110, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = BD, velocity = 110, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 40, time = 0))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 70, time = RTHM))
    track.append(mido.Message('note_on', channel = 9, note = CHH, velocity = 50, time = RTHM))

print(f"save to {MIDI_FILE}")
mid.save(MIDI_FILE)

パーカッションの場合もnote_offを送らないといけないのかどうか分かっていません。note_offも送るとコード量が2倍になるので、まあこれでもいいかと。
MIDI用の作曲アプリを使うとも、もっとサクサクできるのでしょうけど。。作曲アプリの使い方を勉強しないといけないし。。素のMIDIデータ をプログラムで生成する方がいいかと思って・・・
実行するとMIDIファイルが生成されるので、timidityで再生することもできる。
timidiyを使ってMIDIファイルからWAVを生成することもできる。

timidity perc1.mid -Ow

WAVの内容は以下(再生できます)
Stream percussion EX-4-1 by dune geek | Listen online for free on SoundCloud

メモ:自分はIbiza Chill Houseを作りたい・・
https://embed.traxsource.com/player/track/11124823



■参考URL
GMパーカッションマップ一覧表 | MIDI・DTMデータ資料集 | S-studio2
第149回 MIDIとUbuntuの素敵な出会い(1) MIDIファイルを演奏してみる | gihyo.jp
DTM用語集(2/15更新) - サンレコ 〜音楽制作と音響のすべてを届けるメディア
https://www.udemy.com/course/edm-production
Free Spectrum Analyzer Plugin, FFT, Real-Time [VST, AU, AAX] - SPAN - Voxengo
Astrix - High On Mel (No Comment Remix) - - - [[Full Visual Trippy Video Set]] - - - [GetAFix] - YouTube