# SDK に含まれるネイティブオーディオプラグインの例

> Example DSP plug-ins with and without GUI customization.

[オーディオプラグイン SDK](https://github.com/Unity-Technologies/NativeAudioPlugins) には、さまざまなタイプのオーディオプラグインが含まれています。SDK のプラグインコードはパブリックドメインで使用可能なため、このコードをテンプレートとして使用できます。プロジェクトには、カスタマイズされた GUI がある場合とない場合のネイティブ DSP プラグインの例が含まれています。

IDE でサンプルプラグインコードを編集してコンパイルするには、この SDK に複数の IDE のプロジェクトが含まれています。以下の表は、各 IDE のプロジェクトの場所を示しています。

| **IDE**           | **Location**                                                                                |
| ----------------- | ------------------------------------------------------------------------------------------- |
| **Visual Studio** | `NativeAudioPlugins-master\NativeCode\VisualStudio\AudioPluginDemo.sln` (プラグインプロジェクト)。      |
| **Visual Studio** | `NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI\AudioPluginDemoGUI.sln` (GUI プロジェクト)。 |
| **XCode**         | `NativeAudioPlugins-master\NativeCode\Xcode\AudioPluginDemo.xcodeproj`                      |
| **UWP**           | `NativeAudioPlugins-master\NativeCode\UWP\AudioPluginDemo.sln`                              |

Unity のサンプルプラグインにアクセスする手順:

1. `demos` Unity プロジェクトを開きます (フォルダー: **NativeAudioPlugin** > **Assets**)。

2. Unity プロジェクトで、**Assets** > **mixers** に移動します。

3. ミキサーの横にある矢印をクリックして、ミキサーを展開します。

4. 任意の Audio Mixer Group Controller をクリックします。Audio Mixer Group Controller にアタッチされた効果が Inspector に表示されます。

5. 効果を追加するには、**Add Effect** ボタンをクリックします。追加できるサンプルプラグイン効果がすべて表示されます。

6. 追加する効果を選択します。Inspector に効果が表示されます。

Inspector を開いた状態で再生モードに入ると、サウンドの変化に応じて効果の一部が更新されます。

## カスタム GUI がないサンプルプラグイン##example-no-gui

このセクションに記載するサンプルプラグインは、`AudioNativePlugin` プロジェクトに含まれており、カスタム GUI の代わりにデフォルトの Unity スライダーがあります。

プラグインコードファイルに直接アクセスするには、SDK フォルダーで `NativeAudioPlugins/NativeCode` に移動します。


**カスタム GUI なしのシンプルなプラグイン。:**
![](/api/media?file=/engine/6000.0/media/images/AudioMixerStereoWidener.png)

### NoiseBox プラグイン##the-noisebox-plug-in

NoiseBox プラグインは、可変周波数でホワイトノイズの入力信号を加えて増幅するプラグインです。これを Lofinator プラグインやアニメーションパラメーターと組み合わせて使用することで、携帯電話の音、受信状態が悪いラジオ、壊れたスピーカーなどの効果をシミュレートすることができます。

### Ring Modulator サンプルプラグイン##the-ring-modulator-example-plug-in

Ring Modulator サンプルプラグインは、正弦波の入力信号を増幅する単純な変調器の例です。電波ノイズや信号消失の効果を生成します。効果を高めるには、周波数の異なる複数のリング変調効果を連鎖させます。

### StereoWidener サンプルプラグイン##the-stereowidener-example-plug-in

StereoWidener プラグインは、可変遅延で mono (モノラル) や side コンポーネントにステレオ入力信号を分解し、その後、それらをステレオ効果の感覚を高めるために再結合します。

### Lofinator プラグイン##the-lofinator-plug-in

Lofinator プラグインは、信号の単純なダウンサンプリングと量子化を行います。これを NoiseBox プラグインやアニメーションパラメーターと組み合わせて使用することで、携帯電話の音、受信状態が悪いラジオ、壊れたスピーカーなどの効果をシミュレートすることができます。

## カスタム GUI があるサンプルオーディオプラグイン##example-with-gui

このセクションでは、イコライゼーションやマルチバンド圧縮の効果など、高度なプラグインの使用例を紹介します。これらのプラグインには、前のセクションのプラグインよりも多くのパラメーターがあります。プラグインパラメーターの中には、デフォルトのスライダーに対しては複雑すぎるものがあります。

サンプルカスタム GUI コードに直接アクセスするには、SDK フォルダーで `NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI` に移動します。

### Equalizer サンプルプラグイン##the-equalizer-example-plug-in

Equalizer プラグインには、結果カーブと個々のフィルターの影響を表示するディスプレイグラフが含まれています。1 つまたは複数のパラメーター値を変更するには、コントロールグラフでパラメーターをクリックしてドラッグします。このようにすると、スライダーごとの変更は不要になります。


**Frame:**
![](/api/media?file=/engine/6000.0/media/images/AudioMixerCustomGUI.png)

フィルターカーブのゲインと周波数を変更するには、コントロールグラフで 3 つのバンドをドラッグします。各バンドの形状を変更するには、シフトキーを押しながらバンドをクリックしてドラッグします。

Unity の内部 API 関数を使用して、カーブのプロットや、周波数応答のアンチエイリアスカーブの描画を行うことができます。

### プラグインデータと GUI パフォーマンスを分析するコード##code-to-analyze-plug-in-data-and-gui-performance

Equalizer プラグインと Multiband プラグインには、プラグインの効果を可視化するために入力スペクトルと出力スペクトルをオーバーレイするコードもあります。GUI コードはオーディオ処理よりもかなり低い更新レートで実行され、オーディオストリームにアクセスできません。そのため、このデータを読み取るために、以下の関数がネイティブコードで提供されています。

```
UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK GetFloatParameterCallback(
    UnityAudioEffectState* state,
    int index,
    float* value,
    char *valuestr)
{
    EffectData::Data* data = &state->GetEffectData<EffectData>()->data;
    if(index >= P_NUM)
        return UNITY_AUDIODSP_ERR_UNSUPPORTED;
    if(value != NULL)
        *value = data->p[index];
    if(valuestr != NULL)
        valuestr[0] = 0;
  return UNITY_AUDIODSP_OK;
}
```

この関数により、GUI はネイティブプラグインから浮動小数点データを読み取ることができます。`GetFloatBufferCallback` という配列バリアントもあります。プラグインシステムは、リクエストが UI またはネイティブコードのパフォーマンスに影響を与えない限り、データを受け入れます。

Equalizer と Multiband のコードは、`FFTAnalyzer` というユーティリティクラスを使用することで、プラグインから入出力データを簡単にフィードしてスペクトルを取得できます。その後、`GetFloatBufferCallback` がこのスペクトルデータを再サンプリングし、C# GUI コードに送信します。

`FFTAnalyzer` が固定周波数分解能で分析を実行できるように、データを再サンプリングする必要があります。`GetFloatBufferCallback` は、リクエストされたサンプルの数を返します。この数はデータを表示しているビューの幅によって決まります。

### CorrelationMeter サンプルプラグイン##the-correlationmeter-example-plug-in

CorrelationMeter プラグインには最小限の DSP コードがあります。このプラグインは、右チャンネルの振幅に対して左チャンネルの振幅をプロットして、信号のステレオ効果を表示します。


**CorrelationMeter プラグインのカスタム GUI。:**
![](/api/media?file=/engine/6000.0/media/images/AudioMixerDemoCorrelationMeter.png)


**Equalizer GUI とオーバーレイされたスペクトル分析 (緑のカーブがソース、赤は処理後)。:**
![](/api/media?file=/engine/6000.0/media/images/AudioMixerDemoMultiband.png)

Equalizer と Multiband のどちらの効果も、意図的にシンプルなままで最適化されていませんが、プラグインシステムでサポートされる複雑な UI の好例です。

### ラウドネスモニタリングツール##loudness-monitoring-tool

これは 3 つの異なる時間スケールでレベルを測定するラウドネスモニタリングツールの例です。これは単なるデモを目的としていますが、現在のラウドネス規格に準拠したモニターツールを作成できます。カーブレンダリングコードは Unity に組み込まれています。


**Frame:**
![](/api/media?file=/engine/6000.0/media/images/AudioMixerDemoLoudnessMeter.png)

### DSP クロックに同期させる##synchronizing-to-the-dsp-clock

プラグインシステムを使用して、サウンドを処理する代わりに生成することもできます。

`Plugin_TeeBee.cpp` と `Plugin_TeeDee.cpp` は、シンプルなシンセサイザーです。

* ランダムな音符でパターンを生成します。
* シンセシスエンジンでフィルターやエンベロープを調整するパラメーターがあります。

`ProcessCallback` は `state->dsptick` パラメーターを読み取り、楽曲内での位置を決定します。このカウンターはグローバルサンプル位置です。すべてのプラグイン効果を同じサンプルベースのクロックに同期する手順は以下のとおりです。

1. サンプルに指定された各音符の長さでカウンターを除算します。

2. この除算の余りが 0 の場合は、シンセシスエンジンに音符イベントを送信します。

事前に録音した音楽にこのような効果を適用して既知のテンポで再生するには、タイミング情報を使用して音楽にテンポ同期フィルター効果を適用したり、音楽を遅延させたりすることができます。

## Spatialization (立体化)##spatialization

立体化 SDK は、ネイティブオーディオプラグイン SDK を基盤として使用するプラグインの例です。立体化 SDK では、オーディオソースごとにインスタンス化するカスタム立体化効果を開発できます。詳細は、[オーディオスペーシャライザー SDK](/engine/6000.0/manual/audio/mixer-native-audio-plugin/spatializer-sdk.md) を参照してください。

## 追加リソース##additional-resources

* [Audio Mixer](/engine/6000.0/manual/audio/mixer.md)

* [ネイティブオーディオプラグイン SDK](/engine/6000.0/manual/audio/mixer-native-audio-plugin.md)

* [オーディオスペーシャライザー SDK](/engine/6000.0/manual/audio/mixer-native-audio-plugin/spatializer-sdk.md)

***
