チュートリアル:DSP入門
デジタル信号処理とオーディオバッファ操作の領域を理解してください。 JUCE DSPモジュールの基礎、そして、そのクラスを自分のオーディオアプリケーションやプラグインに組み込む方法を学びます。
レベル:Advanced
プラットフォーム:Windows, macOS, Linux
プラグイン形式:VST, AU, Standalone
クラス: dsp::ProcessorChain, dsp::Gain, dsp::Oscillator
このプロジェクトには、C++14 の機能をサポートするコンパイラが必要です。 Xcode と Visual Studio の最近のバージョンには、このサポートが含まれています。
はじめる
このチュートリアルを読む前に、シンセシスの基本を理解し、MPEに入門していることを確認してください。 MPEについてもっと知りたい方は、こちらのチュートリアルをご覧ください:マルチ・ポリフォニック・シンセサイザーを作る
このチュートリアルのデモプロジェクトはこちらからダウンロードしてください: PIP | ZIP プロジェクトを解凍し、最初のヘッダーファイルをProjucerで開きます。
このステップで助けが必要な場合は、チュートリアルを参照してください: Projucerパート1:Projucerを使い始める
デモプロジェクト
プロジェクトはプラグインとして構想されていますが、IDEで適切なデプロイメント・ターゲットを選択することで、スタンドアロン・アプリケーションとして実行することができます。Xcodeでは、以下のスクリーンショットのように、メインウィンドウの左上でターゲットを変更 することができます:
デモ・プロジェクトでは、プラグインの上半分にMIDIキーボードが画面上に表示され、下半分にはオシロスコープを通して信号が視覚的に表示されます。現在のところ、鍵盤が押されても、オシレーターの実装を提供しない限り、プラグインは音を出力しません。
MIDIコントローラーをお持ちの場合は、このチュートリアル中、画面上のキーボードを使う代わりに、MIDIコントローラーを接続することもできます。
DSPとは?
デジタル信号処理では、デジタルデータを操作して、信号に対して特定の処理を行います。デジタルオーディオ処理では、異なるドメインのオーディオデータを扱うことができます:
- 時間領域:時間に関して分析が行われる一次元信号
- 空間領域:ある空間に関して分析が行われる多次元信号
- 周波数領域:時間または空間を周波数で表す特定の領域
高速フーリエ変換(FFT)
時間領域または空間領域の信号は、フーリエ変換と呼ばれる変換式を用いて周波数領域に変換することができます。この変換関数の一般的な効率的実装は高速フーリエ変換(FFT)であり、JUCE DSPモジュールで遭遇することがあります。
FFTは、オーディオ信号を周波数に分解し、それぞれの周波数の大きさと位相情報を表現することができます。逆関数を使用すると、信号を元のドメインに戻すことができるため、フィルタリングなど個々の周波数成分を処理するのに非常に便利です。
有限/無限インパルス応答(FIR/IIR)
DSP には主に2つのデジタル・フィルター設計がある:
- 有限インパルス応答フィルター(FIR):各出力サンプルを 以前の入力サンプルの関数として処理する安定した設計。FIRフィルタは線形位相にすることができ、多くの場合、設計は単純だがIIRフィルタより効率は低い。
- 無限インパルス応答フィルター(IIR):各出力サンプルを以前の入力サンプルと出力サンプルの関数として処理する、不安定な設計の可能性がある。IIRフィルタは以前の出力サンプルを使用するため内部フィードバックが発生し、設計は難しいがFIRフィルタよりも効率的である。
これらのフィルター設計の中には、フィルターの鋭さや遷移周波数で発生するリップルの量を決定する多くの異なる伝達関数がある。これらの設計の多くは、アナログ・フィルターにインスパイアされたものであり、異なる伝達関数は、異なるアナログ対応をエミュレートしようとしている。
JUCE DSP モジュールには、以下のような転送機能があります:
- FIR伝達関数ウィンドウ、カイザー、トランジション、最小二乗法、ハーフバンドイコライザップル
- IIR伝達関数:バターワース、チェビシェフ・タイプ1、チェビシェフ・タイプ2、楕円、ハーフバンド・ポリフェーズ・オールパス
このようなフィルター設計に興味がある方は、このトピックについてより深く解説した資料をオンラインでたくさん見つけることができますが、このチュートリアルの目的上、私たちが始めるための基本的なこと以上のことを取り上げました。