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

(По материалам Microsoft Developer Network)
Дата публикации:25.07.2013
Twitter Facebook Vkontakte

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

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

Следующий пример демонстрирует, как приложение использует объект 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-2017
Rambler's Top100