Csoundでシフトレジスタ&AU/VST plugin化 (3/3)
以前の記事で説明したシフトレジスタをCsoundでプログラミングし、AU/VST plugin化します。
CabbageによるAU/VST plugin化
■Cabbage
CabbageはCsoundのIDEの1つで、Csoundのコーディング環境として使えるだけではなく、Cabbage独自のコードを記述することで、CsoundのコードにGUIを付けることができます。CabbageはJUCE class libraryを使っているので、動作が速く見た目も良いGUIが作成できます。
作成したGUIは、AU/VST/FMOD plugin、VCV Rack moduleにエクスポートできるだけでなく、Standalone applicationとしてもエクスポート可能です(VCV Rackについては機能限定あり)。
なおCabbage for WINDOWSは、64bit版WINDOWSが必要です。
■Pluginの動作条件
Cabbageからエクスポートしたplugin等は、CsoundがインストールされたPCでなければ動作しません(エクスポートしたplugin fileにCsound Libraryは含まれないため)。
Csoundをインストールしていないけれどpluginを試したい、という方には、Cabbageをインストールすることをお勧めします(CabbageのインストーラーでCsoundも同時にインストールすることができます)。
■シフトレジスタのGUI仕様
以下の仕様でGUIを作成します。GUIのグラフィックは自作せず、標準のものを使います。
コントロールするパラメータ
ビットシフトのスピード(0〜10,000回/秒: 可聴域をカバー)
Bit 0をBit 7にシフトする際にビット反転する確率(0〜1)
シフトレジスタのオーディオ出力の切り替え
Decimal (シフトレジスタの値を10進数で出力)
=>Turing Machine風の出力Bit0 (シフトレジスタの値からbit 0の値(0 or 1)だけを取り出し出力)
=>Doepfer A-117風の出力
GUIに表示するデータ
シフトレジスタの現在値
10進数(0〜255)で表示
Bit 0〜bit 7の値(0 or 1)を8個のチェックボックスのON/OFFで表示(Turing Machine風のbit表示)
オーディオ出力の波形表示
■GUIのコーディング
Cabbageのメニューの File > Examples>Widgets に各widgetの実例があるので、これを参考にコーディングします。各widgetの詳細はCabbage Docsで調べます。
今回使用したwidgetの詳細説明は省略しますが、いくつかポイントを挙げておきます。
guiMode("queue")を設定する
checkbox widgetは、0が書き込まれればOFF、0以外の値が書き込まれればONとなる
オーディオ出力の波形の表示はsignaldisplay widgetで行うが、そのためにはCsound opcodeの'display'で、表示対象のシグナルを出力しておく必要がある
波形の表示を有効にするために、CsOptionsに'--displays'を設定する
■その他のポイント
各bitの値の参照
Csoundには2進数を操作する関数が無いので、自分で計算する必要があります。例えば、シフトレジスタの値kvalからbit 4の値を参照するためには、kvalと16=$${2^4}$$の間でビット演算子'AND'(&)を行います。得られる結果はbit 4=1なら16、bit 4=0なら0です。さらに$${2^4}$$で割れば、bit 4の値が1 or 0で得られます。
checkbox widgetをONにする場合、widgetにセットする値は0以外であればどんな数でも良いので、割り算を省略してANDの結果をそのままセットしています。
cabbageSetValue "bit4", kval&16, kpulse
オーディオ出力のスケーリング
作成したシフトレジスタは8 bitなので、Decimal (10進数)で0〜255の値をとります。またシフトレジスタのbit 0の値は0 or 1です。Csoundのコードで0dbfs = 32768(出力範囲:-32768〜+32768)と設定しているため、シフトレジスタの値をオーディオ出力する際に、以下の換算式でスケーリングしています。
■完成したShift Registerのcsd file
■Pluginとしてエクスポート
CabbageからPluginへのエクスポートは非常に簡単です。VST2であれば File > Export Plugin > VST Export >Export as VST Plugin Synth を選びpluginを保存するだけです。
同じようにAU plugin、VCV Rack、Standalone Application等へのエクスポートが可能です。
■エクスポートしたplugin file
「Pluginの動作条件」に記したとおり、pluginはCsoundがインストールされた環境でのみ動作します(なので、plugin fileを配布する意味があまり無いですが、参考までに、、、)。
各plugin fileは、DAW等が指定するプラグインフォルダに保存します。
Mac版
AU版 :ShiftRegister.component
VST2版:ShiftRegister.vst
VST3版:ShiftRegister.vst3
以下の環境で動作確認済み:
Ableton Live Lite(10.1.40) / macOS Monterey(12.1) / MacBook Pro(Intel)
WINDOWS版
ShiftRegister.csdもplugin fileと同じ場所に保存してください。
VST2版:ShiftRegister.dll
VST3版:ShiftRegister.vst3
以下の環境で動作確認済み:
Ableton Live Lite(11.0.12) / Windows 10 Home (64bit)
Ableton Live LiteでのVST3 plugin使用例
■まとめ
CsoundのコードにCabbageでGUIを付けることで、シフトレジスタを使った市販のモジュールと同様な機能を実現できました。作成したシフトレジスタは、動作原理を解説するためにシンプルな構成にしましたが、これをベースに下記のような拡張が考えられます。
シフトレジスタのbit長を可変とする
オーディオ出力のスケーリング方法の工夫(指定の音階にマッピングする等)
ランダムネスのコントロール方法を変えてみる。フィボナッチ LFSRやガロア LFSRを使い、かつランダムネスをコントロールするにはどうすれば良いか?
全体をUser Defined Opcodes (UDO)にして、1 opcodeとして扱えるようにする
なお、一連の記事を作成するにあたり、Music Thing Modular/Turing Machine や Doepfer A-117 Digital Noise / Random Clock / 808 Sound Source を参考にしましたが、これらのモジュールの電子回路やソースコードの分析はしていません。モジュールの表面的な動作やマニュアルを参考にしました。
Version history
v1.0 : 2022/01/05公開