2020/04/05

変な 4-pole フィルタ


変な 4-pole フィルタを読む (github.io)

2重ばねの式の係数や項を適当に入れ替えて変な特性のフィルタを作りました。レゾナンスを動かしたときの音の変わり方が普通のローパスやハイパスとは異なります。

画像はフィルタの振幅特性です。

LV2 の CVPort プラグインとして実装しました。
- https://github.com/ryukau/LV2Plugins/tree/master/lv2cvport/CV_DoubleFilter

2020/04/04

3-pole ローパスフィルタ


3-pole ローパスフィルタを読む (github.io)

ばねとダンパの微分方程式がフィルタになりそうだと思ったので、適当に係数などを入れ替えてローパスフィルタを作りました。

記事では適当に立てたフィルタの式から伝達関数を出して、カットオフ周波数とレゾナンスのチューニングを行っています。このフィルタは安定していてレゾナンスも効くので使いやすいです。

LV2 の CVPort プラグインとして実装しました。
- https://github.com/ryukau/LV2Plugins/tree/master/lv2cvport/CV_3PoleLP

2020/03/20

放物線エンベロープ


放物線エンベロープを読む (github.io)

放物線を使ったエンベロープをつくりました。放物線ではなくなりますが、加速度を一定ではなく適当な関数に置き換えると面白そうです。

2020/03/18

PolyExp エンベロープ



PolyExp エンベロープを読む (github.io)

WobblingMetalBoard を作っているときに思いついたエンベロープについてまとめました。

画像は PolyExp エンベロープの出力です。エンベロープの式は E(t) = t^a * exp(-b * t) です。

2020/03/17

指数曲線のエンベロープ


指数曲線のエンベロープを読む (github.io)

シンセサイザでよく使われている指数曲線のエンベロープについてまとめました。

アタック時間が短いときのプチノイズの低減方法は効果はありますが、かなり適当です。記事中の実装と同じエンベロープを使っている IterativeSinCluster の出力に +80 dB くらいの極端なハイシェルフフィルタをかけるとノイズが完全に消えてはいないことが確認できます。

画像は指数曲線の ADSR エンベロープがリリースの途中でトリガされたときのテスト結果です。

直線の ADSR エンベロープ

直線の ADSR エンベロープを読む (github.io)

直線の ADSR エンベロープについてまとめました。

紹介している実装は CubicPadSynth で使っているものを元にしています。場当たり的に実装してひどいことになってしまった SyncSawSynth のエンベロープからかなり改善しました。

2020/03/16

オーディオプラグインの UI から入力された値の補間


オーディオプラグインの UI から入力された値の補間を読む (github.io)

VST 3 や LV2 で UI から入力されたパラメータをオーディオバッファ内で補間する方法についてまとめました。

ユーザから指定された時間に応じて線形補間するだけなのですが、バージョンの古い SevenDelay などでは補間した値がパラメータの範囲を超えることによって音が止まるというバグ(修正済み)の原因になっていたので、この機会に見直してより安全で速い実装に置き換えました。

2020/03/05

CubicPadSynth


ダウンロードとマニュアル (github.io)
ソースコード (github.com)

CubicPadSynth は PADsynth algorithm を使ったウェーブテーブル方式のシンセサイザです。極端に低い音でも滑らかになるようにバイキュービック補間を使っています。 LFO の波形はおおまかに手書きできます。

MIDI ノート番号の範囲と 20 kHz までのピッチベンドをカバーできるように 136 のウェーブテーブルを内部的に保持しているのですが、これが原因でとても重たいです。 1 つのテーブルは長さ 2^18 サンプルで型が float なので、 136 * 2^18 * 4 / 1024^2 = 136 MiB のメモリを使います。また、マニュアルのページからダウンロードできるバイナリは GitHub Actions でビルドしていますが、私の環境ではローカルでビルドしたバイナリよりもなぜか遅かったです。

2020/01/25

EsPhaser


ダウンロードとマニュアル (github.io)
ソースコード (github.com)

EsPhaser は 4096 の 2 次 Thiran オールパスフィルタと 16 の LFO を備えたフェイザです。 CPU を大きく消費するので使用時は注意してください。

これだけたくさんのオールパスをつなぐと、フェイザというよりディレイに近い音が出ます。 1 つのオールパスで 2 サンプルのディレイが生じるので、サンプリング周波数が 48000 Hz のときは 2 * 4096 / 48000 0.17 秒ほどのディレイがフィードバックで生じるはずです。

2020/01/17

EnvelopedSine

ダウンロードとマニュアル (github.io)
ソースコード (github.com)

EnvelopedSine は 1 つのノートごとに 64 のサイン波を計算する加算合成シンセサイザです。 IterativeSinCluster との違いは、サイン波ごとに独立した AD 音量エンベロープと tanh サチュレータがついていることです。

思っていたよりも作れる音の種類が限られていたのでフェイザとユニゾンをつけてごまかしました。サチュレーションはエイリアシングノイズが出たので、オシレータの周波数が高いときはオフになるようにしています。

このシンセで使ったアルゴリズムはドラムのばちの音を作るときに使える感じがします。

2019/12/12

IterativeSinCluster

ダウンロードとマニュアル (github.io)
ソースコード (github.com)

IterativeSinCluster は 1 つのノートごとに 512 のサイン波を計算する加算合成シンセサイザです。

sin の計算方法は Martin Vicanek さんによる A New Recursive Quadrature Oscillator の appendix で紹介されていた biquad oscillator を使いました。このアルゴリズムは周波数が変更されないときに限って高速に sin を計算できます。

これだけ多くのサイン波を足し合わせたら色々な音が出るだろうと思っていたのですが、わりと似たような音しか出ないシンセになりました。適当に Gain, Semi, Milli と Overtone を動かして Random->To Pitch を9 時くらいにするとそれっぽい音が出ます。

コーラスは FDNCymbal のトレモロを 3 つ並列につないでいます。