複数のマイクをつないでキャラごとにリップシンク（その２）

## はじめに

キャラごとにショートカットキーを設定して、キーを押しているときだけ対応したキャラがリップシンクする、という仮組はしてあるけど、操作が辛いし一人がベタ付きはコスト掛かりすぎ。

なので、複数マイクを使ってそれぞれのキャラに一つマイクを割り当てて口パクをさせよう、というお話。



<!--
https://qiita.com/sator_imaging/items/0dd9389aff86aca0218d
-->


- [はじめに](#はじめに)
- [動作結果](#動作結果)
- [準備と確認すべきところ](#準備と確認すべきところ)
- [Windows の録音デバイス](#windows-の録音デバイス)
      - [オーディオ機器選定](#オーディオ機器選定)
- [Unity の AudioSource](#unity-の-audiosource)
   - [アプリのフォーカスが外れたとき](#アプリのフォーカスが外れたとき)
- [マイク再割り当て後の音ズレ](#マイク再割り当て後の音ズレ)
- [MicrophoneSelector](#microphoneselector)
      - [こちらもどうぞ](#こちらもどうぞ)




## 動作結果

まずは動作結果。基本的には想定したとおりに動く。

下手側のキャラは日本語、上手側のキャラは英語のボイスに合わせてリップシンク。


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Unity で複数マイクを使っての OVR LipSync<br><br>オーディオインターフェイスが無いから２体でしか試せない。<br><br>Babyface Pro とか買ったはいいけど持てあましてる人とかいねーかな <a href="https://t.co/7lAa8JZsSE">pic.twitter.com/7lAa8JZsSE</a></p>&mdash; サトー (@sator_imaging) <a href="https://twitter.com/sator_imaging/status/1139325600420659201?ref_src=twsrc%5Etfw">2019年6月14日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


--

自宅にオーディオインターフェイスが無いので、３体以上のキャラで試せてないのがちょっと不安。
２体の時とはまた別の罠がありそうではある。



<!--more-->



## 準備と確認すべきところ

音周りは Windows、Unity 共に、これといった理由の無いおまじない要素が多め。運任せのけせらせら。

基本的に、以下については再起動するたびに確認した方が良い。


## Windows の録音デバイス

Windows のサウンド設定で録音デバイスを表示して、複数のデバイスのレベルメーターがそれぞれ個別に振れている状態にする。

<p><img src="https://dl.dropbox.com/s/0u8r38jgke60o35/%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%9E%E3%82%A4%E3%82%AF%E3%82%92%E3%81%A4%E3%81%AA%E3%81%84%E3%81%A7%E3%82%AD%E3%83%A3%E3%83%A9%E3%81%94%E3%81%A8%E3%81%AB%E3%83%AA%E3%83%83%E3%83%97%E3%82%B7%E3%83%B3%E3%82%AF%EF%BC%88%E3%81%9D%E3%81%AE%EF%BC%92%EF%BC%89.png" /></p>


オーディオインターフェイスのメーターが仮に振れてたとしても、サウンド設定のダイアログでメーターが振れない限りは Unity で音が拾えない。

必ず Windows のレベルメーターを見て確認する。

--

オーディオインターフェイスの仕様的には動くはずなのに、なぜか挿しても動かない、とか普通にあるので、Windows を再起動したりプラグを挿すタイミングを変えてみたりする。

挿してもレベルメーターが表示されない、レベルメーターは表示されても振れない（音が来ない）とかもあるのでちゃんと確認する。
とにかく色々と試す。運要素強め。


サウンド設定をクリアしない限り、Unity では何やってもダメ。


※ 録音デバイスはマシンを再起動するたびに確認する。


#### オーディオ機器選定

MOTU MicroBook II（旧型？）だとここで躓く。インターフェイス側では個別にメーターが振れていても、Windows 側ではミックスされた状態のメーターしか振れていないなら、Unity では個別に音が取れない。

口パクさせるための音声なので、音質にはそこまでこだわらず、ノイズが乗らず複数の入力をミックスされていない状態で拾えるインターフェイスを選ぶ。




## Unity の AudioSource


Windows のサウンド設定で、【既定のデバイス】として設定されているデバイスは、``MicrophoneSelector``（後述）を使わない方が安定する。Unity が自動的に AudioSource に設定するのに任せる。


【既定のデバイス】じゃ無いやつには、``MicrophoneSelector`` コンポーネントを付ける。



### アプリのフォーカスが外れたとき

エディター実行時、最初は動いてるけど Game View から一度でもフォーカスが外れると【既定のデバイス】以外の入力は音が拾えなくなる。


``MicrophoneSelector`` を使っている ``OVR LipSync`` は、フォーカスが戻った時に AudioSource に再度マイクの設定をし直す必要がある。


``MonoBehaviour.OnApplicationFocus(bool)`` あたりで設定すれば、多分オッケー。（まだ試してない）


- [Unity - Scripting API: MonoBehaviour.OnApplicationFocus(bool)](https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationFocus.html)
   <iframe
      class="embed-card embed-webcard"
      scrolling="no"  frameborder="0"
      style="
         display: block;  border: none;
         margin: 10px 0px;
         width: 100%; height: 155px;
         max-width: 500px;
      "
      src="https://hatenablog-parts.com/embed?url=https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationFocus.html">
   </iframe>



## マイク再割り当て後の音ズレ

GameObject のオンオフで AudioSource のマイク割り当て直しを試した感じ、再割り当て後に音がズレまくったのがちょっと不安。

やり方が悪いのか、既定以外のデバイスではそれが限界なのかが分からず。

--

【既定のデバイス】に設定されていて Unity が自動で設定した AudioSource は、フォーカスが外れた後もマイクの再割り当て無しに継続して動作する（してしまう）ので、他のデバイスと動作をそろえる為にも、ステレオミキサーあたりを既定にしておいた方がいいかも。





## MicrophoneSelector

AudioSource に任意の入力デバイスを割り当て。以下より。


- [複数のマイクをつないでキャラごとにリップシンク - Qiita](https://qiita.com/sator_imaging/items/fc87297c4a464c548b02)
   <iframe
      class="embed-card embed-webcard"
      scrolling="no"  frameborder="0"
      style="
         display: block;  border: none;
         margin: 10px 0px;
         width: 100%; height: 155px;
         max-width: 500px;
      "
      src="https://hatenablog-parts.com/embed?url=https://qiita.com/sator_imaging/items/fc87297c4a464c548b02">
   </iframe>



--

#### こちらもどうぞ

- [#VTuber関連まとめ - Qiita](https://qiita.com/sator_imaging/items/5d3b4466a2a1539184d0)
   <iframe
      class="embed-card embed-webcard"
      scrolling="no"  frameborder="0"
      style="
         display: block;  border: none;
         margin: 10px 0px;
         width: 100%; height: 155px;
         max-width: 500px;
      "
      src="https://hatenablog-parts.com/embed?url=https://qiita.com/sator_imaging/items/5d3b4466a2a1539184d0">
   </iframe>