今後の改良予定(案)
- AIFF, AU, WAV ファイルを組み合わせて音源を定義できる仕組み。
例えば、
defenv env1 3f3f3f3f3f3ff9f9f9f9f9f9
defenv env2 3f3f3fafafaff9f9f9f9f9f9
defpart c4.aiff note=60 env=env1 low=0 hi=66 loop=0.4-0.9
defpart c5.aiff note=72 env=env2 low=67 hi=127 loop=0.5-0.8
defpatch new.pat c4.aiff c5.aiff
...
bank 0
5 new.pat
のようにすると、c4.aiff と c5.aiff というファイルを組み合わせた new.pat
というファイルがあたかも存在しているかのように動作する。通常の AIFF などの
音声データには、エンベロープ、ループ、音の高さなどの情報が無いので、
設定ファイルで defenv, defpart コマンドを用いて定義する。
(SGI の AIFF には、MIDI の音源に用いるためにのループ情報などをいれた
拡張形式がある。ただし、ドキュメントが見当たらないので詳細不明。)
- 演奏時に音源パッチファイルをロードして,途中でパッチを変更できてしまう
とか.多分,そのうち実現されます.
- *.arj アーカイブファイルに対応.
- *.MOD 以外のモジュールファイルの演奏.
- MIDI ファイルの読み込み/演奏まわりを大改造.
MidiPort OpenMidiPort(...);
int MidiAddEvent(MidiPort port, ...);
int MidiPlayEvent(MidiPort port, ...);
void MidiClosePort(MidiPort port, ...);
こんな感じかな.どうなるか分からないけど.バージョン +X 版で,かなり
実現の見通しがついてきました.readmidi.c と playmidi.c まわりを良く読めば,
なんとなく上記インターフェース関数の実現に向かっているってのが
分かるかと思います.
- 仮想 MIDI デバイス/libtimidity.a
仮想 MIDI デバイスを利用するためのライブラリが libtimidity.a
Midi の読み込みと演奏処理とを並列して行うリアルタイム演奏も実装したい.
現在リリース中の soundscope
で実装されているように,読み込みと演奏を切り替えながら動作させるという
技が必要かな.
もしできたらサーバにするものいいかも.Instrument サーバをネットワーク上に
分散させといて,MIDI イベントを broadcast し,対応している Channel が
反応すれば面白いかも.
(+Z で実現したい).
- Emacs の MIDI ファイル編集モードを作ろうとしたら...MIDI ファイルの
パース部分も elisp で実現したらガベコレばっかで,メチャクチャ時間がかかる
(そもそも,そんなことするヤツいるかよって話もある).
elisp のコードをチューニングして高速化したけど,やっぱりガベコレばっか.
ちょっと大きな MIDI ファイルだと 1 分くらいも読み込み時間がある.
というわけで,この企画は却下されてしまいました.
何かエレガントなアイディアが生まれるまで据え置きです.
MIDI ファイルのパース部分の elisp コードが欲しい方は,メールを頂ければ
差し上げます.
※ 項目の順番と実際にサポートされる順番は一致していませんよ.
最近 TODO をサポートしてないな... 時間が欲しい...