2020/05/02

LightPadSynth


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

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

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


LightPadSynth を作り始めたきっかけは CubicPadSynth の KVR のページに投稿された Windows 7 で動かないという報告です。話を聞いてみたところ FFTW3 が問題になっているように思えたのでポータブルな実装を作ることにしました。

FFTW3 が動かなかった理由はよく分からないですが、静的にリンクしていたのが理由の一つかと思います。 CubicPadSynth では静的にリンクするために Windows 10 + VS 2019 Community の環境で CMake からビルドした fftw3f.lib を使っています。

静的にリンクしたのは dll からさらに dll を呼び出すとどうなるのか分からなかったからです。少なくとも Linux 環境ではプラグインから *.so に動的リンクすることはよくないと言われています

代替の FFT ライブラリとして、まずはヘッダのみの C++ 実装がある pocketfft を選びました。ヘッダのみという条件をつけているのは、コードの改変無しで実行時に CPU に応じた SIMD 命令セットを使うこと (runtime CPU dispatching) ができるからです。

pocketfft を使ったコードは LV2 版ではうまく動いたのですが、 VST 3 版は macOS ビルドの CI が通りませんでした。 aligned_alloc が実装されていないという警告が出ていて、テストの途中でクラッシュしていました。

macOS でのクラッシュを解決できなかったので、実装がシンプルな AudioFFT を改変して使うことにしました。 AudioFFT はライブラリを選んで使えるようになっていますが、 LightPadSynth ではフォールバックのために用意された Ooura FFT を使っています。