2010年12月23日木曜日

midif0n MIDIシーケンサーの実装コンセプト

さて、midif0nの実装コンセプトについて、書いておきます。
バージョンアップにおける追加機能は、基本的にこのコンセプトから外れない範囲になると思います。

まず実装に限らずに言えば、基本的なコンセプトは、手軽に使用できる携帯用のMIDIシーケンサーです。編集機能は基本的にメモ、あるいは作曲のスケッチを想定して最低限の機能になっています。それ故に、初心者に取っ付きやすくしたいと考えています。
※MIDIとサウンドフォントというオープンフォーマット採用により、敷居が上がってしまうのは確かですが、なるべくパラメータは意識させないようにします。
逆に再生機能に関しては、複雑性に影響を与えないため、ある程度MIDIファイルを忠実に再生できるようにします。

もう少し、編集機能に関して詳しく述べます。音源の話同様、編集機能に関してもピアノをメインに想定しています。アレンジに関わらず、名曲はピアノのみで聞いても名曲に違いないでしょう。ピアノは奏者がコントロールできる範囲が比較的狭い楽器です。MIDI仕様に従う範囲では、ノートオン、オフとそれに付随するベロシティ、加えてペダルの操作になります。ダンパー、ソステヌートペダルは、音源側の処理の実装上ノートオフを遅延させるだけの場合もあり、その場合は、ノートオフの設定で置き換えが可能と言う事になります。ソフトペダルは実際のところは、音色にも影響しますが、主な変化を音量と捉えれば、これもベロシティの変化である程度の置き換えが可能でしょう。つまりMIDIにおいて、ピアノの演奏の表現力は、ノートオン、オフのタイミングとベロシティの大きさが主な要素になります。このことを重視して、midif0nでは、ノートオン、オフとベロシティの編集に特化することにします。

次に再生に関して詳しく書きます。結論から書いてしまうと、GMの仕様上、パラメーターがどのように作用するか明確にかわかっているものはサポートし、そうでないものはサポートしていません。元々制作者が意図するMIDIデータの再現性は、音源により少なからず影響を受けるという事実があります。そのため、仕様が不明確なデータは、再現性を重視する場合には、重視されないものと推測されます。例えば、CC7ボリュームやCC10パンのパラメータは、GM2の仕様書に以下のような推奨式が載っています。

cc7(ボリューム)
Gain[dB] = 40log10(cc7/127)

cc10(パン)
GM2_Japanese.pdfより

L Gain[dB] = 20log10(cos(PAI/2*max(0, cc10-1)/126))
R Gain[dB] = 20log10(sin(PAI/2*max(0, cc10-1)/126))

これに対し、CC5ポルタメントタイムは、推奨例のグラフはありますが、具体的な式は存在しません。
GM2_Japanese.pdfより

さらにcc72リリースタイム、cc73アタックタイムのように基準値と値の増減の意味だけが記述されているようなデータも多くあります。まあ、ポルタメントタイムはグラフからだいたいの式は導けますが、他のパラメータは実装しても音源依存ということになってしまいます。そうでなくても、他のソフトウェアが推奨式に従っている保証はありません。この点を踏まえ、実装するパラメータ、実装しないパラメータを切り分けています。
音源依存という問題を考える時、最もポピュラーな音源に合わせるという方法があるかもしれません。つまり、DTMの代表的な音源として、RolandのSC-88Proが挙げられると思いますが、これを基準にするという考えです。しかし、これについてもCCに対する実装部分は仕様が公開されていないので、確認作業は大変なことになりそうです。

以下、余談ですが、panの推奨式のmax(0, cc10-1)/126の部分が引っかかりますよね。panは、cc10の値64をcenterとし、0をLチャンネルのみ, 127をRチャンネルのみとするわけですが、2進数において分解能が左右非対称になります。そこで、1もLチャンネルのみとする訳です。高速化には向かないのが悩ましいですけど。ちなみにサウンドフォントのパンの仕様は、sin, cosを使わずに単純な線形補完です(一般的には、sin, cosの方が望ましいとされる)。これもMIDIと仕様が違っていてしっくり来ませんね。MIDIとこのような中央値を含む値の扱いは、各社でいろいろとおもしろい記述が見つけられます。

例えば、RolandのSC-88Proはマニュアルによると、以下の記述が見られます。
PAN(パン) Rnd, L63-0-R63
SC-88Pro_j9.pdfより

また、Nordleadで有名なClaviaの、Nord Modularの情報ページには、以下の記述が見つけられます。
Relation between knob positions and units
 (前略)Note that some knobs that control a value between –64 and 64 miss the value of 63. (中略) Clavia chose to simply skip the 63 value and use 64 in it’s place.
http://www.clavia.se/nordmodular/Modularzone/LogicIntro.htmlより
[-64, 64]の範囲に納めるために、63はスキップするそうです。どれも何かがしっくり来ませんが、中央と両端の値を正しく解釈するのであれば、こうなるのでしょう。


最後にmidif0nの実装コンセプト情報をまとめると、以下のようになります。
 編集機能:ノートオン、オフ、ベロシティがメイン
 再生機能:GMの仕様書で、明確なパラメータのみをサポート


※ちなみに、GM2のRPNのModulation Depth Rangeは値の意味が明確なので、midif0nで、密かにサポートしています。

0 件のコメント:

コメントを投稿