2020/08/19

CollidingCombSynth


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

CollidingCombSynth は Karplus-Strong アルゴリズムによる弦 (K-S弦) をぶつけ合うというアイデアに基づいた実験的なシンセサイザです。たまに擦弦楽器のような音が出ます。

以前に作った KSCymbal を元にしています。

弦の衝突の実装はかなり適当です。まず隣り合う 2 つの K-S 弦の出力の差をとって、ユーザが指定した弦と弦の間の距離 (distance パラメータ) を超えているかどうかを判定します。出力の差が距離を超えているときは、出力の差と距離の間でさらに差をとって次の入力に足し合わせています。

今回の実装では、一方の K-S 弦から、もう一方の K-S 弦だけに衝撃が伝わるので、オシレータシンクのような挙動をします。衝撃を伝える側の弦は一定の周期で距離を縮めるのに対して、衝撃を伝えられる側の弦は自身の周期によらず距離が縮まる影響を受けるからです。

衝撃は UI 上の表記で言うと Strings -> Frequency の 0 から 23 に向かって伝わります。

2020/06/04

L4Reverb


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

L4Reverb は格子構造を使ったステレオリバーブです。

LatticeReverb と比べると 1 チャンネルあたりのディレイの数が 16 から 256 に増えています。また LatticeReverb では 16 セクションの格子構造が 1 つだけでしたが、 L4Reverb は 4 セクションの格子構造が 4 重の入れ子になっています (4 * 4 * 4 * 4 = 256) 。

ローパスフィルタを使っていないので、明るく長いリバーブが得意です。ショートリバーブは金属的な質感になることが多いです。ここでの金属的な質感とはショートディレイをたくさんつないだときのような音を指しています。

2020/05/16

LatticeReverb


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

LatticeReverb はディレイを使った高次のオールパスフィルタを格子状につないで入れ子にしたリバーブです。

単なるショートディレイのような音になったときは LFO を使ってごまかすことができます。

2020/05/02

LightPadSynth


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

LightPadSynth は CubicPadSynth の軽量版です。効率を良くするためにピッチ変調を無くしてディレイを追加しました。ディレイ時間を LFO で変調できるので CubicPadSynth とは異なる音をつくることができます。

以降は LightPadSynth で使った FFT ライブラリについてです。

2020/04/06

PolyBLEP Residual


PolyBLEP Residual を読む (github.io)

Nam, Pekonen, Valimaki による Perceptually informed synthesis of bandlimited classical waveforms using integrated polynomial interpolation で紹介されている B-spline PolyBLEP residual の 4, 6, 8 点の式を導出して試しました。

式の導出は PolyBLAMP residual とほとんど同じで積分が 1 回減るだけです。

画像は PolyBLEP residual のプロットです。

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 のエンベロープからかなり改善しました。