Divide las cadenas SSML en lotes AWS Polly, el texto de Google a la API del habla puede consumir.
hardLimit .. , ; o espacio. Se puede configurar.Basado en Polly-SSML-Split por @olegleGun
Instale el paquete con:
npm install ssml-split --save Importe el paquete y establezca las opciones. Use el método .split() para dividir su cadena SSML. Puede modificar el softLimit para ver qué funciona para usted. Le sugiero que mantenga el hardLimit en el límite de limitación de la API respectiva:
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>' ) ;| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
synthesizer | string | aws | Establezca en qué sintetizador está utilizando. Útil para cuando usa breakParagraphsAboveHardLimit . Permite que la biblioteca determine la longitud de ruptura correcta, ya que eso difiere por servicio de sintetizador. |
softLimit | number | 1500 | La cantidad de caracteres que el guión comenzará a intentar romper su SSML en varias partes. Puede ajustar este número para ver qué funciona para usted. |
hardLimit | number | 3000 | La cantidad de caracteres que el script debe permanecer por debajo de un tamaño máximo por parte SSML. Si algún tamaño de lote va por encima de esto, el script se equivocará. Este límite duro es el límite de caracteres de la AWS o la API de Google que está utilizando. |
breakParagraphsAboveHardLimit | boolean | false | Establezca en true para permitir que el script rompa párrafos grandes eliminando el <p> y reemplazando el </p> con A <break strength="x-strong" /> (para aws ) o <break strength="x-weak" /> (para google ). Que resulta en la misma pausa. Requiere synthesizer de opciones para configurar. |
extraSplitChars | string | ,;. | Caracteres que se pueden usar como marcadores divididos para texto sin formato. |
Al usar el synthesizer: 'google' la biblioteca incluirá los caracteres de etiquetas SSML para determinar el mejor momento dividido posible. Esto hace que la biblioteca también funcione con el texto de Google a la API del habla.
Por ejemplo: <speak><p>some text</p></speak>
El comportamiento predeterminado contaría eso como 9 caracteres, lo cual está bien para AWS Polly, pero no para la API de texto a voz de Google.
Con synthesizer: 'google' se contará como 31 caracteres, al igual que el texto de Google a la API del habla lo cuenta.
Esto debería evitar que vea este error al usar el texto de Google a la API del habla:
INVALID_ARGUMENT: 5000 characters limit exceeded. Al agregar la opción, breakParagraphsAboveHardLimit: true permite que el script rompa los párrafos grandes eliminando el <p> y reemplazando el </p> con A <break strength="x-strong" /> para AWS o <break strength="x-weak" /> para google. Que resulta en la misma pausa. Esto permite que la biblioteca divida correctamente los párrafos grandes.
El uso de esta opción dará como resultado 20 caracteres más, por párrafo, a su uso cuando use la API de texto a Speech de Google.
Si trabaja con párrafos grandes y no usa esta opción, puede encontrarse con errores como SSML tag appeared to be too long .
El uso de esta opción se recomienda cuando tiene una longitud SSML que va por encima del 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
} ) La biblioteca Polly-SSML de @oleglegun ya maneja la división de SSML correctamente para Aws Polly, pero no estaba funcionando correctamente para el texto de Google al habla. Así que acabo de modificar el paquete para satisfacer mis necesidades.
polly-ssml-split :synthesizer para contar caracteres basados en la etiqueta SSML completa y no solo en los caracteres de texto incluidos. Lo que se requiere si trabaja con el texto de Google a la API del habla..configure y use el método de constructor de clase para él.breakParagraphsAboveHardLimit para romper los párrafos grandes eliminando <p> y reemplazando el </p> con A <break strength="x-strong" /> para AWS o <break strength="x-weak" /> para Google. Que resulta en la misma pausa. Esto permite que la biblioteca divida correctamente el párrafo y envíe menos lotes al texto a las API del habla.¡Se agradece cualquier contribución! Lea nuestro contribuyente.md sobre cómo contribuir.
Use un enfoque basado en pruebas al desarrollar nuevas funciones o arreglar errores.
Desarrollar:
$ npm install
$ npm run devEjecutar pruebas en el cambio de archivo:
$ npm test:watchBuild TypeScript a JavaScript:
$ npm run buildEjecute todas las pruebas:
$ npm test