universeこれは旧ブログ。環境を移行(2008ではない理由は開発環境であるWindows2000がサポートOSから外されているため)。ベタに書くと地味ながらボトルネックになりそうな発音させるサンプルの検索やIGEN/PGEN検索をハッシュリストを使うなどして自分のできる範囲内で配慮はしているものの、やはりメインとなる音声処理全般の最適化が当面の課題になりそう。確かにハッシュリストは最初から作るにあたり若干ボトルネックと言えるかも知れないです。ような柔軟性を持ったクラスを作ること自体が難しいです。派生クラスを使った場合は結局アップキャストとダウンキャストの両方が必要になるため暗黙のキャストを完全に期待することはできず、テンプレートと同じレベルの利便性にはやはり至っていないと思います(このクラス群はこれはこれで便利ですが)。相当する機能を持たず、常にリストのサイズをひとつずつ増やすような実装の簡易的なハッシュリストを自作しました(そのためにリストを構築するために掛かる時間は少し増えていると思います。状態にしてしまうのもひとつの手ではありますが......)。収集したデータの検索に使用されていますがレスポンスは今のところそこそこ良好です。ノートの高さとベロシティに対応したレイヤやサンプルを検索する場合は検索対象になるキーはひとつではなく0〜32など範囲を持つため、このクラスは自作せざるを得ませんでした。この検索はノートオンの時にしか使われないため全体の項目数が少ない場合はリニアサーチでもそれなりにまともに動いてくれるのではないかとは思いますが、そこそこのメモリ消費でパフォーマンスを稼げるなら出し惜しみしないでおこうということで、128個のリストにレイヤやサンプルへのポインタを入れていき、ノートの高さに対応する項目の検索はそのリストを使い、ヒットした項目に対してベロシティの範囲に収まっているかどうかをリニアサーチする構造になっています。モジュレータチャンクです。束ねられていて、対応したジェネレータのパラメータをモジュレータで定義された動作によって書き換えられる形で実装されるものだとは思いますがその周辺についてはまだ読み進めていません。実装しなければ正しくベロシティに対応した音量やピッチベンドに対応したピッチの発音などの実現は互換性の面から見て難しいのではないかと思います。そのためこの辺もちゃんと読み進める必要があると思います。最後の1行は料理しようがないので放置します。拾ってきたことだけは評価してます。06:30midiキーボード届きません。2.0Seesaaブログ。