【Python】AzureのSpeech SDKを使ってテキストから音声に変換してみた

こんにちは。サイオステクノロジーの川田です。

今回はAzureのSpeech SDKを使用してテキストから音声に変換してみたので、ご紹介したいと思います。
参考にさせていただいたのは☞「テキスト読み上げのクイックスタート」です。

こちらの記事はPythonのインストール、AzureアカウントとSpeech Serviceサブスクリプションを持っていることが前提です。

事前準備

音声サービスを作成

  1. Azure portalにサインインします。

  2. リソース作成」をクリックします。

  3. 検索ボックスに「speech」と入力し、Enterします。

  4. 音声サービスを作成します。(詳細は省略)

  5. 作成したリソースへ移動し、「キーとエンドポイント」をクリックします。

  6. 後ほど使うので、キー1場所はメモしておいてください。

ライブラリーをインストール

Windows環境はこちらのみでOKでした。

pip install azure-cognitiveservices-speech
macOSを使用している場合
以下のコマンドを実行して、上記のpipコマンドを取得する必要があります。
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を使用して音声の特徴をカスタマイズをしています。

SSMLとは
音声合成マークアップ言語(SSML)とはXMLのマークアップ言語です。
変換方法を指定することで音声のピッチ、読み方、読み上げ速度、音量などを微調整することができます。
  • 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>

言語サポートの一覧は☞「言語と音声のサポート」です。
今回の例はニューラル音声から選びました。

Language:日本語 (日本)
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の音声サービス、テキスト読み上げ機能を使ってみました。
いやー時代はどんどん進化していますね。。
ぜひみなさんも試してみてはいかがでしょうか。

ありがとうございました^^

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です