kamikaze nmsp非公式取扱説明書 ○動機 簡単に言えば普遍的なシーケンスフォーマットを作ってみたかったということです. MIDI,MOD,それからFM音源を駆使したMDXやMIDI/PCMの同期を実現したシステムたち, さらにSPCのように音楽フォーマットというよりはRAM(?)IMAGEといえるシステムなど 全てを包括するシステムは果たして可能なのか? その一つの回答はWinAmpに代表される出力がWave方式のプラグインを使う方法です. しかしそれはあくまで演奏しているだけであり,シーケンスフォーマットの意味は 失われています(これはノートステータス等が見れないということ).ただ,音楽を 聴くという欲求にはこの方法が最も適しています. ところが僕としてはMIDI,MODにしてもデータを表示させながら演奏させるというのが 楽しみの一つであり,WinAmp方式では納得いかない場合があります. 実際の音楽性も重要ですがそのデータに使われている技術も鑑賞したいわけです. ということで僕的には良いプレイヤを作るためにはステータス表示は必須, そのためには統一フォーマットを作成して使用するのが1番良いかも!? というのが最も直接的な作成動機となりました. しかし統一フォーマットという概念はそれだけの為にあるのではありません. 例えばシーケンスフォーマットの変換などはメジャーな形式同士なら容易ですが, マイナーな形式同士となるとかなり面倒になります. がここで統一形式と各形式の相互コンバータを作成しておけば, どんなマイナーなフォーマットでも統一形式を仲介することにより変換可能となります.(といってもモノによっては変換不能もしくは著しくデータを損なうことが 多々あると思われますが...とりあえずSPCに変換するのは無理!?) ○実装 ではどのようなシステムを実装したのかを説明します. まずModule(音源)というクラスがありその中にChannel(MIDIではPartに相当), Voice(単音の音源),Instrument/Sample(楽器に相当),Synthesizer,Effecter, Loader,Track等のクラスを作成します. Channel 複数のVoiceの制御,Effecterの制御を行う. Voice 指定のInstrument単音(単一キー)の情報を保持しSynthesizerに 従い発音する. Instrument Sample(Wave等)情報,音量/パン/音程エンベロープ等の情報を持つ. Synthesizer Instrument情報に従いWaveを生成する. 標準ではPCM Mixerしか搭載されていないがFM音源エミュレータ, 物理音源(できるわけないぜ!)等を組み込むことも可能. Effecter Synthesizerによって生成されたWaveをChannelの設定にしたがって 変換する.例えばFeedbackでありEcho,Reverb等である. Loader 指定されたデータからInstrument/Synthesizer/Effecter/Track等の 設定を行う. Track 統一形式のデータを格納してある (Decoder) Trackに従いChannelを制御する. どうしても統一形式に変換できない場合は専用のDecoderをリンクして 再生する. 全ては動的に確保可能でメモリの許す限り拡張することが可能となっています. Track(統一形式)について MIDIのようにデルタタイム方式を採用しています. ただし[DATA]+[DELTA]というようにデルタタイムが後になります. 他にはMOD形式もあるのですが分解能の問題があるので見送りました. MIDのように送信先のChannelを指定する必要がないので(Track-Channel直結のため) その分データが少なくてすみます. 発音方式もMIDIに従いノートオン/ノートオフ方式を取りました. もう1つはノートオン+音長+ゲートタイム方式(RCP,広義にはMDX等..)なのですが, ノートオフがない発音等の動作ができないため(拡張すれば可能ですが) ノートオン/オフ方式より下位互換であると考え見送りました. ○現実 ・Loaderが不完全のため曲がよく変になる. ・再生部分のエラーチェックが甘いためLoaderが変なデータを作成すると ハングする. 他にも不具合などがありますが音源側の責任かプレイヤ側の責任か よく分からなかったりします. ○未来 とりあえず当初はゲーム組み込み用モジュール的なことも考えていたので その方面も検討したいです. それ以前にプレイヤとして成立させるべく努力していきたいと思います. それからKamikaze用のシーケンスデータ作成環境を作りたい・・・・(無理か?) ○雑記 なんか凄そうなシステムだけどそんなに凄いことしていないというのが いやんですが勘弁してください. バグもたくさんあっていやんですが勘弁してください(ぉ プロコン終了後はこれといった修正を加えてないしな〜(3ヶ月間ほど) だめだめじゃないか! 大体プロコン終わってから全くといってよいほどプログラムしてないし! うーむ,無気力症候群の前兆だったりして(既にそうなっている説有力). やばいやばい. ということで!