きれいなSuperSawをエミュるぞ
背景
- SuperSawを作りたくて、とりあえずWebAudioでSawを7個同時に慣らしてデチューンつけてみた
- 結果、なんかそれっぽいけど浅倉大介の面影は1mmも感じないものができあがった
- Unisonはオシレーターを重ねるだけとか嘘やんけ
SuperSawについて
しらべてみた
最初に実装されたのは↑にある、ローランドJP8000というアナログシンセとのこと。
WikipediaではSuperSawについてこんなことが書いてあった。
Supersawはローランドが独自に開発した波形であり、JP-8000やJP-8080に代表される同社製シンセサイザーに搭載されている。Supersawは、1つのオシレーターで複数の鋸波オシレータを再現するというアイデアに基づいている。この波形は、それぞれ微妙に周波数が異なる鋸波7つを合成したものに相当する。
「再現するというアイデアに基づいている」(再現しているとは言っていない)
つまるところ、オシレーター1つで複数のオシレーターを鳴らしている風に聞かせるのがUnisonというやつなので、実際に同時にならしてウネウネになっているものに違和感を憶えるのは当然っぽい
エミュレートしてみたい
こんなのをみつけた
AudioWorkletでこれをやってみる
BLIT
↑の資料の中でBLITという単語に引っかかったので調べてみた
ざっくり俺的解説
ナイキスト周波数
大概パソコンとかスマホで音をならしたり録音するときというのは、サンプリングレートが44100Hzとか48000Hzだったりするけど、実際に音として鳴るのは最大でその半分の22050Hzとか24000Hzになる。(FFTのせいで)
このサンプリングレートの半分の周波数をナイキスト周波数という。
帯域制限
これを踏まえて波形を考えると、例えば
(x) => if x % 1.0 < 0.25 {
return x / 0.25;
}else if x % 1.0 < 0.75 {
return x / 0.25 + 2.0;
}else{
return x / 0.25 - 4.0;
}
みたいにして波形を作っても実際にはちょっと違った波形がでてくる。そこで、あらかじめナイキスト周波数から上をバッサリカットしてしまう。その時にでてくる音がBLITによって導ける。
結局BLITに1mmも触れずに実装して成功したのでメモ
以前位相をずらすという試みをしたことはあったけど、そこの爪が甘かったせいで失敗していた。
オシレーターを7つ重ねて、それぞれランダムに位相をずらしてやる必要がある。よく考えれば当然だけど、規則的にずらすとうねってしまう。
以前はここを規則的にずらしてしまっていたせいでうまくいってなかった。