REAPERのJSFXでピンクノイズを生成してみた

REAPERのEffectsフォルダにはIvanov氏が作った「Pink Noise Generator」というJSFXが入っていたのですが、ソースを読んでみるとホワイトノイズにフィルタをかけてピンクにしているものでした。ホワイトノイズにフィルタをかけるのではなくピンクノイズを直接生成するプログラムをPythonで作ったことがあるので、それをリアルタイムで動作するようにしてみます。

marui.hatenablog.com

Voss-McCartney法そのままで、効率化もまったくしていません。しかも定数をそのまま書いているので汚いコードですが、低域から高域まできれいなピンクノイズが出力されます。

ピンクノイズJSFXからの出力のスペクトル

以下、JSFXコードです。

desc:Prosix Pinknoise Generator
//tags: generator synthesizer
//author: MARUI Atsushi

slider1:-6<-60,0,0.1>Level (dB)

@init
t = 0;
outmax = 0;

@slider
slider1<=-60 ? gain=0 : gain=pow(10, slider1/20);

@sample
                      r1 = rand();
t %    2 ==    0 ?    r2 = rand();
t %    4 ==    1 ?    r4 = rand();
t %    8 ==    3 ?    r8 = rand();
t %   16 ==    7 ?   r16 = rand();
t %   32 ==   15 ?   r32 = rand();
t %   64 ==   31 ?   r64 = rand();
t %  128 ==   63 ?  r128 = rand();
t %  256 ==  127 ?  r256 = rand();
t %  512 ==  255 ?  r512 = rand();
t % 1024 ==  511 ? r1024 = rand();

out = r1 + r2 + r4 + r8 + r16 + r32 + r64 + r128 + r256 + r512 + r1024;
abs(out) > outmax ? outmax=abs(out);
out = (out / outmax - 0.5) * 1.9999;

spl0 = out * gain;
spl1 = out * gain;
t = t+1;