将SSML字符串分解为批量的AWS Polly polly polly它们的文本对语言API可以消费。
hardLimit ,请确保您保持低于API字符的限制。. , ;或空间。可以配置。基于@oleglegun的Polly-SSML-Split
安装包裹:
npm install ssml-split --save导入包并设置选项。使用.split()方法拆分您的SSML字符串。您可以调整softLimit ,以查看对您有用的东西。我建议您将hardLimit保持在相应API的限制限制:
import SSMLSplit from 'ssml-split' ;
const ssmlSplit = new SSMLSplit ( {
// The service you are using: "google" or "aws"
synthesizer : 'google' ,
// Finds a possible split moment starting from 4000 characters
softLimit : 4000 ,
// Google Text to Speech limitation
hardLimit : 5000 ,
// Allow to split large paragraphs, set to false to keep your <p></p> intact
breakParagraphsAboveHardLimit : true
} ) ;
const batches = ssmlSplit . split ( '<speak>your long ssml here</speak>' ) ;| 选项 | 类型 | 默认 | 描述 |
|---|---|---|---|
synthesizer | string | aws | 设置您使用的合成器。当您使用breakParagraphsAboveHardLimit时很有用。它允许库确定正确的断裂长度,因为每个合成器服务都不同。 |
softLimit | number | 1500 | 该脚本将开始尝试以多个部分分解您的SSML的字符数量。您可以调整此数字以查看对您有用的方法。 |
hardLimit | number | 3000 | 每个SSML零件的最大尺寸应保持在低于脚本的字符数量。如果任何批处理大小都高于此,则脚本将出错。此硬限制是您正在使用的AWS或Google API的字符限制。 |
breakParagraphsAboveHardLimit | boolean | false | 设置为true ,以允许脚本通过删除<p>并用<break </p> <break strength="x-strong" /> (对于aws )或<break strength="x-weak" /> (用于google )来打破大段落。这会导致相同的暂停。需要设置选项synthesizer 。 |
extraSplitChars | string | ,;. | 可以用作纯文本的拆分标记的字符。 |
通过使用选项synthesizer: 'google'库将包括计数SSML标签字符,以确定最佳的拆分时刻。这使图书馆还可以使用Google的文本到语音API。
例如: <speak><p>some text</p></speak>
默认行为将其视为9个字符,这对AWS Polly很好,但对于Google的文字到语音API来说不是。
使用synthesizer: 'google'将被视为31个字符,就像Google的文字对语音API的文本一样。
这应该阻止您在使用Google的文本对语音API时看到此错误:
INVALID_ARGUMENT: 5000 characters limit exceeded.通过添加选项breakParagraphsAboveHardLimit: true您允许脚本通过删除<p>并用<break strength="x-strong" /> for aws或<break strength="x-weak" /> for </p>来分解大段落。这会导致相同的暂停。这允许图书馆正确拆分大段落。
在使用Google的文本对语音API时,使用此选项将导致您的用法再增加20个字符。
如果您使用大段落,并且不使用此选项,那么您可能会遇到诸如SSML tag appeared to be too long 。
当您的SSML长度超过hardLimit时,建议使用此选项。
new SSMLSplit ( {
synthesizer : 'aws' ,
softLimit : 2000 ,
hardLimit : 3000 , // AWS Polly limitation
breakParagraphsAboveHardLimit : true , // optional, but recommended when you have large <p>'s
} ) new SSMLSplit ( {
synthesizer : 'google' ,
softLimit : 4000 ,
hardLimit : 5000 , // Google Text to Speech API limitation
breakParagraphsAboveHardLimit : true , // optional, but recommended when you have large <p>'s
} ) @oleglegun库的Polly-SSML-SPLIT已经正确处理了AWS Polly的SSML分裂,但无法正常工作以使Google的文本进行语音。因此,我只是修改了包裹以满足我的需求。
polly-ssml-split相比,变化:synthesizer选项以根据完整的SSML标签计数字符,而不仅仅是随附的文本字符。如果您使用Google的文本到语音API,则需要。.configure方法,然后使用类构造方法将其用于IT。breakParagraphsAboveHardLimit选项,通过删除<p>并用<break strength="x-strong" /> for aws或<break strength="x-weak" />为Google替换< / </p> >,以分解大段落。这会导致相同的暂停。这允许库正确拆分段落,并将文本较少的批次发送给语音API。任何贡献都将不胜感激!请阅读我们有关如何贡献的贡献。
开发新功能或修复错误时,请使用测试驱动的方法。
发展:
$ npm install
$ npm run dev在文件更改上运行测试:
$ npm test:watch将打字稿构建到JavaScript:
$ npm run build运行所有测试:
$ npm test