Wavetable calculator help

What is this?

N106やFDS, HES, SCC等の波形メモリ音源の波形テーブルを、基本的な波形の組み合わせにより算出します。

Input fields

説明は少しごまかして書いてあるところがあります。

Wavedata lengthフィールド: 時間軸長さ(FDSは64、HES・SCCは32)

Wavedata max valueフィールド: 値の最大値(N106は15、FDSは63、HESは31。また、SCCのときは255を入れてください)

Functionフィールド: 引数をpとするような関数を書きます。出力する配列はおおよそ次のようにして計算されます。

for (t = 0 ; t < wavetable_length; t++) {
    p = (t + 0.5)/wavetable_length; //tとt+1の平均値なので0.5を足している
    data[t] = function(p);
}

例:Wavedata length=32とすると、p=0.5/32, p=1.5/32, p=2.5/32, ... p=31.5/32と動きます。 これらのpに対して、値域が-1<y<1となるような関数を書いてください。

Function example

角度の単位に注意。このスクリプトの中でsin, squ, tri, sawを定義してありますが、 引数にはradで表現した角度を2πで割った値を入れるようになっています(90°が0.25になり、180°が0.5になり、360°が1になり、という具合)。

数字などを少しずつ変えて実験してみてください。

sin(p)正弦波
squ(p)方形波
tri(p)三角波
saw(p)鋸歯状波
squ(p, 0.25)squ, triの第2引数は非対称率になります。0以上1以下の値を指定します。
0.5以上だと中心が右に、0.5以下だと中心が左によります。
この例は25%矩形波
squ(p, 0.125)
tri(p, 0.25)
tri(p, 0.125)
sin(p + 0.25)正弦波(ただし90度から始めているので実質cos)
sin(2*p)基本周波数の2倍
sin(2*p - 0.25)基本周波数の2倍(ただし-90度から)
sin(0.7*p - 0.25)
0.5*sin(p) + 0.5*sin(2.0*p)加算合成
0.5*saw(p) + 0.3*squ(4.0*p)加算合成
0.5*squ(2.0*p)振幅を小さくすると真ん中によります。0に張り付くわけではないので注意。
saw(1.3*p)オシレータシンクが掛かったような鋸歯状波
sin(1.0*p + 0.14*sin(1.0*p))Frequency Modulation
sin(2*p+0.09*sin(7*p))これもFM。ベルっぽい
8*(p - 0.5)*(p - 0.5) - 1放物線
(p < 1/2.5 ? sin(2.5*p) : 0)GM音源のベースっぽい
tri(Math.pow(p,4))?
saw(Math.pow(p,4))?
(p = (p < 0.5 ? p:1-p)*2)*0 + saw(Math.pow(p,3.7))?
2.0*Math.abs(sin(0.5*p)) - 1.0全波整流
inserted by FC2 system