Divide strings ssml em lotes aws Polly e a API de texto do Google para a fala pode consumir.
hardLimit .. , ; ou espaço. Pode ser configurado.Baseado em Polly-SSML-Split por @oleglegun
Instale o pacote com:
npm install ssml-split --save Importe o pacote e defina as opções. Use o método .split() para dividir sua sequência SSML. Você pode ajustar o softLimit para ver o que funciona para você. Eu sugiro que você mantenha o hardLimit no limite de limitação da respectiva 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>' ) ;| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
synthesizer | string | aws | Defina para qual sintetizador você está usando. Útil para quando você usa breakParagraphsAboveHardLimit . Ele permite que a biblioteca determine o comprimento correto da interrupção, pois isso difere pelo serviço de sintetizador. |
softLimit | number | 1500 | A quantidade de caracteres o script começará a tentar quebrar seu SSML em várias partes. Você pode ajustar esse número para ver o que funciona para você. |
hardLimit | number | 3000 | A quantidade de caracteres o script deve ficar abaixo para obter o tamanho máximo por parte do SSML. Se algum tamanho de lote ultrapassar isso, o script errará. Esse limite rígido é o limite de caracteres da AWS ou da API do Google que você está usando. |
breakParagraphsAboveHardLimit | boolean | false | Defina como true para permitir que o script divulgue grandes parágrafos, removendo o <p> e substituindo o </p> por um <break strength="x-strong" /> (para aws ) ou <break strength="x-weak" /> (para o google ). O que resulta na mesma pausa. Requer que synthesizer de opções seja definido. |
extraSplitChars | string | ,;. | Caracteres que podem ser usados como marcadores divididos para texto simples. |
Ao usar o synthesizer: 'google' a biblioteca incluirá a contagem de caracteres SSML Tags para determinar o melhor momento possível de divisão. Isso faz com que a biblioteca também funcione com a API de texto do Google.
Por exemplo: <speak><p>some text</p></speak>
O comportamento padrão contaria isso como 9 caracteres, o que é bom para a AWS Polly, mas não para a API de texto do Google.
Com synthesizer: 'google' ele contará com 31 caracteres, assim como o texto do Google para a API de fala a conta.
Isso deve impedir que você veja esse erro ao usar a API de texto do Google para a fala:
INVALID_ARGUMENT: 5000 characters limit exceeded. Ao adicionar a opção breakParagraphsAboveHardLimit: true você permite que o script quebre grandes parágrafos removendo o <p> e substituindo o </p> por um <break strength="x-strong" /> <break strength="x-weak" /> quebra O que resulta na mesma pausa. Isso permite que a biblioteca divida os parágrafos grandes corretamente.
O uso dessa opção resultará em mais 20 caracteres, por parágrafo, para o seu uso ao usar a API de texto do Google para falar.
Se você trabalha com parágrafos grandes e não usa essa opção, poderá gravar erros como SSML tag appeared to be too long .
O uso desta opção é recomendado quando você tem o comprimento SSML que vai acima do 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
} ) A biblioteca Polly-SSML-Split by @oleglegun já lida com a divisão do SSML corretamente para a AWS Polly, mas não estava funcionando corretamente para o texto do Google no discurso. Então, acabei de modificar o pacote para atender às minhas necessidades.
polly-ssml-split :synthesizer para contar caracteres com base na tag SSML completa e não apenas nos caracteres de texto incluídos. O que é necessário se você trabalha com a API de texto do Google..configure e use o método do construtor de classe para ele.breakParagraphsAboveHardLimit Opções para interromper grandes parágrafos, removendo o <p> e substituindo o </p> por um <break strength="x-strong" /> para aws ou <break strength="x-weak" /> para o Google. O que resulta na mesma pausa. Isso permite que a biblioteca divida corretamente o parágrafo e envie menos lotes para o texto para as APIs de fala.Qualquer contribuição é apreciada! Por favor, leia nosso contribuindo.md sobre como contribuir.
Use uma abordagem orientada a testes ao desenvolver novos recursos ou corrigir bugs.
Desenvolver:
$ npm install
$ npm run devExecute testes em alteração de arquivo:
$ npm test:watchConstrua o TypeScript para JavaScript:
$ npm run buildExecute todos os testes:
$ npm test