You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Node.js中针对AWS Polly Amy语音特定内容调整语速的实现及代码正确性确认

Node.js中针对AWS Polly Amy语音特定内容调整语速的实现及代码正确性确认

嘿,作为刚接触开发的新手,你能想到用AWS Polly支持的SSML来单独调整语音邮件播报的语速,这个思路完全没问题!不过你的代码改动里还有几个小细节需要修正,才能让减速效果真正生效,咱们一步步来捋:

你的改动里存在的几个小问题

  • 模板字符串使用错误:你用了单引号'来包裹ssmlText,但变量插值${file.alt}只有在**反引号(`)**包裹的模板字符串里才会生效,单引号里的变量会被当成纯文本输出。
  • SSML标签被转义:你写的&lt;speak&gt;这些转义字符,在直接传给Polly的时候不需要转义,应该用正常的<speak>标签。
  • 调用polly.runpolly时参数错误:你创建了ssmlText但没把它传给方法,反而还是传了原来的file.alt,而且参数之间少了逗号,会导致语法错误。

修正后的完整代码

try {
  await s3.getobject(s3.s3buckets.oldvoicemail.bucket, key, downfilename)
  // eslint-disable-next-line require-atomic-updates
  file.wav = downfilename
} catch (e) {
  const hsh = crypto.createHash("md5").update(file.alt).digest("hex")
  file.wav = s3.mediadirectories.polly + hsh + ".wav"
  // 用反引号创建模板字符串,直接使用正常的SSML标签
  const ssmlText = `<speak><prosody rate="slow">${file.alt}</prosody></speak>`
  try {
    // 注意这里要传入SSML文本,而不是原来的file.alt,同时保证参数逗号正确
    await polly.runpolly(file.wav, ssmlText)
  } catch (e) {
    console.error(e)
  }
}

关键细节说明

  • SSML的正确使用<prosody rate="slow">标签确实能让Polly降低语速,除了slow,你也可以用具体的百分比(比如rate="80%")来更精准控制,AWS Polly支持的rate范围是20%-200%。
  • 模板字符串的使用:必须用反引号 包裹才能让${file.alt}被正确替换成实际的语音邮件文本内容。
  • 确认Polly方法支持SSML:要确保你的polly.runpolly方法在接收到SSML格式的文本时,会告诉Polly这是SSML输入(比如在调用Polly的API时设置TextType: 'ssml')。如果这个封装方法默认是处理纯文本的,你可能需要修改runpolly内部逻辑,或者给它加一个参数来指定文本类型。

额外小提示

如果只有语音邮件的文本需要减速,你可以加个判断条件,只在处理语音邮件相关文本时才包裹SSML,避免影响其他不需要减速的TTS内容哦~

内容来源于stack exchange

火山引擎 最新活动