|
На примере простого консольного приложения ниже будет описан способ использования синтеза речи по тексту для MS SAPI 5.x. В примере приведен код для SAPI 5.1, но принципиальных отличий в использовании SAPI 5.3 (MS Windows Vista) и SAPI 5.4 (MS Windows 7) нет. Проект в среде разработки от MicrosoftСначала рассмотрим последовательность действий , которая рекомендована в SAPI SDK для компиляции примера в среде Microsoft Visual Studio. Для простоты возьмем за основу консольное приложение Windows. В среде разработки Visual Studio необходимо воспользоваться application wizard, чтобы создать Win32 console application. В ответ на запрос Мастера надо указать "Hello, world" В качестве шаблона. После создания проекта необходимо открыть файл STDAfx.h и после строки "#include но до строки, содержащей #endif поместить следующий код : #define _ATL_APARTMENT_THREADED #include Эти строки подключают дополнительные файлы, которые необходимы для работы SAPI. Затем в настройках проекта следует добавить путь к файлам SAPI.h и SAPI.lib. Найти эти файлы можно в соответствующих подкаталогах каталога, куда была выполнена установка SAPI SDK (по умолчанию это C:\Program Files\Microsoft Speech SDK 5.x, где x – номер субверсии SAPI). Необходимо открыть диалог настроек проекта, выбрав пункт меню Project->Settings. В диалоге надо щелкнуть по вкладке C/C++ и выбрать элемент Preprocessor из выпадающего списка Category. Затем необходимо ввести следующий текст в поле "Additional include directories" (пример для SAPI 5.1):: C:\Program Files\Microsoft Speech SDK 5.1\Include. Чтобы установить путь к SAPI.lib , нужно в том же самом диалоге настроек проекта выбрать вкладку Link, на которой выбрать элемент Input из выпадающего списка Category. Затем следует добавить такой путь в поле "Additional library path" (пример для SAPI 5.1): C:\Program Files\Microsoft Speech SDK 5.1\Lib\i386. Кроме того, необходимо добавить "sapi.lib" в строку "Object/library modules" . Обратите внимание, что имена файлов должны быть отделены пробелами. Исходный код примераSAPI – это приложение, основанное на COM, поэтому поддержка COM должна быть инициализирована перед использованием SAPI и в течение всего времени, пока SAPI является активным. Инициализация COM выполняется через вызов функции CoInitialize(NULL), а обратная операция – при помощи CoUninitialize(). После того как была инициализированна поддержка COM, нужно создать "голос", то есть реализацию интерфейса ISpVoice . Голос – это простой COM-объект, создаваемый при помощи стандартного вызова CoCreateInstance(). Однако в процессе его инициализации SAPI автоматически назначает для ряда параметров значения по умолчанию. Эти значения подобраны так, чтобы голос можно было использовать непосредственно после инициализации. Значения по умолчанию берутся из свойств элемента Речь (Speech) в Панели управления (Control Panel). Все значения по умолчанию могут быть изменены либо программно, либо в элементе Речь (Speech) Панели управления (Control Panel). Чтобы озвучить текст достаточно вызвать метод Speak(), который принимает три параметра: указатель на строку озвучиваемого текста (Unicode-строка), набор флагов, управляющих процессом озвучивания, и указатель на long, по которому будет размещено возвращаемое значение номера потока (в примере это значение не используется, поэтому в параметре передается NULL). В приводимом примере метод Speak() вызывается дважды, чтобы показать возможность использования речевой разметки для управления параметрами голоса (на это указывает флаг SPF_IS_XML, помещенный в качестве второго параметра). Теги речевой разметки представляют собой теги XML; их можно помещать непосредственно в озвучиваемый текст и они будут оказывать влияние на чтение текста, который идет вслед за тегами. После того как голос был использован и больше не нужен, необходимо его освободить, то есть вызвать метод Release(). Теперь воплотим все вышеописанное в исходный код.. #include Другие компиляторыЕсли для компиляции примера используется другой компилятор, не совместимой с форматом бинарных файлов coff (например, компилятор Borland C++ или MinGW), то нельзя будет использовать библиотеку sapi.lib из MSAPI SDK. В этой библиотеке хранятся глобальные идентификаторы COM-объектов и их интерфейсов. Чтобы восполнить отсутствие sapi.lib, эти идентификаторы придется определить вручную, поместив соответствующие определения в исходный код примера (перед функцией main()). С учетом этой особенности код примера примет вид: #include Другие способы управления голосомУправлять настройками речевого синтеза можно не только при помощи тегов речевой разметки. Ниже приведены некоторые методы интерфейса ISpVoice (полный перечень методов можно найти в соответствующем разделе SAPI SDK):
|
||||||||||||||||||||
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети