- ステップサイズテーブルの再設計。256エントリでいいはず。8bitの領域を使い切るべき。 * インデックス更新テーブルの吟味(特に3bit)。
- LMSフィルタの吟味(プリエンファシスもやったところで再度SAを確かめてみたい。→かんたんにやってみたけど、低音圧でSA、高音圧でLMSの印象。一応SAにしておく。発散する場合がみられている。。。nibbleが2の補数になったらそれを残差として突っ込むという夢がある。)
- フォーマット再度策定。2,3,4bitの書き出し処理分割。
- nibble(出力コード)は2の補数でいい。符号+絶対値だとエンコードデコードが複雑になる。
ここまでやってて色々弄ってたら、なーんか音質が悪化していることに気付く。デフォルトのADPCMの方がよくね? 耳で聞くよりはRMSでがっちり評価していきたい。
プリエンファシスが悪そう。実装を整理してON/OFFできるようにして調査する。
- インデックス更新値を持ち越して次サンプルで使う手法、あんまり美味しくない。
- テーブルを256エントリに拡張したら、高音圧音源ではグッドだけど、低音圧音源でジャリジャリが目立つ。sin波で適応が遅い感じ。
- 2bitだとどうしても適応が遅い印象。
- フィルタの学習も遅い印象も受ける。最初のブロックを何回か回して処理開始するとかどうでしょう。いいアイデアだけど、フィルタの状態をブロックヘッダに入れる実装がまだなので、それができてから。
さて、コーデックとして仕立てていくか。基本的なAPIはIMAADPCMと同じで良いとして、
- 命名規則の変更: IMAADPCM -> AAD (Ayashi Adaptive Differential pulse code modulation) 拡張子.aad
- フォーマット策定: ヘッダ, ブロックヘッダ, ブロック
- エンコードパラメータの整理
- プリエンファシス、デエンファシスをプロセッサハンドルを介してできるように。