Unity5でオーディオヴィジュアライザーを作りました。

結月ゆかり、弦巻マキ、ゆっくり霊夢のゲームを作る過程で、オーディオ・スペクトラムの取得方法など調べているうちに、一度オーディオ・ヴィジュアライザーを作ったほうが理解しやすいのでUnity5で作成しました。

画像の青いスペクトラムのソースコードが以下になります。

まず、プリミティブのキューブを2048個並べます。手動で並べるのは面倒なので、for文とInstantiateで生成します。キューブは、CreatePrimitiveで作成しても構いません。キューブは当然Transformコンポーネントを持っているので、localScaleプロパティーで、サイズを変更できます。

CreatePrimiviteでキューブを作成する場合は、GameObject.CreatePrimitiveです。

 

スペクトラムを取得するには、GetSpectrumDataを使います。Unity5.3場合は、第一引数にあらかじめ、領域確保した配列を渡して呼び出せば、結果としてそこにデータが返ってきます。以前のAPIでは戻り値でデータを取得しましたが今は非推奨です。このサンプルでは、配列のサイズは2048にしていますが、2のN乗の値であれば問題ないようです。

あとは、gameobject.transform.localScaleのY軸にこのスペクトラムデータと倍率を渡して、キューブのY座標が大きく増減するようにしています。これでオーディオヴィジュアライザーの完成です。

キューブを円状に並べる場合は、Mathf.Cos、Mathf.Sinで単位円(半径1の円)のXY座標が求められるので、radiusで大きくしてあげればよいです。これはUnityに限らず三角関数のお約束みたいなコードです。

 

このプロジェクトの配布

http://hajimete-program.com/games/VisualGround2.zip

音声ファイルは、二次配布になるため削除しています。http://www.d-elf.com/ さんに良い曲がいっぱいあります。

UnityでMaterialの色を曲に合わせて変えたい

こちらのデモは曲中に、シェーダーを操作して色を変えています。シェーダーを使わない場合でもMaterialの色を曲に合わせて変更する際の参考になりそうなのでブックマークしておきます。それにしてもシェーダーまで触れるようになると詳細な表現ができそうですね。

ソースコード

https://github.com/hecomi/CyalumeLive/blob/master/Assets/CyalumeLive/Scripts/CyalumeAudioBridge.cs

Unity5でオーディオヴィジュアライザー作るための情報

Unityでは、GetSpectrumDataなどのが用意されているので、音量やスペクトラムデータを簡単に取得できます。Youtubeに短いチュートリアルがあるのでこれでオーディオ回りのキーワードがわかります。