知る人ぞ知るUnity 5のネイティブオーディオプラグインについて

  • 72
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

みなさん、Unity 5から使えるようになったネイティブオーディオプラグインのこと、知ってますか?
え?「DllImportで呼ぶやつだろ」って?はい、それはただのネイティブプラグインですね。

Unity 5ではオーディオ機能が改良され、Audio Mixerなどの仕組みが追加されると同時にネイティブオーディオプラグインが使えるようになりました。

今までと何が変わったの?

Unity 5以前では音声データを加工するためにはMonoBehaviourのOnAudioFilterReadを使って、スクリプトで処理するしかありませんでした。

ネイティブオーディオプラグインでは処理部分をC/C++などのネイティブコードで記述できるため、高速に音声データの生成・加工を行うことができます。
(エディターからプラグインを操作するためのGUIはC#で記述する)

サンプル

ネイティブオーディオプラグインのサンプルが以下のURLで公開されています。

https://bitbucket.org/Unity-Technologies/nativeaudioplugins

サンプルと言っても実際のプロジェクトでもそのまま使えるような機能を持ったプラグインが25個も含まれており、「サンプルとはいったい?うごごご…」と宇宙の法則が乱れること請け合いなので、どのようなプラグインが含まれているか順に説明していきたいと思います(というかサンプルの紹介がこの記事の主題だったりする)。

ビジュアライズ系

エディターでの再生時に、Audio Mixerのインスペクターで何らかの可視化を行えるようにするプラグインです。

名前 説明
CorrelationMeter ステレオメーター。ステレオ信号の位相関係を確認することができます。
LoudnessMeter ラウドネスレベル(音の大きさ)が確認できます。
Oscilloscope リアルタイムに波形が確認できます。

プロシージャル系

様々なアルゴリズムを元にパラメータに応じて波形を生成します。

名前 説明
ImpactGenerator スクリプト側からの指示を受けて衝撃音のような波形を生成します。
ImpulseGenerator 揺らぎを持ったインパルスを生成します。
NoiseBox ノイズを生成します。

エフェクト系

様々なアルゴリズムを元にパラメータに応じて波形を加工します。

名前 説明
ConvolutionReverb 畳み込み演算を利用したリバーブです。
Equalizer よくあるイコライザー。3バンド対応。
Granulator グラニュラーシンセシスを行います。それ以上説明のしようがない。
LevelMixer 音声チャンネルごとにレベルを調整します。
Lofinator サンプルレートと量子化ビット数を下げてLo-Fi(Hi-Fiの逆)な音を作り出すエフェクトのようですが…デモでは使用されていないような?
ModalFilter 金属音を作り出すのに使えるエフェクトです。
Multiband マルチバンドのコンプレッサーです。これも3バンド。
RingModulator リングモジュレーターです。正弦波オシレータ内蔵。
Spatializer 立体的な音場を作り出すためのエフェクトです。
StereoWidener 音声のステレオ効果を強めます。
TubeResonator 共鳴管?のシミュレーションを行います。
Vocoder ボコーダーです。Daft Punkが使ってるアレ。
WahWah 俗に言うワウ・エフェクトです。ジミ・ヘンドリックスがよく使ってました。

「俺はUnityのサンプルの話を聞いていたと思ったらいつのまにかDAWの話になっていた」って?僕もそう思います。

シンセサイザー系

プロシージャル系に近いですが、より楽器的な音声を生成します。

名前 説明
Synthesizer ちょっとしたソフトウェア・シンセ。なんとMIDI入力にも対応!何に使うんだよ!
TeeBee3o3 アシッドハウスを生んだあの名機を再現した?シンセサイザーです。
TeeDee9o9 デトロイトテクノでおなじみのあの名ドラムマシンを再現した?シンセサイザーです。名前がちょっと違うけど。

ここらへんから「お前絶対趣味で作ってるだろ!」という気がしてきます。

その他

名前 説明
PitchDetector 高速フーリエ変換によって再生中の音声の音程を分析します。
Routing スクリプトから音声データを取り出せるようにルーティングするためのプラグインです。
Teleport 共有メモリーを利用して、プロセス間で音声データの転送を行います。

もう完全にゲームと関係ないよね…。

デモ

サンプルに含まれるデモシーン(Assets/demos.unity)を再生することで実際のプラグインの動作を体験できます。プロシージャル系のプラグインを組み合わせて環境音を再現するデモなど一聴の価値あり。

より詳しく

ネイティブオーディオプラグインの詳しい解説がUnityのマニュアルにあります。

http://docs.unity3d.com/ja/current/Manual/AudioMixerNativeAudioPlugin.html

また、こちらはUnity 5のオーディオシステムを開発したJan MargucがUnite 2015 Tokyoで講演をした際の資料です。

http://japan.unity3d.com/unite/unite2015/files/DAY1_1900_room1_Jan.pdf

最後に

さて、ネイティブオーディオプラグインによって今までのUnityにおける音声処理の限界を軽く突破できることがお分かりいただけたと思います。プレイヤーによりよい体験を提供するには、聴覚への刺激も効果的かもしれませんね。

以上、Unity 2 Advent Calendar 2015の12日目として書かせていただきました。
それでは24日にまたお会いしましょう!

この投稿は Unity 2 Advent Calendar 201512日目の記事です。