はじめに
TensorFlow製の音楽生成プロジェクト「Magenta」をいじっています。
参考:[サカナクションさんをTensorFlow製アート・音楽生成プロジェクト「Magenta」に学習させてみる。]
(http://qiita.com/tackey/items/1295a0347a8b4cc30d46)
その前処理として、PythonでMIDIファイルをいじりたいなと思い調べたところ、Magentaではpretty_midiを利用しているようでした。
この投稿では、pretty_midi 0.2.6 documentationのサンプルを動かして、pretty_midiの仕組みについてみてみます。
サンプルコード
サンプルコードと、コメントを書き記載します。
sample.py
import pretty_midi
# Create a PrettyMIDI object
# Pretty MIDIオブジェクトを作る。
cello_c_chord = pretty_midi.PrettyMIDI()
# Create an Instrument instance for a cello instrument
# Instrument Instanceを作る。ここではCello
# 楽器名を入れると、対応するGeneral MIDI program numberを返してくれる
cello_program = pretty_midi.instrument_name_to_program('Cello')
# Instrument instanceをCelloとして作成
cello = pretty_midi.Instrument(program=cello_program)
# Iterate over note names, which will be converted to note number later
# メロディをNoteNameで記載していますが、後ほどNoteNumberに変換されます。
for note_name in ['C5', 'E5', 'G5']:
# Retrieve the MIDI note number for this note name
# NoteNameからNote Numberを検索しています。
note_number = pretty_midi.note_name_to_number(note_name)
# Create a Note instance, starting at 0s and ending at .5s
# NoteInstanceを作成します。音(pitch)の開始時間と終了時間、
# velocityを定義します。
note = pretty_midi.Note(
velocity=100, pitch=note_number, start=0, end=.5)
# Add it to our cello instrument
# 上記で作成したNoteInstanceをCelloInstrumentに加えます。
cello.notes.append(note)
# Add the cello instrument to the PrettyMIDI object
# ChelloInstrumentをPrettyMIDIオブジェクトに加えます。
cello_c_chord.instruments.append(cello)
# Write out the MIDI data
# PrettyMIDIオブジェクトをMIDIファイルとして書き出しましょう。
cello_c_chord.write('cello-C-chord.mid')
作成されたMIDI
ドミソの音が0.5秒(120 BPMだと一拍)のMIDIファイルができました。(logic Xで表示)
終わりに
次は、既存のMIDIファイルを読み込み、楽器ごとにファイルを分割する、ということをやってみたいと思います。
ありがとうございました。