You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:35:12