Skip to the content.

背景

SAPI(5)っていうとっても便利なAPIがあるんですが、これを使うとWindowsの標準機能である音声合成を呼び出したり、音声合成のエンジンを自作したりできます。

おおよそのWindowsで動作する音声合成ソフトウェアは内蔵のエンジンをプライベートAPIで呼び出ししているか、SAPIを経由してすでにOSへ登録されている音声合成エンジンを利用しているかのどちらかです。かの有名な「棒読みちゃん」もSAPI互換実装です。

今回は、音声合成エンジンは自作せずに、高品質な音声合成エンジンをSAPIで呼び出してみようと思います。つまるところ、音声合成エンジンのSAPI用のラッパーとかコントローラーとかサーバーとかそういう類いのものを用意しようという話です。

音声合成エンジンの選定と先行実装例の紹介

音声合成エンジンは有償でそれなりに高品質なVoicepeak を利用しようと思います。Voicepeak はAI技術(具体的にはSynthesizerVの歌声用音声合成モデルを朗読用に拡張しているようです)を用いた高品質なTTSエンジンです。単語のアクセントを設定出来たり機能面も高品質ですが何よりもすでにセットされている音声モデルがとても高品質に感じます。

実装は、こちら を使わせていただくことにしました。

注意点として、上記の実装は、未ビルドのソースコードのみ公開されているため、ビルドしてdllを作成する必要があります。ビルドには、Visual Studioが必要です。Solutionファイルを開いてビルドしてください。

今回は棒読みちゃんでのテストを想定したため、x86向けにビルドしました。

また、自前の環境では、Voicepeakのインストール先がデフォルトとは異なっていたため、 https://github.com/azumyar/voicepeak-connect/blob/b2f500da96c621710f403b4be8d90f1741f01490/src/sapi-voicepeak-connect/sapi.cs#L134 を編集してデフォルトパスを変えておきました。

検証

付属の bat は、CMD.EXE or PowerShell で実行する必要があります。エクスプローラーから実行すると権限が足りなかったり、権限付与するとカレントパスが変わって正常に動作しなかったりするので、必ずカレントを dll の存在するパスに変更してから実行します。

正常に実行が完了すれば、ダイアログが表示されるはずです。ダイアログでエラーが表示されれば何らかのステップが失敗しています。

image

正しく実行できた場合、棒読みちゃんの設定画面でVoicepeakが選択できるようになっているはずです。上記は設定画面でSAPI5経由の音声エンジンとしてVOICEPEAKが選択できるようになった様子です。

実際に実行してみると、確かに音声としてVoicepeakの音声エンジンを利用した再生ができていることが確認できます。 一方でVoicepeakのクライアント利用したときと比べ音質が劣化しているようにも感じられるほか、ラッパーの問題か、VoicepakのCLI APIの問題か、それなりの遅延も感じます。 おそらくは音素の音高調整などはSAPI5では表現できないため、内部APIが独自に定義した何かでコントロールしているのだと思われますが、そのあたりがうまくいってないのかも知れません(完全な根拠のない推測です)。 ですが、無料のものとくらべ自然なTTSがオフラインで実現出来ているのは大きなメリットだと思います。

まとめ

SAPI5を利用して高品質な音声合成エンジンを利用することができました。今回はVoicepeakを利用しましたが、他の音声合成エンジンでも同様にSAPI実装をすれば・利用知れば、同じようにできると思います。

SAPI実装はそれなりに手間はかかりますが、とても難しい実装ではないので、先行実装がない場合でも、自作することは可能だと思います。一方で、CLIやその他のプログラマブルなAPIを備えない音声エンジンとなると、SAPI実装は難しいかもしれません。Voicepeakは実験機能ではあるもののCLI対応をしてくれている点はとてもありがたいと考えるほかありません。是非とも各社対応してほしいなと思いました。