Синтезирование речи из приложения Windows 8.1 через Windows.Media.SpeechSynthesis

(По материалам Microsoft Developer Network)
Дата публикации:25.07.2013
Поделиться в Twitter Поделиться в F******k Поделиться в VKontakte Поделиться в Telegram Поделиться в Mastodon

В Windows 8.1 Preview был введён новый API - Windows.Media.SpeechSynthesis, предназначенный для преобразования текста в речь. По задумке Microsoft, он может использоваться для создания голосовых подсказок пользователю, советов по навигации или любых других задач, требующих чтения текста вслух.

На момент версии Windows 8.1 Preview, данный API предоставляет следующие возможности:

  • Конфигурирование пола, голоса и языка;
  • Генерация речевого вывода из простой текстовой строки с использованием стандартных характеристик и свойств текущего голоса;
  • Генерация речевого вывода из строки, содержащей SSML для настройки характеристик голоса: произношение, громкость, высота, скорость, акцент и так далее;
  • Чтение и запись аудиоданных, сгенерированных речевым движком из потока произвольного доступа.

Следующий пример демонстрирует, как приложение использует объект SpeechSynthesizer для создания звукового потока, а потом генерирует синтезированную речь на основе простой текстовой строки.

На языке JavaScript:

// Объект для управления и воспроизведения аудио.
var audio = new Audio();
// Объект для управления речевым движком (голосом).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Генерация аудиопотока на основе простого текста.
synth.synthesizeTextToStreamAsync("Hello World!").then(function (markersStream) {
	// Преобразование потока в блок двоичных данных (BLOB).
	var blob = MSApp.createBlobFromRandomAccessStream(markersStream.ContentType, markersStream);
	// Передать BLOB в объект audio.
	audio.src = URL.createObjectURL(blob, { oneTimeOnly: true });
	audio.play();
});

На языке C#:

// Медиа-объект для управления и воспроизведения аудио.
MediaElement mediaElement = this.media;
// Объект для управления речевым движком (голосом).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Генерация аудиопотока на основе простого текста.
SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Hello World!");
// Передать поток в медиа-объект.
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();

Далее будет показано, как приложение использует объект SpeechSynthesizer для создания звукового потока, а потом генерирует речь на основе текстовой строки с SSML.

На языке JavaScript:

// Строка для произнесения с SSML-директивами.
var Ssml = "<speak version='1.0' " +
	"xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" +
	"Hello <prosody contour='(0%,+80Hz) (10%,+80%) (40%,+80Hz)'>World!</prosody> " +
	"<break time='500ms' />" +
	"Goodbye <prosody rate='slow' contour='(0%,+20Hz) (10%,+30%) (40%,+10Hz)'>World.</prosody>" +
	"</speak>";
// Объект для управления и воспроизведения аудио.
var audio = new Audio();
// Объект для управления речевым движком (голосом).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Генерация аудиопотока на основе SSML.
synth.synthesizeSsmlToStreamAsync(Ssml).then(function(synthesisStream){
	// Преобразование потока в блок двоичных данных (BLOB).
	var blob = MSApp.createBlobFromRandomAccessStream(synthesisStream.ContentType, synthesisStream);
	// Передать BLOB в объект audio.
	audio.src = URL.createObjectURL(blob, { oneTimeOnly: true });
	audio.play();
});

На языке C#:

// Строка для произнесения с SSML-директивами.
string Ssml =
	@"<speak version='1.0' " +
	"xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" +
	"Hello <prosody contour='(0%,+80Hz) (10%,+80%) (40%,+80Hz)'>World!</prosody> " +
	"<break time='500ms' />" +
	"Goodbye <prosody rate='slow' contour='(0%,+20Hz) (10%,+30%) (40%,+10Hz)'>World.</prosody>" +
	"<speak>";
// Медиа-объект для управления и воспроизведения аудио.
MediaElement mediaElement = this.media;
// Объект для управления речевым движком (голосом).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Генерация аудиопотока на основе SSML.
SpeechSynthesisStream stream = await synth.synthesizeSsmlToStreamAsync(Ssml);
// Передать поток в медиа-объект.
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();

Получить больше примеров по работе с синтезом речи через API Windows.Media.SpeechSynthesis в Windows 8.1 на языках C++, C# и JavaScript можно на соответствующей странице MSDN.



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024