• last update at 18.10.2006, any questions mailto:wtwsoft@yandex.ru, ICQ: 225-410-492

  • English language version of this page

    SAPI DLL Open Source for easy Speech API access[GNU GPL]
    (copyleft) Denis Kirin http://sourceforge.net/projects/sapidll

    SAPI_DLL создана для упрощения доступа к Speech API интерфейсу и синтезаторам.


    скачать SAPI_DLL v1.2 + исходный код + примеры вызова
    скачать SAPIDLL v2.0 (beta) + исходный код
    скачать SAPIDLL v2.1 (beta) + исходный код
    C# call demo

    23.10.2006 v2.0 beta release - SAPI 4 and SAPI 5 + SAPI Events

    Для того что бы научить Ваше приложение "разговаривать", достаточно вызывать просты процедуры из SAPI_DLL.

    Я отдаю исходный код, поэтому научивший писать простые "говорящие" программы при помощи SAPI_DLL, Вы сможете заглянуть ей внутрь и разобратся как устроено SpeechAPI глубже, но уже имея опыт работы с ним.

    Использование SAPI DLL.

    Содержание :

    1. Введение.

    2. Условия распространения и гарантии.

    3. Описание некоторых распространяемых файлов.

    4. Перечень процедур и функций предоставляемых SAPI_DLL.DLL

    5. Процедуры и функции добавленые в версии 1.2

    1. Введение.

    Для упрощения написания синтезаторов речи и использующих их программ корпорация Microsoft предлагает воспользоваться TTS ( Text-To-Speech )"технологией" и Speech API. Несомненно что это очень удобно и решает множество проблем, однако есть задачи, при решение которых возникают сложно взаимодействия с COM интерфейсами, не говоря уже о сложности самих COM.

    SAPI_DLL я написал для тех кто не жалает вникать в подробности SAPI, а также для тех кто совсем недавно освоили программирование и пока еще не овладел "технологией" COM программирования.

    2. Условия распространения.

    Распространяется абсолютно свободно и бесплатно (FREEWARE), как сама SAPI_DLL.DLL так и ее исходный код. Вы можете вносить изменения в код DLL и распространять ее, преследуя любые цели, с тем условием что сотрете ВСЕ (c) автора.

    SAPI_DLL.DLL не реализует каких либо прямых обращений к файловой системе и работает

    непосредственно с Speech API интерфейсом, что гарантирует безопасность ее использование, разумеется это имеет силу только для оригинальной, авторской версии SAPI_DLL.DLL представленной на сайте http://wtwsoft.narod.ru

    3. Описание поставляемых файлов.

    SAPI_DLL.DLL - непосредственно сама библиотека, она может распространятся отдельно, независимо от других поставляемых файлов или вместес вашими программными продуктами. Возможно переименование, и перекомпиляция библиотеки, при этом ссылки на автора следует убрать.

    SAPI_Dll_Source - папка, содержит исходные коды модулей необходимых для компиляции SAPI_DLL.DLL. Для компиляции рекомендую использовать Delphi 5 или Delphi 7, однако я несталкивался с проблемами компиляции другими версиями Delphi для Win32 платформ.

    Не забывайте о удобном консольном компиляторе dcc32.exe он поставляется в комплекте Delphi и позволяет работать из командной строки.

    SAPI_Dll_Source\SAPIINTERFACE.PAS - исходный код интерфейсного модуля для работы с SAPI_DLL.DLL. Вы можете использовать его в своих программах на Delphi для обращения к процедурам SAPI_DLL.DLL. Как это сделать показано в примере находящемся в папке Call_Demo.

    4. Перечень процедур и функций экспортируемых SAPI_DLL.DLL.

    function CreateSpeech:HResult;stdcall;external 'SAPI_DLL.DLL';

    Реализует проверку работоспособности SAPI и если это так инициализирует этот COM интерфейс. Вы должны вызвать эту функцию первой, перед началом работы с остальными процедурами и функциями экспортируемыми SAPI_DLL.DLL. Вызов этой функции можно было бы сделать автоматическим, при загрузке SAPI_DLL.DLL, однако я сознательно предоставляю вам возможность инициализировать SAPI в любой момент работы вашей программы.

    В случае успешной инициализации Speech API функция возвращает ноль.

    procedure PSpeak(var PText : longword);

    Проговаривает ASSCIZ строку находящеюся по адресу PText.

    procedure Speak( Text : string);stdcall; - Проговаривает строку Text.

    Удобно для вызова из Delphi программ, для других компиляторов рекомендую использовать PSpeak.

    procedure SelectEngine(EngineName: String);stdcall;

    выбор Engina (синтезатора речи)

    Указывает какой именно синтезатор речи необходимо задействовать для синтеза речи. Параметр EngineName должен содержать одно из имен доступных синтезаторов речи. Имена всех доступных синтезаторов можно получить вызвав функцией GetEngines. Либо, вы должны быть уверены в том что указываете правильное(существующее) имя синтезатора.

    function GetEngineInfo(EngineName: String; var Info: TSpeechEngineInfo):byte;stdcall;

    Возвращает сведения о синтезаторе имя которого указано в параметре EngineName.Сведения возвращаются в записе Info, ниже приводится описание ее полей, должен предупредить что назначение этой записи информативное, поэтому содержимое ее полей зависит от производителей синтезатора и часто бесполезны.

    Назначение некоторых полей записи Info для вызова GetEngineInfo, тип записи смотрите в файле SAPI_Dll_Source\SAPIINTERFACE.PAS

    Name: String; название синтезатора
    Language: String; язык
    Manufacturer: String; метка производителя
    Speaker: String; имя диктора (не путать с названием синтезатора)
    MaxPitch: Word; предельное значение тембра
    MinPitch: Word; минимальное значение тембра
    MaxSpeed: Longword; предельное значение скорости речи
    MinSpeed: Longword; минимальное значение скорости речи
    MaxVolume: Longword; предельное значение громкости
    MinVolume: Longword; минимальное значение громкости

    function GetEngines:TStrings; возвращает список доступных синтезаторов. Пример работы со списком на Delphi смотрите в Call_Demo/unit1.pas. Должен предупредить что для других компиляторов эта функция наврятли приемлема из за отсутствия типа TStrings.

    function GetPitch: Word; возвращает тембр речи выбранного ( SelectEngine ) синтезатора.

    function GetSpeed: Dword; возвращает скорость речи выбранного синтезатора.

    function GetVolume: Dword;stdcall; возвращает громкость речи выбранного синтезатора.

    procedure SetPitch(const Value: Word);stdcall;

    procedure SetSpeed(const Value: Dword);stdcall;

    procedure SetVolume(const Value: Dword);stdcall;

    Соответственно устанавливают уровни - тембра, скорости и громкости для выбранного синтезатора.

    Внимание - перед вызовом этих процедур, обратитесь к GetEngineInfo для того что бы узнать предельно допустимые значения(Min..Max) тембра, скорости, громкости. Либо воспользуйтесь приведенными ниже функциями :

    function GetMaxPitch: Word;stdcall;
    function GetMaxSpeed: Dword;stdcall;
    function GetMaxVolume: Dword;stdcall;
    function GetMinPitch: Word;stdcall;
    function GetMinSpeed: Dword;stdcall;
    function GetMinVolume: Dword;stdcall;

    эта группа функций возвращает соответственно допустимые максимальные и минимальные значения тембра, скорости и громкости речи для выбранного синтезатора.

    Procedure Pause;stdcall; реализует паузу в синтеза речи. Синтез (чтение) может быть возобновлено вызовом процедуры Resume.

    Procedure Pause;stdcall; Возобновляет чтение после вызова Pause.

    Procedure Stop;stdcall; прекращает чтение, очищает очередь синтеза.

    procedure DestroySpeech; завешает работу с SAPI, должна быть вызвана перед выгрузкой SAPI_DLL.DLL. После ее выполнения все экспортируемые процедуры и функции кроме CreateSpeech более недоступны, до следующего вызова CreateSpeech, SelectEngine. DestroySpeech желательно вызывать перед завершением работы вашей программы, когда синтез речи больше не нужен, либо для высвобождения оперативной памяти.

    5. Процедуры и функции добавленые в версии 1.2

    function GetEnginesCount:word;stdcall; Узнать количество дикторов установленных на компьютере.

    procedure PSpeak( Text: LPCTSTR );stdcall; Произнести текст. Обратите внимание на тип параметра. Процедура сделана для совместимости модуля с тамики языками программирования как C/C++ и ASSEMBLER

    procedure PSelectEngine(EngineName: LPCTSTR);stdcall; Выбрать диктора. То же самое что и SelectEngine но другой типам параметра.

    procedure PSelectEngineNumber(EngineNumber: word);stdcall; Новая процедура. Выбрать диктора по его порядковому номеру. Используйте совместно с GetEnginesCount.

    function PGetEngines( number : word):LPCTSTR;stdcall; Возвращает имя диктора с порядковым номером number. Диктор может быть не выбран до вызова этой процедуры. Используйте GetEnginesCount, а после PGetEngines(0..GetEnginesCount-1) что бы узнать имена всех дикторов установленных на вашем компьютере.

    Пожалуйста контактируйте со мной.

    Дерзайте и удачи Вам в творчестве !
    Have a nice Windows.

    Сайт создан в системе uCoz