NAMAROIDの音声認識をAmiVoiceでやってみた

## **1. 概要**
近年、アバターを使ったゲーム生実況が盛んとなっており、NAMAROIDはその支援ツールとして普及している。
このNAMAROIDの音声認識エンジンには『Intel® Perceptual Computing SDK』が使用されているが、他の音声認識エンジンは利用することはできなかった。
だが先日、kittyguy様のご厚意で、クリップボード共有を追加していただき、他の音声認識エンジンとの連携ができるようになった。
ここでは、AmiVoiceで音声認識を行いつつ、NAMAROIDを活用する方法を紹介します。

## **2. 音声認識エンジンについて**
私見ですが、メジャーな音声認識エンジンを生実況の視点でまとめます

## **2.1 Intel® Perceptual Computing SDK**
NAMAROIDで使用されている音声認識エンジンです。
音声認識の速度は早く(2.3 に比べて)、フリーで利用できます。
音声認識の速度が早いのは生実況では大きなメリットだと思います。
しかし、音声認識に癖があり、滑舌や音量調整を意識する必要があります。

Intel® Perceptual Computing SDK
https://software.intel.com/en-us/realsense-sdk-windows-eol/notice

## **2.2 Ami Voice**
有償の音声認識ソフトで、文字起こしなどで広く業務利用されているようです。
音声認識精度は高く、処理も高速で、費用が許せばメリットが多くあります。
2.1, 2.3にはないメリットして、辞書登録機能・発声の学習機能などにより細かなカスタマイズができます。

Ami Voice SP2
http://sp.advanced-media.co.jp/

## **2.3 Chromeの Web Speech API**
厳密には音声認識エンジンではなく、ブラウザが提供している音声認識(SpeechRecognition)機能で、フリーで利用ができます。
『ゆかりねっと.exe』はこの音声認識機能を利用しています。
音声認識精度は 2.1 に比べると良好で、発音などに気を使う必要は少ないかと思います。
しかし、処理速度が遅く間が長くなりがちになります。

Web Speech API
https://developer.mozilla.org/ja/docs/Web/API/Web_Speech_API

ゆかりねっと.exe
http://www.okayulu.moe/

## **3. システム構成**
下記の問題を回避するため、Virtual Box(仮想マシン)を利用しました。
仮想マシンではWindowsを動かし、そのマシンへの音声入力にはUSBマイクを使用します(*1, *2)。

### 生実況をする際の Ami Voiceの問題点
Ami Voice はフォーカスしているアプリに文字入力しようとするため、ゲーム実況しようとするとゲームに文字入力をしようとしてしまいます。
文字入力先アプリケーションを指定できればよいのですが、そのような方法はないようです(サポートへの問い合わせで確認)。
フォーカスしているアプリはOSが管理している情報なので、改ざんするのは難しいと思い、仮想OSを導入しました。

*1: ホスト側からゲストに音声を渡す方法があれば良いのですが、やり方がわかりませんでした。
*2: 別の方法として、Discord + Voice Meeter(ソフトウェアMixer)を組み合わせることで、USBマイクをホスト接続のまま利用することも可能です。

![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/12429/c06fa1e9-49bf-bc80-3e25-f17d9e0588fa.png)

## **4. Ami Voiceの設定**

### **4.1 Virtual Box のインストール**
下記サイトよりVirtual Boxをインストールしてください。
https://www.virtualbox.org/wiki/Downloads

### **4.2. OSをインストール**
Virtual BoX にWindows 7 以降のAmi Voiceが動くOSをインストールします

### **4.3 Virtual Box の 『guest additions』をインストール**
OSを起動したら、ウィンドウメニューから
『デバイス』 -> 『Guest Additions CD挿入』
を選択して、Guest Addtionsをインストールしてください。

### **4.4 Virtual Box でクリップボードを共有**
Virtual Boxでクリップボード共有の設定をしてください。
参照　https://pc-karuma.net/virtualbox-clipboard-share/

### **4.6 AmiVoiceを仮想マシンにインストール**
参考 http://sp.advanced-media.co.jp/

### **4.7 USB マイクを接続する**
USBマイクをホストOSからゲストOSに接続します。
Virtual Box で右クリックして、USBを選び、USBデバイスフィルターにUSBマイクを選択する。
USBマイクが認識されたら、AmiVoiceの入力デバイスに指定する。

### **4.8 入力モードを設定**
『直接入力モード』にして、『編集しない』(文字変換しない)にする

### **4.9 クリップボード設定**
オプション -> 転送方法 で クリップボードを設定する
この設定により、書き込みされた文字がクリップボードにコピーされます。

### **4.10 メモ帳に音声認識文字を書き込む**
ゲストOSでメモ帳を開き、マイク音声入力して、文字を書き込んでください。
このとき、ホストOSで書き込んだ文字がペーストできることが確認できれば問題ありません。


## **5 NAMAROID の設定**

**5.1　NAMAROID Early Access 5 クリップボード対応版をDL**
下記ページのコメント欄にクリップボード監視機能追加版のリンクがありますので、DLしてください
http://ch.nicovideo.jp/StackGamesEmpire/blomaga/ar1455406

＊ファイルは NAMAROID.exe のみです。
別途フルバージョンをインストールして、NAMAROID.exeを上書き、またはファイル名を変えて同一ディレクトリに格納してください。

**5.2 クリップボード監視を設定**
デフォルトでは、クリップボード監視はしませんので、設定を開きクリップボード監視を設定します。

**5.3 動作確認**
NAMAROIDの『開始』ボタンをクリックして、実行状態にして読み上げ先を指定して、 4で設定をしたマイクに音声入力してください。
以上で、音声認識をAmiVoiceで行うことができます。

![スクリーンショット 2018-07-09 19.19.49.png](https://qiita-image-store.s3.amazonaws.com/0/12429/0590e9f8-7889-3009-1340-3a3f63cfebd3.png)



## **6 まとめ**
冗長ながらもNAMAROIDの音声認識をAmiVoiceで行う事ができた。
簡単にメリット、デメリットを示します。

### **メリット**
- 一般的でない言葉も認識する
ゲームでよく使われるけど、一般的でないため認識されない単語がある場合も、AmiVoiceに登録するだけで、かなり精度よく認識されました。

- 音声認識精度が向上する
デフォルト状態でも、Google Chromeの音声認識よりも若干精度がよく感じました。
また、話者の音響特性を学習する機能があるため、さらなる精度向上が期待できるかと思います。

### **デメリット**
- マシンパワーを大量消費する
仮想マシンにCPU 2、メモリ 8Gほど割り当てる必要があり、それなりに負荷が高くなります。

- セッティングが面倒
個人的にはメリットに見合うと思いますが、結構面倒です。
もう少し簡単に導入できるアイディアありましたら教えてください！

ご質問などご気軽にお寄せください！！


## 追記: 仮想マシンへの音声入力方法
上記のように、仮想OSを使ってAmiVoiceを利用する場合、仮想OSへ何らかの形で音声を送信する方法が必要です。
上記の方法を含め 3つほど考えつきました、簡単に方法を紹介します。

＊VirtulBoxで、ホストのマイク音声を共有する方法があればよいのですが、わかりませんでした。ご存知のかたは教えてください！


### a. USBマイクを仮想OS側に接続する
素直な解決手段ですが、配信用のシステム構成の問題でホストOS側にUSBマイクを接続したい場合には困ります。

<img width="987" alt="名称未設定.png" src="https://qiita-image-store.s3.amazonaws.com/0/12429/e4fa5e63-b991-2442-7f46-14edf7094406.png">

#### メリット
簡単で、音声品質のロスがない。

#### デメリット
USBマイクをホスト側で利用できない。

#### やり方
上記、参照

### b. ボイスチャットソフト&ソフトミキサーで音声共有する
少し面倒ですが、ソフトの設定のみで、音声を送信できますが、認識精度は落ちる傾向がありました。

<img width="988" alt="名称未設定 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/12429/7627a5ad-e8a1-01e2-101a-9d8895d23da4.png">

#### メリット
USBマイクをゲストOSに接続しなくてもすむ、マイクをライン入力している場合(マイクアンプなど使用している場合)も利用可能。

#### デメリット
音声にディレイが発声する。ボイスチャットソフトが音声圧縮をするため、音質が悪くなり認識精度が落ちる。

#### やり方
- b.1 Discord, Skypeなどで複数アカウントを作成して、ホストからゲストOSに音声を送信する。
- b.2 Voice Meeter(ソフトミキサー)を使い、Dicsordの出力をAmiVoiceの入力にする

### c. ライン入力USB音源を利用する(実際には試していません)
お金がかかりる方法になります。
マイク音声をホスト側のライン出力(スピーカー接続用の端子)し、その声をライン入力USB音源で受け取り、ライン入力USB音源をゲストOS(VirtualBoxに入力する方法があります。

ライン入力USB音源: https://www.amazon.co.jp/dp/B000VDXEV8/?coliid=I1DJV22CERU3T0&colid=37GM5BYD278SJ&psc=0&ref_=lv_ov_lig_dp_it
＊注意: "マイク入力"と"ライン入力"と違うものです、"ライン出力"を"マイク入力"に接続しないでください。最悪故障します。マイク入力USB音源では代替できません。

<img width="1007" alt="名称未設定 3.png" src="https://qiita-image-store.s3.amazonaws.com/0/12429/d6b485dc-19ab-3481-80c6-fef40cf895f8.png">

#### メリット
a. と同様に、音質のロスがなく遅延もない。

#### デメリット
金がかかる。
ホスト側のライン出力をスピーカーなどで利用していれば、更に出力デバイスを買い足す必要がある。

#### やり方
- c.1 ホストOSにVoice Meeterをインストールして、マイク入力をライン出力に切り替える。
- c.2 ライン入力USB音源をゲストOSに接続して、AmiVoiceの入力デバイスに指定する