この記事はOculus Rift Advent Calendar 2016の9日目の記事になります。
はじめに
Advent Calendar自体初参加の完全な初心者ですが、VR元年といわれている2016年に何かしらの足跡を残すために参加してみました。
さて、VRとかARとかものすごく可能性は感じるのですが、個人的には絶望的に酔いやすいVR not readyな体質なので、めまぐるしく画面が(視点が)変わるようなゲームは苦手なところがあります。 (車にのっているだけでもすぐ酔います)
そのような体質でも楽しめるVRらしいものはないかと色々と考えてみました。 そこでサウンドに注目して、いくつかアイディアをだして簡単なサンプルを作ってみました。
すべてプロトタイプとして作ってみたものなので、見た目を凝ったりはしていませんが、その分シンプルなものが多いので入門者の方でもとっつきやすいのではないかと思います。またOculusで動作確認していますが、特別なことはしていないので他の環境でも動作するのではないかと思います。
それではご紹介します。(ソースについては末尾にリンク先を記載)
空間イコライザー
まず最初に思いついたのがこちら。
イコライザーをVR化したら面白いかも!と思い、
「空間イコライザー(Spacial Equalizer)」と名づけました。
概要
向いている方向に応じて聞いている音楽の聞こえる周波数が変わる
BGM自体は昔適当に作ったものなのであまり気にしないでください。
実装方法
サンプルでは8つの周波数帯に分割しています- 8つのGameObjectを作りそれぞれにAudioSourceとLow Pass Filter(LPF),High Pass Filter(HPF)を追加します。
- LPFとHPFを組み合わせるとバンドパスフィルタとして機能するので、各オブジェクトに好みの値を設定します。
- GameObjectにカメラからのレイが衝突したら、他のGameObjectのサウンドのvolumeを0にしてヒットしているGameObjectのvolumeを上げます。
ググっても近しいものは見当たらなかったので、本当はこれをもっと深堀して、このAdvent Calendarはめでたしめでたしで終わる予定だったのですが、最低限必要な機能はUnityがすごすぎてすぐできてしまったのと、ほかにいくつか作りたいものを思いついたので機能としては最低限にとどめました。聞こえている音のレベルメーターのアニメーションをつけるとよりそれっぽくなると思います。
SoundModuleVR
概要
VR内でモジュール化したフィルターを簡単にアタッチできる上の空間イコライザーでもフィルター機能を利用しましたが、他にもエコーやディストーション(歪み)の機能があるのでこれらを利用すると音声に様々な効果を与えることができます。エディター上でコンポーネントをアタッチすればよいのですが、その機能をVR空間内に見える化して動的にオン・オフできるようにしてみました。
※音量の調節を失敗して大きな音が流れるのでご注意ください。実装方法
- 予めAudioSourceと好きなフィルターを追加したGameObjectを用意します。
- 音源となるGameObjectを用意します。
- フィルターの追加されているオブジェクトにカメラからのレイがヒットしたら、そのGameObjectのフィルターコンポーネントを音源のGameObjectにコピーします。
- 視線がはずれたら音源からフィルターコンポーネントを削除します。
例えば、VR内でボイスチャットなどのアプリがあった場合、自由に音声を変えたりする機能として使えるのではないかと思います。
また、スクリプトで音声の生データが簡単に取得できるので、Unityに用意されているフィルター以外にも、ごりごりと実装をすれば音声に様々な効果をかけることもできるのではないかと思います。
凹みTips:Unity のオーディオの再生・エフェクト・解析周りについてまとめてみた
視線シンセ
完全にネーミング先行です。これはありがちなアイディアだと思いますが、単に作りたいので作りました。
概要
見る位置によって動的に生成する音(サイン波)の周波数を変える実装方法
- カメラからのレイが衝突したオブジェクトのpositionを取得します。
- positionに応じて周波数を変えます
スケール(音階)が選べる機能をつけたり、Y軸方向の視線移動にも何かしらのパラメータを割り当てれば、KORGのkaossilatorのようなものが作れそうです。そうなると録音機能もほしくなりますね。
せっかくのVRなのでTouchの利用などで奥行情報も利用すると、テルミンみたいなものも作れそうです。ボタンアサインも利用すればテルミン以上の何かが作れそうで可能性が広がります。
空間ボイスメモ
概要
マイクからの入力をVR空間内の任意の位置に貼り付けます、その物体を見ると音声を再生します実装方法
サンプルでは5個までのボイスメモを保持するようにしています- マイク入力するための準備をします。
- 録音した音を保持するためにAudioSourceコンポーネントを持ったGameObjectあらかじめ用意しておきます。
- マウスをクリックしている間、用意したGameObjectのAudioClipに録音を行います。
- マウスを離すとAudioClipの録音を終了します。
- 録音されたAudioClipを持つGameObjectに視線が衝突したら再生します。
ToDoメモみたいな使い方でタスクが増えてくると嫌になりそうなので、 好きなアーティストの音楽とか、声優さんとかのボイスを張り付けたりするほうが幸せになれるかもしれません。
強火で進め:[Unity][Unity3d]マイクから録音する方法が書かれたブログ記事
ボイスの保存機能はつけていませんが、以下を参照すればできそうです。
https://gist.github.com/darktable/2317063
おわりに
以上になりますが、いかがだったでしょうか。
(ベテランにはない新鮮さを感じていただければ幸いです)
上記以外にもまだまだ考えれば面白いものはたくさんあると思います。
例えば
- キー入力やジェスチャーでピッチ(曲のスピード)を変えたり
- サウンドを視覚化して空間内でつなぎ合わせたり(DTM的な感じ)
- 康一くんのエコーズのように言葉を実体化してみたり(それで攻撃するゲーム作ったり)
- まじめに3D化したスペクトログラムを鑑賞してみたり
Oculus Touchも発売され、HoloLensの発売も近いので、これからさらに盛り上がっていくとよいですね!
ソースについては以下で公開していますのでよろしければご覧ください。
https://github.com/HiromuKato/SoundVR
それでは、明日はyworks2000さんの 「顔が痛くならない(はずの)交換用フォームパッドについて書きます(物が来れば)」です。