レッスン 4

目次

オーディオインプットをポストする(Posting Audio Input)

[注釈]

このセクションは「おまけ」なので、技能検定の試験範囲には含まれません。さらに、マイクロフォン入力の実装はやや上級者向けのトピックなので、そのスクリプト自体は、以下の演習の手順で説明しません。

インゲームのメカニズムに基づいて音を再生できるので、例えばPlayer_FootstepsのEventを、Playerの足が地に着いたときに再生できる一方、逆も可能で、インゲームのメカニズムをオーディオ側から操作することも可能で、例えば、あなたのマイクからのインプットシグナルを使ってPlayerがウェポンを振り回すようにも、できます。音を再生する流れと、マイクを公開する流れは、比較的似ています。音を再生するには、ゲームオブジェクトにつながっているEventをポストし、Audio Sourceを再生します。マイクからのインプットを受け取るには、同じようにAudio SourceがあるWwise ObjectにつながっているEventをポストしますが、このときのAudio Sourceは、Wwise Audio Inputとなります。そうするとマイクから直接、Wwise Audio InputのWwise Objectにシグナルを送信することができ、Wwise Meter Effectというプラグインを使って測定できます。

Unityのスクリプトは、単純にEventをポストするよりも高度なデザインですが、ここで前進する助けとして、AkMicrophoneというスクリプトを構築しました。

これから、あるシーンにこのスクリプトを追加し、WwiseでMicrophoneインプットを受領するSound SFXのAudio Objectを作成し、マイクのボリュームレベルを利用し、マイクのインプットが-48 dBを超えたときにプレイヤーアタックを起動させる手順を説明します。

[注釈]

注意: これからは、スピーカーを使うとアウトプットがマイクに入ってしまう可能性があるので、ヘッドフォンの使用を推奨します。

  1. Unityのメニューで、 Audiokinetic > Certification > 301 > Lesson 4 を選択し、 Posting Audio Input を選択します。

  2. Hierarchyで Player ゲームオブジェクトを選択します。

  3. Inspectorで Add Component をクリックし、 AkMicrophone を検索して選択します。

    MicrophoneのAudio Inputを取得するには、まず起動させますが、デジタルオーディオレコーダーで「Record(録音)」を押すのと似ています。最初に、WwiseでSound SFXを作成し、それにWwise Audio Input Audio Sourceを追加します。

  4. Wwiseで Project Explorer > Actor-Mixer Hierarchy を選択し、Default Work Unit を右クリックしてNewを選択し、 Sound SFX を選択します。

  5. 名前を Microphone にします。

    まだMicrophoneにAudio Sourceが追加されていないので、赤字で表示されます。ここで、Wwise Audio Inputを使い、あなたのシステムのオーディオインプットを、Audio Sourceとして追加します。

  6. Contents Editorで Add Source >> をクリックし、 Wwise Audio Input を選択します。

    もしマイクのボリュームが小さすぎれば、ここでWwise Audio Inputのボリューム設定ができます。

    Transport Controlで再生を押すとMicrophoneが起動するようになり、聞こえてきます。ただしマイクのインプットでPlayer Attacksをトリガーできれば充分で、インプット自体を聞きたくないので、アウトプットをミュートしてください。これをActor-Mixer Hierarchyレベルで行うとインプットボリュームレベルが測定できなくなるので、それは避けるようにします。代わりに Microphone のSound SFXを、Audio Busにアサインし、Bus Volumeを下げればいいのです。

  7. Project ExplorerのMaster-Mixer Hierarchyで Master Audio Bus > Non-World Audio Bus を右クリックし、 New Child を選択し、 Audio Bus を選択します。

  8. 名前を Microphone にします。

  9. Audio Bus Property EditorのGeneralタブで、 Bus Volume-200 に設定します。

    Audio Busの準備はできましたが、まだこれにMicrophoneをアサインできていません。

  10. Microphone のSound SFXを選択し、Sound Property EditorのGeneralタブで、 Output Bus グループボックスでブラウズ (...) をクリックします。

  11. Microphone のAudio Busを選択します。

    これでMicrophone Sound SFXのアウトプットをMicrophone Audio Busに送信できますが、Microphone Audio Busを全く聞こえない設定にしたので、ゲーム中にも聞こえません。次に、RTPCをInput Volumeに接続します。これにWwise Meterを使えば、測定ボリュームとRTPCを接続することができます。既定のWwise Meter Effect ShareSetを追加し、それにRTPCを追加してください。

  12. Effectsタブで、 ID 0セレクタ をクリックしてから、Wwise Meter > Meters を選択し、 MicrophoneMeter というEffect ShareSetを選択します。

  13. Edit (...) をクリックし、Wwise Meter Effect Editorを開きます。

    AkMicrophoneスクリプトの中に、Microphone Level RTPCのProperty Drawerがあります。このRTPCは、AkMicrophoneスクリプトの起動中に監視されますが、RTPC値がOutput Game ParameterのMin property value(Wwise Meterのデフォルト値の-48)を超えると、OnMicrophoneAction() UnityEvent(s) をコールします。

    [注釈]

    UnityEventプロパティは、スクリプトからコールせずに、直接Inspectorからファンクションをコールしたり変数を設定したりできるものです。UnityEventsついて詳しく知りたければ、 https://docs.unity3d.com/Manual/UnityEvents.html を参照してください。

    Wwise MeterをRTPCに接続し、AkMicrophoneスクリプトでそれを選択してください。

  14. Output Game Parameterのグループボックスの セレクタ をクリックし、Genericを選択し、 MicrophoneLevel のRTPCを選択します。.

    [ヒント]

    これはWwise Adventure Game用に用意したプロパティなので、自分のゲームにこのスクリプトを実装する場合は、新しいGame Parameterを作成してください。

    次にAkMicrophoneスクリプトに対し、MicrophoneのGame Parameterを認識するように指示します。これはいつものGame Parameterの使い方の逆とも言えますが、Game Syncの対象は必ずしもUnityからWwiseへの一方通行のやり取りだけではなく、両アプリケーションの双方向の接続も可能です。

  15. UnityのInspectorでAkMicrophoneスクリプトを選択し、 Microphone Level RTPC を選択します。

    [注釈]

    もしEnable_MicrophoneのEventが表示されなければ、UnityのWwise Settingsを確認し、Wwise Adventure GameのもともとのWwise Projectが設定されていないかを確認してください。もしそうであれば、 Edit > Wwise Settings を選択し、Wwise Project Pathを変えてください。

  16. GenericのWork Unitを展開し、 MicrophoneLevel というGame Parameterを選択し、 OK をクリックします。

    これでGame Parameterに接続できましたが、まだEventが選択されていません。Audio Inputを受領するには、Eventから、Wwise Audio InputのAudio Sourceをコールする必要があります。それを作成してください。

  17. WwiseのProject Explorerで、 Microphone というSound SFXを右クリックし、 New Event を選択し、 Play を選択します。

    Eventの内容が分かるような名前にします。

  18. Event Editorで、Microphone Eventの名前を Enable Microphone に変更します。

    SoundBankの参照先がProject ExplorerのEventタブにあるWork Unitなので、このEventは自動的にGeneralのSoundBankに追加されます。あとは、これをUnityに入れるために、Wwise Projectを保存し、SoundBankを生成(generate)するだけです。

  19. Wwiseメニューで Project を選択し、 Save を選択します。

  20. SoundBankレイアウトを選択してSoundBank Managerをアクセスし、 Generate All をクリックします。

  21. UnityのInspectorでAkMicrophoneスクリプトを選択し、 Microphone というEvent Property を選択します。

  22. Events > Default Work Unit を選択し、 Enable_Microphone のEvent を選択します。

    Microphone Audio Inputの設定は、以上です。次にこれを機能性やメカニズムに接続しますが、今回はプレイヤーのアタックにつなげます。Adventurerがアタックするときに、ウェポンが、3段階の連続するシーケンスによって振り下ろされます。ウェポンのTriggerが、ほかのTriggerと衝突するときに、Player_WeaponImpactのEventがポストされます。つまり、Adventurerが振りかざすのを起動すればいいだけで、これはPlayerAttackスクリプトの中でコールします。

  23. AkMicrophone コンポーネントで、プラス (+) 記号をクリックしてリストに項目を追加します。

  24. PlayerAttack コンポーネントを Object プロパティまでドラッグします。

    これで、このスクリプトにあるすべての public 設定のファンクションを選択できるようになりましたが、今回はSwing()ファンクションを使います。

  25. No Function というproperty drawerで、 PlayerAttack を選択し、 Swing() を選択します。

    以上です。それではゲームに入り、試してみてください。

  26. Playモードに入り 、クレート(木箱)に駆け寄り、料てを叩くことでウェポンを振りアタックします。

[ヒント]

もしオーディオインプットの欠如があれば、AkMicrophoneのSample RateまたはInitial Read Delayを、Samplesプロパティで変更してみてください。

これで、Microphoneのピークが-48 dBを超えたときに、プレイヤーがアタックするように設定できました。積極的に試してみて、OnMicrophoneAction()リストにほかのファンクションも追加してみてください。このAkMicrophoneスクリプトは、Wwiseを使うUnityプロジェクトであればどこでも再利用できるようにあえて設計してあるので、今後のあなたのプロジェクトに、自由に利用してください。