キーとベロシティに対応したサンプルを見つけ出したりして音を鳴らすために必要な情報を収集する機能に関しては完成したと思う。関する全てのデータを無視している。ノートオンのベロシティに応じて音量を変えたりなどの機能を実現させるための定義のような気がするので、多分無視して勝手にノートオンなどで発音してはいけないんじゃないかと思う。それなりに動くものを作るのならこの辺の処理を書かないと使い物にならなそうだ。着実に前進しているあたり、自分にしてはちょっと珍しい。|2008年02月13日サウンドフォントファイル(sf2)2仕様書と実際のファイルを睨めっこしながらだいぶ流れがわかってきた。ここまでは多分動くものが作れる気がする。対応するサンプルやそれぞれのパラメータを引っ張り出してくるところが完成すれば、発音もさせられるんじゃないかと思う。波形の処理に関しては自分にとって未知の領域が多いので前途多難な感じはあるが、取り合えずサウンドフォントがどのようにして発音までの道のりを歩んでいくのかについては大雑把に把握できたような気がする。|2008年02月08日サウンドフォントファイル(sf2)http://connect.creativelabs.com/developer/SoundFont/sfspec21.pdfサウンドフォントファイルのファイルフォーマットは普通に公開されている。なんで互換性問題がよく起こるのかわからないのでちょっと調べてみるべきだろうか。すり替えが少し難しくなった。レジストリを書き換えることで以前の検索順序にする事はできるものの、これを行ってしまうと他のソフトの動作にも支障をきたす可能性があるため別なアプローチで行う方が望ましい。使うと任意のプロセスに対してスレッドを注入できる。中心になっているためにAPIの差し替えを後々行ってもその効果が現れるタイミングが非常に少ない(インターフェイスを再取得するシーンがくるまでは以前のポインタを使いまわすため)。置換をしなければいけないような気がする(試してないけど!)。系ではサポートされていないらしい。使わずに動くようにしておきたい。これらを踏まえた上で動くものを作るためにはそれなりに泥臭い処理が必要になる事がわかってきたのでそのメモのためにここに書いておく。メインスレッドをサスペンド状態にして立ち上げる。ロードする処理を注入する。元の実装を呼んでいる間に呼ばれる別のフック中のAPIの呼び出しも監視する必要があるために関数本体を書き換えているが、今回の場合はそこまで深い監視は必要ないはずなのでもう少しシンプルなフックだけでいけそうだ。2.0Seesaaブログ。