如何通过Azure Python Speech SDK动态获取各语音对应的mstts:express-as可用样式
如何通过Azure Python Speech SDK动态获取各语音对应的mstts:express-as可用样式
嘿,这个问题我太懂了!硬编码几十种语音的样式简直是噩梦,其实Azure Speech SDK早就给我们准备了动态获取的方法,完全不用手动一个个查~
下面给你一步步讲怎么实现:
首先,你需要确保安装了最新版的Azure认知服务语音SDK,用pip install azure-cognitiveservices-speech就能搞定。
核心思路是:通过SDK提供的get_voices_async()方法获取所有可用语音的详细信息,每个语音的properties属性里藏着它支持的SSML标记属性,其中就包含mstts:express-as的可用样式。
直接上实用代码:
import azure.cognitiveservices.speech as speechsdk def fetch_voice_supported_styles(subscription_key, region): # 初始化语音配置 speech_config = speechsdk.SpeechConfig(subscription=subscription_key, region=region) # 异步获取所有可用语音,这里用get()同步获取结果 voices_result = speech_config.get_voices_async().get() # 用来存储语音和对应样式的字典 voice_styles_dict = {} for voice in voices_result.voices: # 检查该语音是否有支持的SSML属性 if "SupportedSSMLVoiceAttributes" in voice.properties: attr_str = voice.properties["SupportedSSMLVoiceAttributes"] # 提取所有express-as开头的样式 supported_styles = [] for attr in attr_str.split(","): if attr.strip().startswith("express-as:"): style = attr.strip().split(":")[1] supported_styles.append(style) voice_styles_dict[voice.name] = supported_styles else: # 没有支持的样式就存空列表 voice_styles_dict[voice.name] = [] return voice_styles_dict # 替换成你的Azure订阅密钥和区域 MY_SUBSCRIPTION_KEY = "你的订阅密钥" MY_REGION = "你的服务区域(比如eastus、westeurope)" # 获取所有语音的样式 all_voice_styles = fetch_voice_supported_styles(MY_SUBSCRIPTION_KEY, MY_REGION) # 打印测试 for voice_name, styles in all_voice_styles.items(): if styles: print(f"语音 {voice_name} 支持的表达样式:{', '.join(styles)}") else: print(f"语音 {voice_name} 不支持任何express-as样式")
这段代码会返回一个字典,键是语音的名称,值是该语音支持的所有mstts:express-as样式列表。你可以把这个结果集成到你的Kivy应用里,比如做个下拉菜单,选择语音后自动加载对应的可选样式,完全动态化,再也不用硬编码啦!
另外要注意两点:
- 有些语音确实不支持任何表达样式,代码里已经做了空列表处理,不用担心报错
- 一定要用最新版的SDK,旧版本可能没有
SupportedSSMLVoiceAttributes这个属性哦
备注:内容来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

