polly-ru-ssml

Convert russian text, that contains english words into a valid SSML for AWS Polly TTS, thus enhancing synthesized audio pronunciation for english words within the russian language context.

Usage no npm install needed!

<script type="module">
  import pollyRuSsml from 'https://cdn.skypack.dev/polly-ru-ssml';
</script>

README

Polly Russian SSML Enhancer

Build Status Coverage Status code style: prettier License: MIT

Synopsis

Convert russian text, that contains english words into a valid SSML for AWS Polly TTS, thus enhancing synthesized audio pronunciation for english words within the russian language context.

Motivation

By default, russian speakers in AWS Polly TTS service (Maxim, Tatiana) are not particularly good at pronouncing english words within the russian language context, so this library fixes it by explicitly wrapping each english word with <lang xml:lang="en-US">word</lang> tags.

Installation

npm install polly-ru-ssml

Code Example

Basic usage

const pollyRuSSML = require('polly-ru-ssml')

// Method ssml() returns string with wrapped english words
pollyRuSSML.ssml("русский english")
// русский <lang xml:lang="en-US">english</lang>

// Method speak() additionally wraps result with <speak/> tags
pollyRuSSML.speak("русский english")
// <speak>русский <lang xml:lang="en-US">english</lang></speak>

Configuration

By default configuration is not necessary, but setting one can greatly improve intelligibility of english speech for russian users. Additionally, I found that the default volume for synthesized speech is quite low for using with Amazon Alexa assistant.

const pollyRuSSML = require('polly-ru-ssml')

// 1. Global configuration for all further usages
pollyRuSSML.configure({
    country: 'uk',
    globalVolume: 'loud',
    volume: 'x-loud',
    rate: 'slow',
})

pollyRuSSML.speak('русский english')
/**
 * <speak>
 *  <prosody volume="loud">
 *      русский
 *      <lang xml:lang="en-UK">
 *          <prosody volume="x-loud">
 *              <prosody rate="slow">
 *                  english
 *              </prosody>
 *          </prosody>
 *      </lang>
 *  </prosody>
 * </speak>
 */

// 2. Local configuration only for the current usage (overrides global configuration)
pollyRuSSML.speak('русский english', {
    globalVolume: 'x-loud',
    rate: 'x-slow',
})
/**
 * <speak>
 *  <prosody volume="x-loud">
 *      русский
 *      <lang xml:lang="en-US">
 *          <prosody rate="x-slow">
 *              english
 *          </prosody>
 *      </lang>
 *  </prosody>
 * </speak>
 */
Name Type Default Description
[country] string "us" Country code for <lang/> tags. Valid values: us, uk.
[rate] string Speech rate for latin characters. Valid values: x-slow, slow, medium, fast, x-fast.
[globalVolume] string Global audio volume. Valid values: x-soft, soft, medium, loud, x-loud.
[volume] string Local audio volume for latin characters. Valid values: x-soft, soft, medium, loud, x-loud.

API documentation

Tests

npm test

Contributors

Any contributions are very welcome.

License

MIT.

Changelog

[0.1.5] - 2018-04-23

  • Hide private methods from user API.

[0.1.4] - 2018-04-03

  • Add more tests.

[0.1.3] - 2018-04-03

  • Add API reference.

[0.1.2] - 2018-04-03

  • Add Readme.

[0.1.1] - 2018-04-03

  • Add default configuration option country if it is absent in local configuration.

[0.1.0] - 2018-04-03

  • Initial release.