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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

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

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

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

アバター画像
About kawada 25 Articles
Webアプリケーション開発を行っており、プログラミング初心者向けの記事や動画編集に関する内容を中心とした記事を執筆しています。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる