仮想と物理とエトセトラ

xRや物理とかごった煮の備忘録的技術ブログ

MRTK(2.7.2)のExampleを試す その1 Demos-Audio

今回は、MRTK ver.2.7.2のExampleを見て、これまであまり使用してこなかったMRTKの機能を確認します。
第一回はDemos-Audioを使用します。

前提

今回の前提は以下です。
Unity 2019.4.17f1
MRTK 2.7.2

準備

まずは、Package ManagerのMixed Realiy Toolkit Examplesでインポートしたいサンプルを選択します。
Demos - AudioImport into Projectを選択しインポートします。
※ 私の場合一度インポートしているので表示はInport againになっています。
f:id:napo909:20211123135238p:plain f:id:napo909:20211123135024p:plain

ProjectウィンドウからAsset/Samples/Mixed Reality Toolkit Examples/2.7.2/Demos - Audio/ Scenesを開くとサンプルシーンを確認できます。
一つずつ確認していきます。

f:id:napo909:20211123135353p:plain

Audio Lo-Fi Effect Examples

このサンプルは、AudioLoFiEffect.csでLo-Fi効果をAudio出力に反映させるサンプルです。

ja.wikipedia.org

赤い球体から音声が出力されており、球体をタップするたびにLo-Fi効果の種類が変化します。
AudioSourceから出力される音声に対して周波数制限を行って、聞こえる音を変更することができます。
このサンプルで使用される主なMRTKコンポーネントMixedRealitySeneContent -> SoundEmitterにアタッチされているAudioLoFiEffect.csです。

f:id:napo909:20211123150230p:plain

f:id:napo909:20211123150329p:plain

AudioLoFiEffect.cs

github.com

AudioLoFiEffect.csではAudioSourceから出力される音声を、ラジオのように音声の周波数範囲を制限することができます。 Inspector上から、周波数範囲制限としてAudioLoFiSourceQualityで定義される下記の5種類を設定できます。

  • NarrowBandTelephony : 300 Hz - 3.4 kHz
  • WideBandTelephony : 50 Hz - 7 kHz
  • AmRadio : 40 Hz - 5 kHz
  • FmRadio : 30 Hz - 15 kHz
  • FullRange : 10 Hz - 22 kHz

依存コンポーネントとしてAudioSource, AudioLowPassFilter, AudioHighPassFilterがアタッチされますが、MRTKで提供されているAudioInfluencerController.csも同時にアタッチすることが推奨されています。

AudioInfluencerController.cs

github.com

AudioSourceの出力に対してMicrosoft.MixedReality.Toolkit.Audio.IAudioInfluencerのアタッチされたコンポーネントを用いて影響を与え、コントロールするためのコンポーネントです。
Inspector上から制御できる要素は下記のとおりです。

  • UpdateInterval : AudioSourceに対して操作をする間隔(デフォルト値 : 0.25 s)
  • MaxDistance : ユーザとIAudioInfluencerを検索するための最大距離 (デフォルト値 : 20 m)
  • maxObjects : 対象とするIAudioInfluencerの最大値 (デフォルト値 : 10個)
  • audioSource : 操作対象となるAudioSourceをアタッチする

AudioOcclusionExamples

このサンプルでは青色の球体から音声が出力されており、青いパネル(左)の前で聞くといつものように、後ろで聞くと若干くぐもった壁にさえぎられているように聞こえます。
このサンプルで使用される主なMRTKコンポーネントは青いパネルであるMixedRealitySeneContent -> SoundOccluderにアタッチされているAudioOccluder.csです。

f:id:napo909:20211123150104p:plain
f:id:napo909:20211123150414p:plain

AudioOccluder.cs

github.com

このスクリプトでは音声に対して、カットする周波数と通す音量の割合を設定して、遮られているかのような効果を音声に与えることができます。
IAudioInfluencerが継承されており、先ほどのAudioInfluencerControllerを用いて音声に効果を与えることができます。
Inspector上から制御できる要素は下記のとおりです。

  • CutoffFrequency : 10 Hz - 22 kHzの間でカットする周波数を設定する。設定値より高音をカットする。(デフォルト値 : 5kHz)
  • VolumePassThrough : 透過する音量を0 ~ 100%の間で設定する。(デフォルト値 : 100%)

TextToSpeechExamples

このサンプルは、先日翻訳機で使用したTextToSpeechを用いたサンプルです。
赤い球体をそれぞれクリックすることで、違う種類の音声ソースでの合成音声を試すことができます。
設定した文字列を合成音声で音声出力させることができます。

f:id:napo909:20211123152017p:plain

TextToSpeech.cs

github.com

このスクリプトでは、TextToSpeech::StartSpeaking(string)メソッドを使用することで、任意の文章(英文)を合成音声にしゃべらせることができます。
Inspector上から制御できる要素は下記のとおりです。

  • AudioSource : 音声出力に使用するAudioSourceを設定します。
  • Voice : TextToSpeechVoiceで定義された4つの合成音声(Default(system voice), David, Mark, Zira)から音源を指定できます。

WindowsMicrophoneStreamDemo

このサンプルでは、マイクの入力の大きさによって、Spatial Awarenessのメッシュの明るさが変化します。

f:id:napo909:20211123153903p:plain

このサンプルでは、特定のMRTKコンポーネントを使用しておらず、MicrophoneAmplitudeDemo.cs中でWindowsMicrophoneStreamからのマイク入力結果を使用して判定しています。

github.com

WindowsMicrophoneStream::Initialize()で初期化し、WindowsMicrophoneStream::StartStream()で録音を開始します。
WindowsMicrophoneStream::ReadAudioFrame()でそのフレームにおける音声情報を取得できます。

MRTKのコンポーネントにフォーカスしたDemos-Audioとしては以上です。
次回は、Demos - Boundaryを取り扱います。