Update: 2020-08-18

IterativeSinClusterはノート 1 つあたり 512 のサイン波を計算する加算合成シンセサイザです。一体、何を考えていたのか iterative sin という言葉を名前に使っていますが、アルゴリズムの種類を表す正しい言葉は recursive sine です。
IterativeSinCluster を使うには CPU が AVX 以降の SIMD 命令セットをサポートしている必要があります。
パッケージには次のビルドが含まれています。
Mac を持っていないので、 macOS ビルドはテストできていません。もしバグを見つけたときは GitHub のリポジトリに issue を作るか、 ryukau@gmail.com までメールを送っていただければ対応します。
Linux ビルドは Ubuntu 18.0.4 でビルドしています。また Bitwig と REAPER で動作確認を行っています。もし Ubuntu 18.04 以外のディストリビューションを使っているときは、プラグインが読み込まれないなどの不具合が起こることがあります。この場合はビルド手順に沿ってソースコードからビルドしてください。
名前が .vst3 で終わるディレクトリを OS ごとに決められた位置に配置してください。
/Program Files/Common Files/VST3/ に配置します。$HOME/.vst3/ に配置します。/Users/$USERNAME/Library/Audio/Plug-ins/VST3/ に配置します。DAW によっては上記とは別に VST3 をインストールできるディレクトリを提供していることがあります。詳しくは利用している DAW のマニュアルを参照してください。
解凍して出てきたディレクトリを OS ごとに決められた位置に配置すると使えるようになります。
/Users/$USERNAME/Documents/VST3 Presets/Uhhyou$HOME/.vst3/presets/Uhhyou/Users/$USERNAME/Library/Audio/Presets/Uhhyouプリセットディレクトリの名前はプラグインと同じである必要があります。 Uhhyou ディレクトリが無いときは作成してください。
プラグインが DAW に認識されないときは C++ redistributable をインストールしてみてください。インストーラは次のリンクからダウンロードできます。ファイル名は vc_redist.x64.exe です。
Ubuntu 18.0.4 では次のパッケージのインストールが必要です。
もし DAW がプラグインを認識しないときは、下のリンクの Package Requirements を参考にして VST3 に必要なパッケージがすべてインストールされているか確認してみてください。
REAPER の Linux 版がプラグインを認識しないときは ~/.config/REAPER/reaper-vstplugins64.ini を削除して REAPER を再起動してみてください。
注意: この節は英語で macOS を使用しているユーザからの報告によって作成されました。日本語でのエラーメッセージが分からなかったので曖昧な書き方になっています。
プラグインの初回起動時に「破損している」という趣旨のメッセージが表示されることがあります。この場合は、ターミナルを開いて、解凍した .vst3 ディレクトリに次のコマンドを適用してみてください。
プラグインは署名されていない (unsigned) 、または公証されていない (un-notarized) アプリケーションとして認識されることがあります。この場合は以下の手順を試してみてください。
sudo spctl --master-disable を実行。上記の手順を実行するとシステムのセキュリティが弱くなるので注意してください。元に戻すには以下の手順を実行してください。
sudo spctl --master-enable を実行。初回設定時は手動で次のファイルを作成してください。
/Users/ユーザ名/AppData/Roaming/UhhyouPlugins/style/style.json 。$XDG_CONFIG_HOME/UhhyouPlugins/style/style.json 。
$XDG_CONFIG_HOME が空のときは $HOME/.config/UhhyouPlugins/style/style.json 。/Users/$USERNAME/Library/Preferences/UhhyouPlugins/style/style.json 。既存の色のテーマを次のリンクに掲載しています。 style.json にコピペして使ってください。
style.json の設定例です。
{
"fontPath": "",
"foreground": "#000000",
"foregroundButtonOn": "#000000",
"foregroundInactive": "#8a8a8a",
"background": "#ffffff",
"boxBackground": "#ffffff",
"border": "#000000",
"borderCheckbox": "#000000",
"borderLabel": "#000000",
"unfocused": "#dddddd",
"highlightMain": "#0ba4f1",
"highlightAccent": "#13c136",
"highlightButton": "#fcc04f",
"highlightWarning": "#fc8080",
"overlay": "#00000088",
"overlayHighlight": "#00ff0033"
}16 進数カラーコードを使っています。
プラグインはカラーコードの 1 文字目を無視します。よって ?102938 や \n11335577 も有効なカラーコードです。
2 文字目以降のカラーコードの値に 0-9a-f 以外の文字を使わないでください。
以下は設定できる色の一覧です。設定に抜けがあるとデフォルトの色が使われます。
fontPath: フォント (*.ttf) の絶対パス。VST 3 版では実装されていません。foreground: 文字の色。foregroundButtonOn: オンになっているボタンの文字の色。 foreground か boxBackground のいずれかと同じ値にすることを推奨します。foregroundInactive: 非アクティブなタブの文字の色。background: 背景色。xboxBackground: 矩形の UI 部品の内側の背景色。border: 縁の色。borderCheckbox: チェックボックスの縁の色。borderLabel: パラメータセクションのラベルの左右の直線の色。unfocused: つまみがフォーカスされていないときの色。highlightMain: フォーカスされたときの色。スライダの値の表示にも使用されます。highlightAccent: フォーカスされたときの色。一部のプラグインをカラフルにするために使用されます。highlightButton: ボタンがフォーカスされたときの色。highlightWarning: 変更に注意を要する UI がフォーカスされたときの色。overlay: オーバーレイの色。overlayHighlight: フォーカスを示すオーバーレイの色。つまみとスライダーでは次の操作ができます。
Gain 、 Semi などで使われている数値スライダーでは、上記に加えて次の操作ができます。
Overtone では次の操作ができます。
操作できる箇所を右クリックすると DAW によって提供されているコンテキストメニューを開くことができます。
図が小さいときはブラウザのショートカット Ctrl + マウスホイール や、右クリックから「画像だけを表示」などで拡大できます。
図で示されているのは大まかな信号の流れです。実装と厳密に対応しているわけではないので注意してください。
どちらも音量を調整します。出力のピーク値は Boost * Gain となります。
Note 、 Chord 、 Overtone のゲインを調整すると音がかなり小さくなることがあります。そんなときに Boost が使えます。
音量エンベロープのパラメータです。
A (Attack) : 鍵盤を押した瞬間から最大音量になるまでのアタック時間。D (Decay) : 最大音量からサステイン音量になるまでのディケイ時間。S (Sustain) : アタックとディケイが終わった後に鍵盤を押し続けているときのサステイン音量。R (Release) : 鍵盤から指を離したあとに音量が 0 になるまでのリリース時間。音量エンベロープのアタックの曲線を変更するパラメータ。
Low と High の 2 つのシェルビングができます。
カットオフ周波数はノートの音程を基準として、 Semi で指定した半音単位で相対的に決まります。例えば音程が C4 、 Semi が 12.000 のときは カットオフ周波数は C4 + 12 半音 = C5 になります。
変更する音量は Gain で調整できます。
Low シェルビングは Semi で指定したカットオフ周波数以下のサイン波の音量を変更します。High シェルビングは Semi で指定したカットオフ周波数以上のサイン波の音量を変更します。チェックを入れると、ナイキスト周波数より高い周波数が指定されたサイン波もレンダリングします。
ナイキスト周波数とは、ざっくりいえば録音したデータが再現可能な最高周波数のことです。音を生成するときはナイキスト周波数以上の値を指定することができますが、折り返し(エイリアシング)と呼ばれる現象によって計算結果は予期しない周波数になってしまいます。 Add Aliasing は、こうしたエイリアシングノイズを足し合わせるオプションです。
チェックを入れると、 Semi の符号を逆転させます。たとえば 7.000 は -7.000 として処理されます。
ノートのオクターブです。
平均律の値です。この値によって Semi と Milli の調律を変更できます。例えば ET が 12 なら 12 平均律になります。 ET は Equal Temperament の略です。
ホスト側から送られてくるノートの調律を変更するわけではないので注意してください。
サイン波の周波数を変更します。
計算式は ノートの周波数 * (1 + fmod(Multiply * pitch, Modulo)) のようになっています。 pitch は Note 、 Chord 、 Overtone で指定した値から計算されるピッチです。 fmod(a, b) は a を b で割った余りを計算する関数です。
特定の値を変更したときに、変更前の値から変更後の値に移行する時間(秒)です。
Smooth と関連するパラメータのリストです。 * はワイルドカードです。
Gain セクションの全てChord.PanChorus の Key Follow 以外他のパラメータはノートオンのタイミングで指定されていた値をノートの発音が終わるまで続けて使います。
最大同時発音数です。
チェックを入れると、ノートオンごとに乱数シードをリセットします。
乱数のシード値です。この値を変えると生成される乱数が変わります。
ノートオンごとに各サイン波の音量をランダマイズする度合いです。
ノートオンごとに各サイン波の周波数をランダマイズする度合いです。
サイン波のピッチと音量を指定します。
1つの Note あたり 16 の Overtone が発音されます。8つの Note で 1 つの Chord になります。そして 4 つの Chord が使えます。
Note と Chord に共通のパラメータです。
Gain : サイン波の音量。Semi : ノートの基本周波数からの距離。単位は半音。Milli : ノートの基本周波数からの距離。単位は 1 / 1000 半音。 1 / 10 セント。Overtone は左端が基本周波数(第1倍音)の音量で、右に一つ進むごとに第2倍音、第3倍音、 … 、第16倍音の音量を表しています。
サイン波の周波数の計算式は次のようになっています。
function toneToPitch(semi, milli):
return 2 ^ (1000 * semi + milli) / (ET * 1000)
for each Chord:
chordPitch = toneToPitch(Chord.semi, Chord.milli)
for each Note:
notePitch = toneToPitch(Note.semi, Note.milli)
for each Overtone:
frequency = midiNoteFrequency
* (1 + mod(Multiply * Overtone * notePitch * chordPitch, Modulo))
Dry/Wet の比率を調整します。
コーラスの LFO の周波数です。中央から右に回すと正、左に回すと負の周波数を指定できます。
左右の広がりを調整します。
LFO によってディレイ時間を変調する度合いです。 3 つのディレイが用意されています。
ディレイ時間です。
LFO の位相です。
ディレイの間での位相差です。
ディレイのフィードバックです。
チェックを入れると、ディレイ時間をノートの音程に応じて変更します。
IterativeSinCluster のライセンスは GPLv3 です。 GPLv3 の詳細と、利用したライブラリのライセンスは次のリンクにまとめています。
リンクが切れているときは ryukau@gmail.com にメールを送ってください。
VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.