記事一覧へ戻る

STT/RTTで各国の人とボイスチャットをしよう

by AxCx


Posted on 2019年02月21日 21時58分52秒


大前提

  • 特に配信とかは考えないし、MMOやFPSやVRChat、Discordなどでのボイスチャットで海外の人とただ話せればよい人向け。
  • 複数のソフトウェアを組み合わせる必要があるから、自分の声を翻訳するのは簡単だが、相手の声を翻訳するのは少し難しい。自分ができないから言いますが、ちゃんとフローチャートみたいなのを理解できないと、もうパーンってなりましてね頭が。
  • ひとつのChrome.exeで別々のSTT/RTT、または言い換えると、複数の音声入出力デバイスを切り替えて扱うことはできないから、実際に「ボイスチャットでコミュニケーションする」ためには、すぐ下に書いたChromePortableが必須。
  • Mixer(と、MSJP)のアカウントがないとどうやら音声の認識はされても翻訳はされないようだ。


必須ソフトウェア

  • VB-Cable
  • Voicemeeter Banana
  • Windows10 たぶんx64 たぶん2018年より古いと動かない。右下のスピーカーアイコンのところ

ここに、

このような設定があれば大丈夫です。


あると便利なもの

  • Chromeポータブルパック内の、Hermes.exe(ただし、このHermesそのものは使いません。便利なランチャーとして使います。)
  • ChromePortable x64 最新版
この新しいChromeを、Hermesを展開してできたbrowser\chrome1, 同じくchrome2にまるっと上書きしてやると、いろいろトラブルフリーかもしれません。
少なくとも、Hermesに付属のChromeはだいぶバージョンが古いため、予期せぬ問題が起こるかもしれないし、STT・RTTはおそらく今後も改良があるでしょう。その場合、対応ブラウザは最新版Chromeとなるはずです。

特にいらなかったし問題もなかったぜ。上のように感じた理由はいろいろあるけど無駄話なので割愛。
  • Windowsの追加言語パック:もしも興味があるならば。追加音声DLCみたいで楽しくなります。


動作チェック

STTは、簡単に使えるんじゃないかと思います。試しに、このように設定してみましょう。

右上のChromeのカメラアイコンから設定できる、使用する音声デバイス(つまりマイクなどの種類)、そして隠れていますが出力する言語などはご自分の設定に合わせてください。
ただし、このままでは単純に自分の声を自分のマイクに入力し、翻訳された機械音声を自分のスピーカーから出力しているだけです。次のステップへ進みましょう。


翻訳された音声をゲーム・アプリへ入力(ルーティング)する

ここで、さきほどインストールした、VB-Cableの出番となるのですが…実際には、何も設定はいりません。自分も最初、どこでどうやって設定するのか勘違いしていましたが、文字通り設定は「ない」単純な仮想デバイスです。

 
これを、最初に確認した、サウンドの設定→アプリの音量とデバイスの設定、で、STTを開いているChromeのプロセスに対して、このように指定してやります。


それを、例えばの話ですが、一番チェックが簡単なDiscordの音声・ビデオ設定を開き、入力デバイスをこのようにします。

上のDiscordの画像は、出力デバイスがよくわからないと思いますが、とりあえず確認用に、何でもいいから確実に音が出るものを指定してみてください。肝心なのは入力デバイスがCable Inputであることです。
その後、STTの「Talk」を有効化して、なおかつ翻訳結果がずらずらと表示されることを確認しつつ、Discordのマイクテストをしてみると、あなたの声のかわりに翻訳された機械音声が流れているはずです。


STT小まとめ

STTで翻訳した音声をゲームやアプリへ流し込む場合、VB-Cableをインストールし、Chrome(ポータブルが望ましい)でSTTを開いて、サウンド設定→アプリごとの音量とデバイス設定で、出力を"Cable Input"とする。
その後、アプリ側のボイスチャット入力だとか、マイク入力などの設定の部分を、"Cable Output"とする。
もちろん、日本人同士でしゃべるときは、ゲームやアプリのマイク入力デバイス設定を元に戻すこと。面倒でしょうが、仕方が無いことです。


RTTで相手の言葉を聞き取る(設定が最も大変な部分)

さて、ほとんど本丸あるいは真田丸と言ってもいいくらい大変です。やり方はいろいろあるかと思うのですが、結局のところ、仮想デバイス(またか!)のVoicemeeter Bananaをインストールしてしまうのがいろいろな意味でベストかと思います。その利点と欠点ですが、
  • サウンドのコントロールパネル的なやつを開いて「このデバイスを聞く」などなどをする必要は、一応ない(こだわるなら必要)。
  • 慣れればまあまあ見やすい(サウンドのコンパネに比べて)。Bananaのコントロールパネルをポチポチするだけで、Bananaが追加する仮想デバイスへのルーティングが簡単に可能。
  • ゲイン…もといボリュームを入力毎に上げられる。STT/RTTは、入力ゲインがバカみたいに高ければ高いほど、認識精度が上がり、結果翻訳の精度も上がる、という仕様だそうです(これはGoogleのニューラルネットワークのそれによるものであろう)。話が前後しますが、Bananaはゲインを二重(?)に上げられるため、RTTへの効果は抜群です。
ただし欠点もあることを覚えておきましょう。
  • Banana自体がやや不安定なソフトウェアであり、Realtekやその他サウンドデバイスのドライバを頻繁に更新する人は、かなり余計なトラブルを抱え込みがちになる。
  • サラウンドへの対応が怪しい。Realtekと、アナログマルチ出力5.1chでさえ、一般的なWDMの出力は使えず(2chにダウンミックスされる)、MMEとかいう謎な、遅延大きめのAPIで出力しなければならない。サラウンドヘッドセットなんかは、言わずもがなで、MMEでないとたぶん動きませんよ。ガチFPSの人は要注意。
  • Bananaコントロールパネルアプリを何らかの形で常駐させてやらないと、仮想デバイスは当然動作しない。サービス化できないかとも考えたが、コンパネアプリをいじってエンジン再起動などをかけるので、非表示にすると詰みが発生しそう。なので、画面が小さい or 狭い人は、邪魔になるかもしれない。
  • そもそもコンパネアプリの意味不明感がすさまじい(ノリではわからない)。


というわけでテスト。YouTubeの音声を聞かせてみよう

まず、このように(これはテスト用の設定ですから、終わった後でまたご自分の自由に元へ戻していただいて構いません)アプリの既定の出力先をVoicemeeter Inputとします。できる人は、Firefoxや別のプロセスで立ち上げたChromeの出力先をこのように変えてもいいかもしれません。

そして、適当に何か音の出るものを再生すると、Bananaのコントロールパネルの"VAIO"のピークメーターが動いているのがわかるでしょう。

さて、後でする話を今してしまいますが、上の画像ではVAIOのA1、B2が点灯しています。この状態はつまり、デフォルトの出力先であるVAIOから、画像右端のAux Output(これが「B2」です。よく見ると書いてありますね)にそのまま流し込んでいます。両方とも、フェーダーゲイン(要するに音量をガン上げしています)が真っ赤なので、人間の耳にとってはボリュームがひどいことになっています。また、A1はAVアンプなのですが、これはボリュームを手元というかすぐそばでいじれるし、ヘッドセットで聞くより爆音被害が少ないため、こちらでモニターしています。この状況で、RTTの設定は、以下のようになっています…(これは僕のスクショ撮影ミスですが、当然ながらRTTのChromeのカメラアイコンを押して出てくるマイク入力はVoicemeeter Aux Outputになっているものとします。)


この状況で、例えばFirefoxだとか、別プロセスのChromeでYouTubeの英語の動画を再生すると、翻訳はできていると思います。
つまり、音声の流れは、このようになっています:
任意のアプリ → Voicemeeter Input (Voicemeeterのパネルでいうと、VAIO。) → Voicemeeterで設定した「B2」、すなわち、Aux Out → RTT →(ここからようやく日本語)→ あなたのスピーカー。
テストがうまくいったら、最初に述べた通り、既定の音声デバイスの設定を元に戻すのを忘れないように。と言っても、次のセクションでテストのためにまた変えるんですけどね。


RTTの実際のアプリ上での動作チェック。再びDiscordを使用する例

既定の音声出力デバイス(またはできる人ならばYouTubeのプロセスのもの)を、あくまで一時的にCable Inputとし、Discordの音声デバイス設定は、これもまた一時的にテストとして、こんな感じにしてみましょう。


このとき、Bananaの設定がこのようになっていれば、Discordの音声チェックをすると日本語訳された機械音声が発話されるはずです。


…正直言ってこの自前テスト用ルーティングに関しては自信がありません。バカなので。たぶん、通話するほど仲の良い友達なら、こういうすごいのがあるんだけど…と言えば、快くあなたの環境のテストに付き合ってくれるのではないでしょうか…。そういう優しさの世界であることを期待しています。

総まとめ

STTの入力には、Voicemeeterを経由しない物理デバイスのマイクを接続し、出力に、Cable Inputを設定します。
ここでは例としてDiscordを挙げますが、それのマイク入力デバイスとしてCable Outputを設定します。どのゲームでも、ボイスチャット用マイク設定があれば、それにCable Outputを用います。

ここまでの流れ:あなたの口→ マイク → STT → (ここから英語)Virtual Cable Input / Output → (データ化された英語音声) → 外人さんの耳。

さて、逆側のRTTです。今度は、Discordの出力をVoicemeeter Aux Inputとします。またも同じように、ゲームにボイスチャット用スピーカー/ヘッドセット出力設定があれば、同じようにします。
そして、アプリの入出力設定で、RTTの入力をVoicemeeter Aux Output、出力を(ボイスチャットが聞きやすい)物理デバイスとします。
こちらの流れをテキスト化すると、このようになるかと思います:外人さんのマイク → Voicemeeter Aux Input → RTT → (ここから日本語)→物理的なスピーカーやヘッドセットから日本語の機械音声が出る。

画像を張り付けるとうちではこんな風になっています。





 

簡易トラブルシューティング

  • 音声認識はされるのに、翻訳がされない。
最初にも書きましたが、MSJPのサーバを経由する都合上、どうやらMixerか、あるいは最低限MSJPのアカウントがないと翻訳がされないようです。調査中。
  • 翻訳はされてるが、音声が出ない。
Chromeの入力デバイスを切り替えたら、ページのリロードが必要です。また、言語の認識元・変換先(音声の話者…すなわち、英語とフランス語など)を行き来した場合にも、いろいろリロードしたり、再選択したり、場合によってはクッキーを消したりするとうまく動きました(おそらくChromeの側が腐っている)。なので、専用ブラウザとして、PortableChromeがお勧めです。
  • STT/RTTが途中まで快調に動いていたのに突然無言になってしまった!
上と同じ方法で対処可能なようです。これもおそらくChromeが腐ってます。
  • Voicemeeterが意味不明過ぎて死にそう。なんでInputとOutputが逆なの。
僕も死にそうです。最近ようやく理解し始めたのでハンパ知識ですが図解を貼ります。


 

謝辞

システム開発者その人であり、長きにわたる管理とチューニングに勤しまれておられるVTFさん、アーリーアダプター兼エヴァンジェリストとして広く活躍なさっているsumsideさん、お二方が書いて下さったブログ記事はとても参考になりました。および、関わっている全ての方々にお礼申し上げます。
 

参考リンク

sumsideさんのガイド: https://mxier.pro/blog_post/sumside/5b236d67e7bf8526271edd46
VTFさんのガイド(消えかけですが、ある程度の理解力があればわかります。): https://mxier.pro/blog_post/VTF/5b156fb8e7bf8526271edd42
STT、Speech-to-Trans(今まで一度もURL出してなかった!): https://mxier.pro/openchat
RTT、Read-to-Trans(これも!): https://mxier.pro/openchat2
sumsideさんによる、STT、RTTのもっと基本的なガイド。この項目はなにで、どうやって使うの、とか。: https://mxier.pro/blog_post/sumside/5b2e123413131c4317aaad19

ここから先は上に一度貼ったものをまとめてもう一度リンク張り直す感じにしときます。便利なように。
VTFさん制作のChromeポータブルパック…もとい、Hermes。: https://mxier.pro/uploads/hermes.zip
VB-Cable:https://www.vb-audio.com/Cable/
Voicemeeter Banana: https://www.vb-audio.com/Voicemeeter/banana.htm
Leave a Comment:
Search