Как преобразовать текст в речь (синтез речи) в Кордове

Синтез речи — компьютерная симуляция человеческой речи. Он используется для преобразования письменной информации в слуховую информацию, где это более удобно, особенно для мобильных приложений, таких как электронная почта с поддержкой голосовой связи и унифицированные сообщения. Как разработчик, использующий Javascript для создания гибридных приложений, мы предполагаем, что вы знаете API синтеза речи, доступный в большинстве веб-браузеров. Использовать этот API-интерфейс действительно просто, однако он недоступен в приложении Cordova, поэтому вам нужно прибегнуть к нативному API устройства через плагин Cordova.

В этой статье вы узнаете, как легко преобразовать текст в речь в вашем проекте Cordova.

Требования

Чтобы использовать собственный API-интерфейс Speech Synthesis для устройства, мы собираемся использовать для него плагин. Кордова плагин TTS это плагин, написанный @vilic это позволяет вам использовать собственный API синтеза речи устройства через Javascript. Этот плагин обеспечивает поддержку следующих платформ:

  • iOS 7+
  • Windows Phone 8
  • Android 4.0.3+ (уровень API 15+)

Установите плагин в своем проекте, выполнив следующую команду в терминале:

cordova plugin add cordova-plugin-tts

После установки вы сможете использовать объект TTS в окне. Для дополнительной информации посетите официальный репозиторий Github здесь. Этот плагин использует класс AVSpeechSynthesizer в iOS, класс TextToSpeech в Android и класс синтеза речи Windows Phone в Windows Phone.

Текст в речь

Чтобы преобразовать текст в голос с помощью Javascript, используйте метод speak объекта TTS. Этот метод ожидает в качестве первого параметра объект с максимум 3 свойствами:

Имя свойстваТипОписание
textстрокаОпределяет текст, который будет произноситься.
localeстрока4-символьный код, который определяет язык, который должен использоваться для синтеза текста.
rateтеркаскорость речи объекта SpeechSynthesizer, от 0,1 до 1

И может использоваться как в следующем примере:

TTS.speak({
text: 'Good morning, how are you?',
locale: 'en-US',
rate: 1
}, function () {
console.log('Text succesfully spoken');
}, function (reason) {
console.log(reason);
});

Стоит сказать, что если вы хотите синтезировать текст при запуске приложения, вам нужно обернуть свой код внутри deviceready событие:

document.addEventListener('deviceready', function () {
TTS.speak('Welcome to my awesome app', function () {
console.log('Ready !');
}, function (reason) {
console.log(reason);
});
});

Почему нет метода остановки?

В техническом плане с нативным API вы можете остановить любой объект речевого высказывания. Тем не менее, с этим плагином нет способа остановить синтез речи (по крайней мере, не традиционным способом), если он уже запущен и причина очень проста (нет, плагин не плохой или неполный).

Поскольку мы используем Cordova, мы ограничены в отправке и получении некоторых данных, мы можем взаимодействовать с нативным кодом и Javascript через обратные вызовы, но мы не можем взаимодействовать динамически с одним родным экземпляром класса плагина потому что выполнение каждого метода Javascript создает новый экземпляр нативного класса плагина.

Смущенный синтез речи

Каждый раз, когда вы выполняете какое-то действие в этом случае startCordova создает, например, класс TTS в Java, который расширяет CordovaPlugin один раз и сохраняет объект TTS в локальной переменной в классе. Из сохраненного объекта TTS вы можете выполнить метод stop, и синтез речи должен остановиться как запланировано. Но, если вы выполните другой метод из Javascript в этом случае stopзатем будет создан новый экземпляр класса TTS в Java, который расширяет CordovaPlugin (это означает, что мы больше не имеем доступа к одному и тому же объекту TTS из метода start). То же самое происходит с iOS и Windows.

Хотя в плагине нет метода остановки, вы можете использовать небольшую хитрость для его достижения. Произнесите пустую строку, и синтез речи прекратится! Вы можете расширить плагин и создать свой собственный метод остановки:

// Extend the TTS object with the new stop method.
TTS["stop"] = function(){
TTS.speak({text: ''});
};
// Speak some text
TTS.speak({
text: 'Hola buenos días. Hoy para el desayuno hay pan con mantequilla.',
locale: 'es-ES',
rate: 0.75
}, function () {
console.log('success');
}, function (reason) {
console.log(reason);
});
// Stop after 3 seconds
setTimeout(function() {
TTS.stop();
console.log("Speech synthesis stopped");
}, 3000);
Ссылка на основную публикацию
Adblock
detector