如何用Azure认知服务文本转语音REST API和PowerShell处理纯文本文件
解决方案:读取本地文本文件并集成自定义词典
1. 读取本地文本文件
使用PowerShell的Get-Content命令即可读取本地文本文件内容,加上-Raw参数能一次性读取整个文件为单个字符串,避免换行符干扰SSML解析:
$textFilePath = "\\path\\Test.txt" $textContent = Get-Content -Path $textFilePath -Raw
2. 集成自定义词典
Azure TTS支持通过SSML的<lexicon>标签定义自定义词汇发音,你可以直接在SSML中内联词典内容(REST API场景下推荐此方式)。示例词典格式如下(以西班牙语为例):
<lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="es-MX"> <lexeme> <grapheme>ejemplo</grapheme> <phoneme>eˈxemploh</phoneme> </lexeme> </lexicon>
完整修改后的脚本
以下是整合了文件读取、自定义词典的完整可运行脚本:
# 基础配置 $AudioOutputType = 'audio-16khz-128kbitrate-mono-pcm' # 生成标准WAV请用此格式 $XSearchAppID = '000000000000000000000' $XSearchClientID = '00000000000000000000000' $UserAgent = 'PowerShellTextToSpeechApp' $AccessToken = "你的认证令牌" # 补充你的有效认证令牌 $Locale = 'es-MX' $ServiceNameMapping = 'Microsoft Server Speech Text to Speech Voice (es-MX, DaliaNeural)' $textFilePath = "\\path\\Test.txt" # 本地文本文件路径 $Filename = 'output.wav' $Endpoint = 'https://speech.platform.bing.com/synthesize' # 读取本地文本内容 $textContent = Get-Content -Path $textFilePath -Raw # 自定义词典(按需修改词汇和发音) $customLexicon = @" <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="$Locale"> <lexeme> <grapheme>ejemplo</grapheme> <phoneme>eˈxemploh</phoneme> </lexeme> <!-- 可添加更多自定义词汇 --> </lexicon> "@ # 构造符合要求的SSML请求体 $Body = @" <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="$Locale"> $customLexicon <voice name="$ServiceNameMapping"> $textContent </voice> </speak> "@ # 请求头配置 $Headers = @{ 'Content-Type' = 'application/ssml+xml' 'X-Microsoft-OutputFormat' = $AudioOutputType 'X-Search-AppId' = $XSearchAppID 'X-Search-ClientId' = $XSearchClientID 'Authorization' = $AccessToken } # 调用API生成音频文件 Invoke-RestMethod -Uri $Endpoint -Method POST ` -Headers $Headers -ContentType 'application/ssml+xml' ` -Body $Body -UserAgent $UserAgent ` -OutFile $Filename
关键注意事项
- 若需生成标准WAV文件,务必将
$AudioOutputType设为audio-16khz-128kbitrate-mono-pcm,这是无压缩的PCM格式,符合WAV规范。 - 自定义词典可通过添加更多
<lexeme>元素扩展,支持IPA音标或微软自定义音标格式。 Get-Content的-Raw参数必须保留,否则文本内容会被拆分成数组,导致SSML格式错误。
内容的提问来源于stack exchange,提问作者eera5607
相关产品推荐
相关产品推荐

