音声合成をボイスチャットで使う仕組みを作ってみました
グループ通話またはライブ配信する際に、チャット入力した文章を音声合成してマイクに流す仕組みを作ってみました。
基本的には、開発中のSkyBeje用に作ってみた仕組みですが、SkypeやDiscordの音声通話にも応用できると思います。
2020.04.30 追記 SlackやDiscordに応用する手順を書きました。
以下の3種類の音声合成を、ボイスチャットに使う仕組みを作ってみました。
・定番の音声合成ソフト「棒読みちゃん」
・株式会社エーアイのAITalk
・HOYA株式会社のVoiceText
(注意)AITalk / VoiceTextについては、無料で試せるWebAPIを使いましたが、この2つは、商用利用禁止・二次利用禁止のWebAPIです。基本的には開発や検証目的として公開されているAPIとのことですので注意してください。詳細については、それぞれのWebAPIの利用規約を参照してください。
「棒読みちゃん」の音声をマイクに流す仕組み
棒読みちゃんの音声をマイク代わりに使う方法は、以下を参考にさせて頂きました。
棒読みちゃんをマイク代わりに使う : らいっちのPC奮闘記
棒読みちゃんのインストール方法や設定方法、仮想マイクデバイス(NETDUETTO)については、上記ページを参考にしてください。ちなみに上記ページはSkype用として説明されていますがDiscordにも適用できると思います。
SkyBejeとの連動については、棒読みちゃんの標準プラグインにある「クリップボード監視」機能を使ってみました。
SkyBeje側の設定
あとは、グループ通話のマイクデバイスに「NETDUETTO Driver」を選択します。
ライブ配信する場合も同様で、マイクに「NETBUETTO Driver」を選択します。
これで自分のチャットの発言が、棒読みちゃんの音声でマイクに出力されるようになります。(ただし、他の人のメッセージの読上げはできません)
音声合成API(AITalk / VoiceText)を使ってボイスチャット
色々調べてたら、VoiceTextを再生できる棒読みちゃんのプラグインを作られている人がいました。(Voiceroid Talk Plusというプラグインも作っている人です)
Voicetext Talk Ver1.5.0.0:Wangdora Eve. - ブロマガ
最初、このプラグインでいけるかなと思ったのですが、プラグイン側で音声を標準デバイスに出力しているとの事で、棒読みちゃん側で設定したデバイスには出力できない仕様のようでした。
デバイス指定の他に、音声パラメータも指定したかったのでツールを自作しました。
github.com
詳細は上記のGitHubのページを見て貰いたいのですが、少しだけ補足です。
AITalk と VoiceTextには感情パラメータというのがあります。上記ツールではVoiceTextは感情パラメータを指定できるようにしたのですが、AITalkでの感情パラメータの指定方法が不明だった為、上記のアプリからは指定できません。(WebAPIからは指定できないのかもしれません)
他、SkyBejeは複数のアクターやアイコンを登録できて、切り替えながら発言することができます。アイコンごとに音声パラメータを設定できるようにしたので、喜んでいるアイコンに対しては喜んでいる音声パラメータを、怒ってるアイコンに対しては怒っている音声パラメータを設定するようなことができます。
現状の設定画面はこんな感じです。
チャット画面はこんな感じでアイコンを切替えながら発言できますが、同時に音声パラメータも切り替わって音声合成されます。 (右側はアイコン毎の音声パラメータです)
問題点や懸案事項
上記のプログラムを作る前から、AITalk / VoiceTextのWebAPIが「商用利用禁止」というは把握してたのですが、オープンソースとしてGitHubに公開するし、広告とかも入れないので、遊び用途なら問題ないと考えていました。
しかし、GitHubのReadMeを書くタイミングで、しっかりと利用規約を確認してみたところAITalk / VoiceText両方の利用規約に「無料でもウェブサイトに一般公開した場合は商用とみなす」的な記述があり、これは多分遊び用途で気軽に使っちゃダメなやつだ、と気が付きました(笑)
ただ、利用規約で曖昧部分もあって、判断に迷う部分があったので、そこは問合せてみようと思ってます。
また、これも後で気がついたのですが、Windowsのネイティブアプリの場合だと、APIキーの扱いに困ります。GitHubにコミットするソースにはAPIキーは含めないとしても、ビルド時にAPIキーをバイナリの中に含めてしまえば、逆アセンブルすればAPIキーが拾われてしまう可能性がありそうですし。。
上記のような問題もあって、個別にAPIキーを設定するようにしてるのですがAITalk(DocomoDeveloper Support)の場合は、サービスやアプリの単位でAPIキーを発行する感じで、個別に発行するようものでも無いようなんですよね。(VoiceTextの場合は、個人に対してAPIキーを発行している感じなのですが)
さいごに
と、まぁ色々と問題はあるのですが、ASP.NET用とか、社内で使うツールとかに応用できなくはないかもしれないと思い、プログラムはGitHubに置いておく事にしました。
最後まで読んでいただき、ありがとうございました。
ご質問やご意見がありましたら、お気軽にコメントしていただければと思います。