シリーズのすべての投稿:
パート1.紹介とセットアップパート2.コードの学習パート3. VSTおよびAUパート4.デジタル歪みパート5.プリセットとGUIパート6.信号合成パート7. MIDIメッセージの受信パート8.仮想キーボードパート9.封筒パート10. GUIの改善パート11.フィルターパート12.低周波発振器パート13.再設計パート14.ポリフォニー1パート15.ポリフォニー2パート16.アンチエイリアス
最初のプラグインの作成を開始します。 それは汚いデジタル歪みになります。 より具体的には、プラグインは単にオーディオ信号の振幅のピークを
トリミングします。
デジタル歪み
特定のしきい値を超える信号値は、それを超えないように制限されます。

「超過」と言うことは、「特定の正のしきい値を超えるか、特定の負のしきい値を下回る」ことを意味します。
古き良き
duplicate
スクリプトを使用して、プロジェクトに新しい名前を付けてコピーできます。 また、新しいプロジェクトごとに前に説明したすべての変更を行う必要はありません。
ターミナルを開き、
IPlugExamplesディレクトリに移動して、これを入力します。
./duplicate.py MyFirstPlugin/ DigitalDistortion YourName
以前の投稿を読んでいない場合、それらの結果
はこちらからダウンロードでき
ます 。 Macでこれを行う場合、他のプロジェクトがXcodeで開いていないことを確認してください。 新しく作成された
DigitalDistortionフォルダーには、
DigitalDistortion.xcodeprojファイルがあります。 開いて、APPターゲットアセンブリがエラーなしで起動することを確認します。 前述のようにスキーマを編集して、REAPERがVSTおよびAUで実行されるようにします。
起動時に渡される
引数が目的の
.rppファイルを指すことを忘れないでください。
REAPERを起動すると、
MyFirstPluginではなく
DigitalDistortionがロードされます。 奇跡 これは、REAPERのプロジェクトファイルが、構造化されたテキストファイルであり、
duplicate
スクリプトがすべての「MyFirstPlugin」を「DigitalDistortion」に置き換えたためです。
最初に
mGain
パラメータの名前を
mGain
変更しましょう。
DigitalDistortion.hを開き、
private
変数の名前を変更します。
private: double mThreshold;
DigitalDistortion.cppで、 Threshold
発生したすべての
Gain
(Cmd + Alt + F)
に置き換えます。 組み立てるときに、エラーがポップアップしないはずです。 コンストラクターのパラメーター初期化行で、最小値として
0.01
、デフォルト値として
100.0
を指定します。
GetParam(kThreshold)->InitDouble("Threshold", 100.0, 0.01, 100.0, 0.01, "%");
次に、デジタル信号処理を直接記述しましょう。
void DigitalDistortion::ProcessDoubleReplacing( double** inputs, double** outputs, int nFrames) {
fmin
と
fmax
定義され
fmax
いない
fmin
エラーが
fmin
場合は、単に
min
と
max
名前を変更してみてください。 これで解決しない場合は
、DigitalDistortion.cppの
ヘッダーに次を追加します。
#include <math.h>
これで問題が解決しない場合は、前の行の代わりにこれを追加します。
#include <algorithm>
fmin
を
std::min
に、
fmax
を
std::max
置き換えます。
channelCount
値
channelCount
ハードコーディングされているという事実にもかかわらず、外部のforループを使用してチャネルを反復処理することにより、冗長性をある程度除去しました。 つまり、最初にプラグインは1つのチャネルからのいくつかのサンプルを処理し、次に2番目のサンプルで同じことを行います。
条件付き
if
の興味深い点。 振幅が正の値の場合、入力値またはしきい値のいずれか小さい方を選択します。 反対に、負の値の場合は、大きい方を選択します:
*input
または負のしきい値。 つまり、常にゼロに近い値を選択します。
REAPERでプラグインを起動し、テストサウンドに駆動します。 ノブを右いっぱいまで回すと、クリアな音が聞こえます。 ノブを反時計回りに回すほど、信号の歪みが大きくなります。
歪みが大きくなると、信号はより静かになります。これは、しきい値をゼロに近づけるにつれて小さくし、それに応じて振幅をより静かな値にカットするためです。 これを補正するには、入力値をしきい値で除算します。
if(*input >= 0) { *output = fmin(*input, mThreshold); } else { *output = fmax(*input, -mThreshold); } *output /= mThreshold;
もう少し高く、パラメーターの最小値を
0.01
設定します。 したがって、ノブを左いっぱいに回しても、ゼロで除算することはありません。
プラグインを再度実行すると、振幅は同じレベルのままになります。 しかし、音量は大きくなり
ます 。振幅のカットオフにより、正弦波の形状が
蛇行に近くなり、
蛇行の rms値が大きくなり
ます 。
これまでのところ、私は意図的にデジタル信号処理のジャングルに入らないようにしています。 私の意見では、良いプラグインは単なる信号処理アルゴリズムではありません。 これは、次のものを含む混合物です
- 信頼できるホスト互換性(設定、安定した動作)
- 良い音(純粋なデジタル処理です)
- 直感的なユーザーインターフェース
- 美しい外観
したがって、次の投稿でサウンド処理アルゴリズムに飛び込む前に、プリセットとより快適なインターフェースを追加します。
元の記事:
martin-finke.de/blog/articles/audio-plugins-005-digital-distortion