合成音声を使用する経緯が不明なので用途に合うか不明ですが、現在稼働しているチャット読み上げアプリで開発したことがあるので記事を書きます。
合成音声の使用用途 (加藤の場合)
前述のとおり読み上げボットで合成音声のプログラムを使用しており、いずれは商用利用を検討しています。商用で利用するにあたり以下の要件をクリアしている必要がありました。
- 24時間稼働している必要があるため、動作環境はサーバ上であること。また、レンタルするサーバ(VPS)は個人で負担できる範囲のもの。
- 入力から出力までのレスポンス速度が速いこと。
- 商用利用が可能であること。
要件から発生した制約事項
①の要件で合成音声作成処理に高負荷がかかるようなソフト(VoiceVOX)は使用することは不可能。②の要件でPythonなどのスクリプト言語で開発することも不可能。③は特にネックGoogle Text to Speechの選択も不可能となった。
※公開されている非公式のライブラリはMIT(商用利用可能)ライセンスだがプログラム自体がスクレイピングして作られているものが多いため、Googleの規約違反をしている可能性が高い。
要件を満たしつつ制約を回避するC#ライブラリ
調査した結果、Microsoft公式からリリースされているSpeechSynthesizerクラスを使用することで、要件を満たし、制約事項を回避して合成音声を作成作成することが可能です。また、SpeechSynthesizerは多言語に対応しているため、日本人だけではなく英語圏(または他言語)の人向けにもアプリケーション開発が可能です。
日本語サンプル
英語サンプル
合成音声作成プロジェクト
zipファイルがWordpressにアップロードできなかったのでコダマサーバーの以下に格納しておきました。必要であればサーバにログインして取得してください。
1 <ユーザ名>/www/hk/WindowsVoiceCreator/WindowsVoiceCreator.zip
プロジェクトについては不特定多数からよくわからないテキスト情報が入力されることを想定し、日本語と英語以外は作成できないようになっています(その他、エラー処理がガチガチに入っています)。
プログラムについては多くは書きません。コード上にコメントアウトも残しているので読めばわかると思います(ブン投げ)。
前提条件として不特定多数からの入力を想定し、原因不明のメモリリークの発生が原因でソフト強制終了を回避するためexeで呼び出すよう設計しています。(dllでの組み込みはexeでの運用より開発コストが高いこともあるため)
使用方法
zipファイル内の以下のフォルダにビルド済みのexeが格納されています。
1 .\WindowsVoiceCreator\bin\Release\net6.0\WindowsVoiceCreator.exe
WindowsVoiceCreator.exeは引数を渡すことで合成音声を作成します。
1 WindowsVoiceCreator.exe <引数1: しゃべらせる内容> <引数2: 合成音声格納先.wav>
- コマンドプロンプトを開いて「WindowsVoiceCreator.exe」が格納されているフォルダに移動
- WindowsVoiceCreator.exe <しゃべらせる内容> <wavファイル格納先>
- <wavファイル格納先>にwavファイルが作成されます。
文字だと伝わりにくいし、文を書くのが面倒になってきたので使用方法不明な場合は連絡ください。
ソフトの制約事項
合成ソフトのファイル格納先(第二引数)はファイル名(,wavを含む)で指定してください
ソフト内部で入力されたテキストから英語と日本語を判定して読み上げてもらう人を切り替えています(日本語ネイティブor英語ネイティブ)。テキスト内に日本語と英語の両方がある場合、入力テキストが皆目見当がつかない言語の場合は日本語判定が優勢されて日本語ネイティブの人が話すようになってます。
留意事項
- SythesizerはWindowsのシステムを利用して動作しているため、Windows Serverを含む Windows OS上でしか動作しません。Ubuntu, FreeBSD, CentOSなどのLinuxプラットフォームでは実行時にエラーが発生します。
- 実行には.NET 6のインストールが必要です。
- 開発する場合Visual StudioのNugetからSystem.Speech(SpeechSynthesizer)のインストールが必要です。