前回の続き(注: かなりマニアックです)。操作要領はほとんど同じである。
ノート番号と移調
MIDIでは音程をすべて半音単位のノート番号で管理しているので、移調・転調については各メッセージのノート番号を一斉に同一インターバルで加減すればよい。
たとえば1オクターブ下げたい場合、これは12半音下げることになるので、全メッセージのノート番号を12だけ減らせばよい。
ノート番号属性の修正
デルタタイムやチャネル同様に、MIDIメッセージ(ノート・オンまたはノート・オフ)はノート番号属性を持つので、この値を加減算して修正する。
# ノート番号をnだけ加える関数 def transpose(track, n): for msg in track: if msg.type in ['note_on', 'note_off']: msg.note += n # 上記関数を呼び出して1オクターブ(12半音)下げる transpose(track1, -12)
比較のために、修正前のメッセージ(ノート・オンまたはノート・オフの冒頭一部)と移調修正後のそれを下に例示しておく。