Reaper EEL2スクリプト言語 Sine Sweep Generator改造

JS:Sine Sweep Generatorは、 低い周波数からナイキスト周波数までサイン波で上り下りするプラグインでチャープ信号というやつ。 実験などでは結構便利に使えるのだが、標準の状態では0dBのマックス音量で鳴るので、ちょっと使いにくい。 このプラグインはVSTのようなものなのだけど、EEL2というスクリプト言語で書かれていて、ソースコードもReaperからアクセス可能で、その場で修正が出来てしまう。そこでEEL2スクリプトをいじってボリュームを加えてみた。

内容的には簡単で、ボリュームスライダーを追加して、その値から、dBからリニア変換し、出力に掛け算するというもの。

ただし、このEE2が、かなり癖のあるスクリプト言語。 C言語に近いけど、三項演算子とWhileしかないようなもの。 いろいろ安全装置がぶっ壊れたような言語に見えてしまう。 その代わりスクリプト言語としてはスピードでぶっちぎりという印象。 コンパイルも保存時もしくは読み込み時だろうか、瞬間的に終わる。実際リアルタイムの音処理もこなしてしまう。 ただし、日本語は打てないのでコメントは英語にするしかない。

EEL2の学習方法は、ここをよく見るしかないと思う。あとは具体的なソースコードを見るなり、気合で乗り切る。
https://www.reaper.fm/sdk/js/js.php

desc:Sine Sweep2

slider1:8<1,100,1>Approx Sweep Length (sec)
slider2:-6<-20,0,1>Volume (dB)
in_pin:none
out_pin:output (mono)
out_pin:output (mono)

@init
cpos=0;
dcpos=0;
dir=0;
idcpos=dcpos=$pi*16.0/srate;

@slider
gain=pow(10,slider2/20);
len=srate*slider1;
ddcpos=exp($pi*2/len);
iddcpos=1/ddcpos;

@sample
spl0=spl1=sin(cpos)*gain;
cpos+=dcpos;
dir ? dcpos *= iddcpos : dcpos*=ddcpos;
dcpos >= $pi && !dir ? dir=1 : dcpos<idcpos && dir ? dir=0;
インターフェイスはめっちゃ簡素。スライダーが2個だけ。

音のサンプル。耳に痛い周波数が入っているので音量は下げ気味にして聞いてください。

下は-9dBに設定し、オシロスコープで見たところ。ちゃんとピークが-9dBになっている。

以前AudacityではNyquistやLADSPAなどを使って簡単なプラグインを作っていたけど、 このEEL2は好印象なので、これから必要に応じてちょろちょろ作ってみようかと思う。 また、EEL2ではエフェクトやシンセのプラグインを作るだけでなく、Reaperのマクロ処理など自動化にも使える。これをReaScriptというらしい。ReaScriptを書けるプログラミング言語はEEL2だけでなく、Lua、Pythonも使える。今のところReaperも使いこなせていないので、機能拡張の必要性は感じていないが、遊び程度にやってもいいかも。