Azure文本转语音相同请求输出音量语调变更问题求助
解决方案:指定Azure文本转语音模型版本实现稳定输出
核心原因
Azure神经语音模型会持续迭代更新,默认请求会自动使用最新版本,导致相同输入的语音输出随时间发生变化。通过在SSML中指定具体模型版本,即可锁定输出效果,避免无预期变更。
具体步骤
查询可用的模型版本
调用Azure语音服务的语音列表端点,获取ja-JP-NanamiNeural的所有历史版本:$token = // 复用你已获取的授权token $url = 'https://japaneast.tts.speech.microsoft.com/cognitiveservices/voices/list'; $aryHeader = [ 'Authorization: '.$token, 'Host: japaneast.tts.speech.microsoft.com', ]; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $aryHeader); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $voices = json_decode(curl_exec($curl), true); curl_close($curl); // 筛选Nanami的所有版本 foreach($voices as $voice) { if(strpos($voice['Name'], 'ja-JP-NanamiNeural') !== false) { echo $voice['Name'] . PHP_EOL; } }输出会类似
ja-JP-NanamiNeural-V1、ja-JP-NanamiNeural-V2这类带版本后缀的标识。修改SSML锁定版本
在你的请求SSML中,将voice标签的name属性替换为带版本后缀的标识,例如锁定V1版本:$aryPost = "<speak version='1.0' xml:lang='ja-JP'> <voice xml:lang='ja-JP' xml:gender='Female' name='ja-JP-NanamiNeural-V1'> <prosody rate='60%'>いかがだったかしら?</prosody> </voice> </speak>";验证效果
重新发起请求后,输出的语音语调、音量将与该版本发布时的效果完全一致,不会随后续模型更新产生变化。
注意事项
- 旧版本模型通常会被Azure保留数年,但如果后续收到版本停用通知,需要切换到其他稳定版本。
- 不同区域的模型版本可能略有差异,确保查询的是你实际使用的区域(如japaneast)的语音列表。
内容的提问来源于stack exchange,提问作者barugag
相关产品推荐
相关产品推荐

