こんにちは。サイオステクノロジーの川田です。
今回はAzureのSpeech SDKを使用してテキストから音声に変換してみたので、ご紹介したいと思います。
参考にさせていただいたのは☞「テキスト読み上げのクイックスタート」です。
こちらの記事はPythonのインストール、AzureアカウントとSpeech Serviceサブスクリプションを持っていることが前提です。
事前準備
音声サービスを作成
-
Azure portalにサインインします。
-
「リソース作成」をクリックします。
-
検索ボックスに「speech」と入力し、Enterします。
-
音声サービスを作成します。(詳細は省略)
-
作成したリソースへ移動し、「キーとエンドポイント」をクリックします。
-
後ほど使うので、①キー1と②場所はメモしておいてください。
ライブラリーをインストール
Windows環境はこちらのみでOKでした。
pip install azure-cognitiveservices-speech
python3 -m pip install --upgrade pip
以上が事前準備になります。ではプログラムを作成していきましょう!
プログラム作成
- Python
こちらはテキストから音声に変換するPythonプログラムです。
4行目のYourSubscriptionKeyにはメモした「①キー1」
YourServiceRegionにはメモした「②場所」をそれぞれ変更してください。
12行目は拡張子が「.wav」になっていますが、「.mp3」にしても問題ありません。
from azure.cognitiveservices.speech import AudioDataStream, SpeechConfig, SpeechSynthesizer, SpeechSynthesisOutputFormat
from azure.cognitiveservices.speech.audio import AudioOutputConfig
speech_config = SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
# SSML
synthesizer = SpeechSynthesizer(speech_config=speech_config, audio_config=None)
ssml_string = open("ssml.xml", "r", encoding="utf-8").read()
result = synthesizer.speak_ssml_async(ssml_string).get()
stream = AudioDataStream(result)
stream.save_to_wav_file("voicefile.wav")
7行目からSSMLを使用して音声の特徴をカスタマイズをしています。
変換方法を指定することで音声のピッチ、読み方、読み上げ速度、音量などを微調整することができます。
- XML
同じ階層にssml.xmlを作成します。
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="ja-JP"> <voice name="ja-JP-NanamiNeural"> テキスト読み上げ </voice> </speak>
言語サポートの一覧は☞「言語と音声のサポート」です。
今回の例はニューラル音声から選びました。
Locale :ja-JP
性別:Female
音声名:ja-JP-NanamiNeural
こちらを実行するとwavファイルが作成されます。
作成されたファイルがこちらになります。
音声名をja-JP-KeitaNeuralに変えてみるとこのような感じになります。
標準音声とニューラル音声の比較
先ほどの人間の録音にほぼ近い自然な音声が「ニューラル音声」と言いました。
「標準音声」にするとどれくらい違うのか!今度は文章にして音声を比べたいと思います。
- 標準音声
ちょっとなんだか違和感がある音声という感じがします。苦手な方も多いですよね。
- ニューラル音声
こちらのほうが人間に近い音声ですね。息遣いが聞こえてきそうな自然な感じです。
音声の特徴をカスタマイズする
先ほども出ましたがSSMLを使って音声のピッチ、読み方、読み上げ速度、音量などを微調整することができます。
書き方などまとめられた内容は☞こちらになります。
では少し触ってみましょう!
複数音声
1つのwavファイルに複数の音声を使用することができます。
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="ja-JP"> <voice name="ja-JP-NanamiNeural"> 昔昔、あるところに、おじいさんとおばあさんが住んでいました。 </voice> <voice name="ja-JP-KeitaNeural"> おじいさんは山へ柴刈りに、おばあさんは川へ洗濯に行きました。 </voice> </speak>
出力した音声はこちらになります。
ピッチ変更
標準音声の場合は単語または文章で適用できます。
ニューラル音声の場合は文章のみ適用となります。
今回はニューラル音声なので文章になりますね。例は2つ目の文章でピッチを上げています。
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="ja-JP"> <voice name="ja-JP-NanamiNeural"> 昔昔、あるところに、おじいさんとおばあさんが住んでいました。 <prosody pitch="high">おじいさんは山へ柴刈りに、おばあさんは川へ洗濯に行きました。</prosody> </voice> </speak>
音声を聞いてみましょう。2つ目の文章で変わったのがわかりますね。
読み上げ速度の変更
話すスピードを速くしたり遅くしたりすることも可能です。
わかりやすいように少し速く設定してみます。速くしたい場合は「+」遅くしたい場合は「-」で調整できます。
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="ja-JP"> <voice name="ja-JP-NanamiNeural"> <prosody rate="+40.00%"> 昔昔、あるところに、おじいさんとおばあさんが住んでいました。おじいさんは山へ柴刈りに、おばあさんは川へ洗濯に行きました。 </prosody> </voice> </speak>
3つをピックアップしてご紹介しました。カスタマイズできるのは便利ですね(/・ω・)/
サポートされていない音声名もあるようなので試す際は注意が必要です!
まとめ
今回はAzureの音声サービス、テキスト読み上げ機能を使ってみました。
いやー時代はどんどん進化していますね。。
ぜひみなさんも試してみてはいかがでしょうか。
ありがとうございました^^