Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Azure Microsoft

AzureのText to Speechで声のトーンを変える方法

投稿日:2023年7月4日 更新日:

 

<目次>

(1) AzureのText to Speechで声のトーンを変える方法
 やりたいこと
 (1-0) 概要
 (1-1) STEP1:SSMSの設定
 (1-2) STEP2:サンプルへの組み込み
 (1-3) XXXX

(1) AzureのText to Speechで声のトーンを変える方法

やりたいこと

・AzureのText to Speechで声のトーンを変えたい(棒読み感を解消したい)

(1-0) 概要

・Speech Synthesis Markup Language (SSML)と呼ばれるXML設定で声のトーンや強度やロールを設定。
 
(参考)SSML

(1-1) STEP1:SSMSの設定

・このXMLをSpeechSynthesizerのspeak_ssml_asyncメソッドに突っ込むだけでOK
 
(例)
ssml_text = "<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='http://www.w3.org/2001/mstts' xml:lang='ja-JP'>" \
        "<voice name='en-US-AriaNeural'>" \
        "<mstts:express-as style='terrified' styledegree='2'>"+text+"</mstts:express-as>" \
        "</voice></speak>"
主要なパラメータ
・style:怒った、叫ぶ、ささやく、友好的などの声のスタイル
・styledegree:0.01~2の間で指定。0.01に近いほど標準的、2に近いほどstyleが強調される。
・role:男、女、老女、老男、若女、若男、成人男性、成人女性など
 
(参考)声の種類
→声の種類によって、使えるstyleやroleが異なるので注意が必要
(参考)音声お試し
 

(1-2) STEP2:サンプルへの組み込み

あとはtext to speechのサンプルを少し修正すればOKです。
→(参考)テキストデータ(Text)を音声データ(Speech)に変換する方法(★)
 
(サンプルプログラム)
import os
import azure.cognitiveservices.speech as speechsdk

# 環境変数"SPEECH_KEY"と"SPEECH_REGION"を取得
# 値自体は外だし(.env)している
speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), region=os.environ.get('SPEECH_REGION'))
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)

# 声の言語や種類を設定。
# ラインナップはこちらのページで紹介されています。
# https://learn.microsoft.com/en-us/azure/cognitive-services/speech-service/language-support?tabs=tts

# speech_config.speech_synthesis_voice_name='en-US-JennyNeural'
# speech_config.speech_synthesis_voice_name='ja-JP'
#speech_config.speech_synthesis_voice_name='ja-JP-AoiNeural1' # あおい ♀
# speech_config.speech_synthesis_voice_name='ja-JP-DaichiNeural1' # だいち ♂
# speech_config.speech_synthesis_voice_name='ja-JP-KeitaNeural' # けいた ♂
# speech_config.speech_synthesis_voice_name='ja-JP-MayuNeural1' # まゆ ♀
# speech_config.speech_synthesis_voice_name='ja-JP-NanamiNeural' # ななみ ♀
# speech_config.speech_synthesis_voice_name='ja-JP-NaokiNeural1' # なおき ♂
# speech_config.speech_synthesis_voice_name='ja-JP-AoiNeural1' # しおり ♀

# シンセサイザーは一般的に音楽を合成する機械
# 発話設定(speech config)と音響設定(audio config)
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)

# コンソールからテキストを取得し、デフォルトスピーカーに合成
print("Enter some text that you want to speak >")
text = input()

####################################################################
# 追加箇所:Speech Synthesis Markup Language (SSML)の定義
# style:怒った、叫ぶ、ささやく、友好的などの声のスタイル
# styledegree:0.01~2の間で指定。0.01に近いほど標準的、2に近いほどstyleが強調される。
# role:男、女、老女、老男、若女、若男、成人男性、成人女性など
ssml_text = "" \
        "" \
        ""+"That'd be just amazing!"+"" \
        ""

# 修正箇所:SSML経由の場合は「speak_ssml_async」メソッドを使用
speech_synthesis_result = speech_synthesizer.speak_ssml_async(ssml_text).get()
# speech_synthesis_result = speech_synthesizer.speak_text_async(text).get()
####################################################################

# 音響合成完了
if speech_synthesis_result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
    print("Speech synthesized for text [{}]".format(ssml_text))
# 音響合成キャンセル
# タイムアウト、API呼び出しの最中のキャンセル、APIで受信した音声が処理できずエラーになった場合
elif speech_synthesis_result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = speech_synthesis_result.cancellation_details
    print("Speech synthesis canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        if cancellation_details.error_details:
            print("Error details: {}".format(cancellation_details.error_details))
            print("Did you set the speech resource key and region values?")
↓実際に実行した動画(叫び、ささやきを試した)
(動画101)

Adsense審査用広告コード


Adsense審査用広告コード


-Azure, Microsoft
-

執筆者:


comment

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

関連記事

Azure Logic AppsからAzure Storageを操作する方法(access_tokenの更新を題材に)

  <目次> (1) Azure Logic AppsからAzure Storageを操作する方法(access_tokenの更新を題材に)  (1-0) やりたいこと  (1-1) STE …

no image

「Not enough quota available」エラーがAzureで発生した際の原因/対処について

  <目次> (1) 「Not enough quota available」エラーがAzureで発生した際の原因/対処について  (1-1) エラーメッセージ  (1-2) 原因  (1- …

Exchange Onlineとは?

  <目次> (1) Exchange Onlineとは?  (1-1) 概要/特徴  (1-2) Exchange Onlineを使える人は?  (1-3) Exchange Online …

タスクスケジューラで「オペレーターまたは管理者が要求を拒否しました」エラーの発生例と解決策例のご紹介(一例)

  <目次> (1) タスクスケジューラで「オペレーターまたは管理者が要求を拒否しました」エラーの発生例と解決策例のご紹介(一例)  (1-1) 事象・発生状況  (1-2) 原因(例)   …

Azure Cosmos DBとは?特徴や構造およびデータ形式について

  <目次> (1) Azure Cosmos DBとは?特徴や構造およびデータ形式について  (1-1) Azure Cosmos DBとは?  (1-2) Azure Cosmos DB …

  • English (United States)
  • 日本語
Top