FastOscとOscとOsciとOscilとOsciliとOsciltとPhOscili

(注:後で多少修正するかも、しないかも。)
ひとまずグループ分けしてみよう。

FastOsc =>  Osc    => Osci

Oscil   =>  Oscili => PhOscili
        =>  Oscilt

=> は継承関係を表している。

まず1つめの親であるFastOscから。FastOscはテーブルサイズ(2,4,8,16,,,256,512,,,4096,8192,,,)が固定されたオシレータ。Osc はFastOsc の機能を継承しているが、モジュレータで周波数や振幅を変更できる。だからFastOsc は周波数変調が出きないわけ。ではOsciだが、テーブルの要素と次の要素を補完している。補完、、、例えば、このような配列があるとする。

a=[1,3,5,7,9]

オシレータは一定の時間(これが周波数に関係している)で配列から順番に要素を取り出す。順番に要素を取り出すうちは補完とか必要無い、しかしモジュレータの存在で一定の時間が狂い始める。すると1を取り出した後、一定の時間で3を取り出すところ、早い時間だと3ではなく5やさらに9を取り出したりする。う〜、うまく説明できん。まあOsci は変調の際に滑らかだということ。

続いて2つ目の親であるOscilはどんなテーブルサイズでも可能なのでSndTable なんかにいいだろう、SndTable は音声の波形データを配列として読み込むことができる。また変調のレートが低い。これはソース(Oscil.cpp)を見ればわかるのだが、以下の部分で

for(m_vecpos = 0; m_vecpos < m_vecsize; m_vecpos++)

vect_sizeのループの外にでて

fr = m_fr + (m_input == 0 ? 0 : m_input->Output(m_vecpos));

この式があるのだ。一方、Osciliはループの中に上記の式がある。であるからも変調は高いレートで取得できる。また補完する。OsciltはOsciliと同じように高いレートで変調できるが、補完機能はない(マニュアルには補完とあるがソースからそれができていないとわかる)。PhOsciliは位相変調ができる。