MIDIってなあに?
コンピュータミュージックによる演奏は、音楽情報を基に制御情報を作り出すシーケンサと制御信号にしたがって音を鳴らす音源によって実現される
MIDI(Musical Instruments Digital Interface)は制御信号のやり取りのための規格
コンピュータが普及した現在、MIDIはソフトウェア音源を制御するしくみとして認識されている
内部の形式はステータスバイトとデータバイトからなる
ステータスバイトの最上位ビットは1、データバイトは0と決まっている
ステータスバイトはさらにタイプとチャンネルというパラメータから構成される
タイプは3ビットで8種類の値を取り、次の内容を表す
タイプによってスタータスバイトに続くデータバイトの数が変わる
チャンネルには音を届ける先の音源を最大16個まで指定できる
ノートオン/ノートオフ
ノートオン
音を鳴らし始める合図
ノートオフ
音を鳴らすのを止める合図
鍵盤を押すことと離すことに対応している
なお、鍵盤を押している時間をゲートタイム、余韻を含めた音が鳴っている間のことをデュレーションという
両者とも1バイトのステータスバイトと、1バイトのノートナンバー、1バイトのベロシティという計3バイトから構成される
ノートナンバー
ノートナンバーは音の高さを表す
7ビットなので128段階で指定できる
A4のノートナンバー69を基準にして、各ノートナンバーの周波数は次の式で表される
$${f_0=440×2^\frac{note_number-69}{12}}$$
ノートナンバーの音域はC-1 (8.18Hz) ~ G9 (12543.85Hz) まで11オクターブでピアノよりも音域が広いので十分な広さと言えよう
ベロシティ
音の大きさを7ビット128段階で表したもの
特定分野では速度の意味で用いられるがMIDIではその意味はない
大まかに強弱記号との対応づけると次の通り
0が消音を意味するので、ノートオフの代わりにベロシティ0のノートオンを用いることもある
これはメリットとして、同じステータスバイトのメッセージが続く場合はデータバイトだけをやり取りすればよいという情報処理の効率性を生んでいる
プログラムチェンジ
プログラムチェンジというメッセージを飛ばすことで楽器を指定して音色を指定することができる
プログラムチェンジはステータスバイト1バイト、データバイト1バイトからなり、データバイトでプログラムナンバーと呼ばれるパラメータを用いて楽器を指定する
プログラムナンバー
当初はメーカーによってバラバラだったプログラムナンバーだが、General MIDI (GM) という規格で統一された
パーカッションマップ
チャンネル10を使って指定されたプログラムナンバーは通常の楽器指定ではなくパーカッションマップという専用のプログラムナンバーとして解釈される
例えば通常"42"は"Viola"だが、チャンネル10へのメッセージに限っては"Closed Hi-hat"となる
MIDIファイル
MIDIの内容をファイルに記録する際に使われるのがMIDIファイルで、中身はSMF (Standard MIDI File) で表される
拡張子は.mid
MThd(ヘッダ)チャンクとMTrk(トラック)チャンクという2種類のチャンクで構成される
フォーマットタイプには0と1の2種類がある
フォーマット0はひとつのトラックに全ての音楽情報を載せ、フォーマット1はトラックごとに楽器を分けて載せる
実際の音楽制作ではトラックを人単位に作業することが多いため、フォーマット1が主流
またフォーマット1では先頭トラックをコンダクタートラックと呼び、テンポなどの属性情報を記録する
MIDIファイルではマイクロ秒を単位としており、1泊分の音の長さをdとするとテンポは次式となる
$${tempo=\frac{60×1000000}{d}}$$
時間分解能は4分音符1つ分の相対的な長さをあらわす
一般に480という値が用いられるが、これは3連符の場合も5連符の場合も480÷3=160、480÷5=96と整数で表すことができるからである
MTrkチャンクは先頭列に直前のメッセージからの経過時間を表すデルタタイムが格納されている
デルタタイムをdelta_time、時間分解能をdivision、テンポをtempoとすると、実際の経過時間は次式で表される
$${δ=\frac{delta_time}{division}×\frac{60}{tempo}}$$
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!