將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