新版FM音源プログラム (12)

2016 年 1 月 1 日付けの記事 (→こちら) の 4 K エントリの場合と同様に、テーブル・インデクスを「マスク」する方法により、テーブル・サイズを 3.75 K (3840) エントリまで削減することができました。
また、4 K エントリの場合と同様に、符号の操作も併用すると、3 K (3072) エントリまで減らすことができました。
3.75 K エントリのウェーブテーブル全体をプロットしたものを下に示します。

テーブル・インデクス 0 〜 1535 までが WS = 0, 1, 2, 3, 6 で共有している部分で下の図のようにアクセスします。

青いバーで示している範囲をアクセスします。
WS = 0, 1 は 1024 エントリ、WS = 2, 3 は 512 エントリ、そして WS = 6 は 2 エントリのみのアクセスになります。
黒い三角印がノート ON 時に設定する初期位相の位置を示しています。
WS = 7 については図示してありませんが、テーブル・インデクス 1536 〜 2559 までの 1024 エントリをアクセスします。
テーブル・インデクス 2560 〜 3839 までが WS = 4, 5 で共有している部分で下の図のようにアクセスします。

この 3.75 K エントリの方法では、符号の操作はせず、テーブルから読み出した値をそのまま使います。
WS の値により、テーブルから読み出した値の符号を落として、正の値として扱う操作を加え、エントリ数を 3 K (3072) まで削減したものを下に示します。

WS = 4, 5, 7 の場合のアクセス範囲も示してあります。
WS = 4, 5 の範囲は全く同じで、 WS = 5 の場合だけ読み出したデータの符号を落として、すべて正の数として扱います。 WS = 5 以外では、読み出したデータの符号をそのまま使います。
WS = 0, 1, 2, 3, 6 で共有している部分は下の図のようにアクセスします。

これは 3.75 K エントリの場合とウェーブテーブル内のオフセットが違うだけで、処理方法としては同じです。