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 でビルドしていますが、私の環境ではローカルでビルドしたバイナリよりもなぜか遅かったです。