Программа TTS C ++ может работать только на развивающемся ПК - PullRequest
0 голосов
/ 26 августа 2011

Я следовал инструкциям, приведенным в SAPI 5.1 «Учебное пособие по преобразованию текста в речь», скомпилировал пример кода, приведенный в учебном пособии (Инструкции и пример кода аналогичны приведенным в SAPI 5.3 TTS Tutorial! И SAPI 5.4 TTS Tutorial !).Скомпилированная программа отлично работает на ПК с XP, на котором она была собрана, но не будет работать на других компьютерах с XP и Win 7.На других 2 ПК не установлен Speech SDK.Но демонстрационная программа SAPI 5.1 TTSApp и функция преобразования текста в речь MS Excel 2003 очень хорошо работают на этих двух ПК.

Почему обучающая программа может работать только на ПК разработчика, а две другие программы могут работать на всех ПК?

На ПК разработчика установлены XP sp3, Visual Studio 2008 и SAPI 5.1.Когда я строю проект, я выбираю предварительно скомпилированный заголовок.На шаге 1 ниже в файле stdafx.h отсутствует «#endif», поэтому эти строки вставляются после «#include».

Сообщение об ошибке с ПК с ОС XP: это приложение не удалось запустить, поскольку приложениеконфигурация неверна.Повторная установка приложения может решить эту проблему.

Сообщение об ошибке от ПК с Win7: приложение не удалось запустить, поскольку его параллельная конфигурация неверна.Пожалуйста, смотрите журнал событий приложения или используйте инструмент командной строки sxstrace.exe для получения более подробной информации

Ниже приведено руководство.

Microsoft Speech SDK SAPI 5.1


Учебное пособие по преобразованию текста в речь Это учебное пособие охватывает очень простой пример преобразования текста в речь (TTS).Консольное приложение является одной из самых простых демонстраций речи.Это эквивалент "Hello World" для TTS.Эквивалентный пример для приложения Windows, использующего графический интерфейс (и насос событий), доступен в разделе Использование событий с TTS.Образец построен от самой простой (хотя и нефункциональной) структуры COM до высказывания предложения.Шаги предусмотрены для каждой новой функции.Пример даже выходит за рамки демонстрации использования тегов XML для изменения речи.Полный образец приложения находится внизу страницы.

Шаг 1: Настройка проекта Шаг 2: Инициализация COM Шаг 3: Настройка голоса Шаг 4: Говори!Шаг 5: Изменение речи

Шаг 1: Настройка проекта Несмотря на то, что можно написать приложение с нуля, проще начать с существующего проекта.В этом случае используйте мастер приложений Visual Studio для создания консольного приложения Win32.Выберите «Hello, world» в качестве примера, когда его спросят во время настройки мастера.После его генерации откройте файл STDAfx.h и вставьте следующий код после «#include», но перед оператором «#endif».Это устанавливает дополнительные зависимости, необходимые для SAPI.

#define _ATL_APARTMENT_THREADED

#include <atlbase.h>
//You may derive a class from CComModule and use it if you want to override something, 
//but do not change the name of _Module
extern CComModule _Module;
#include <atlcom.h>

Листинг 1 Далее добавьте пути к файлам SAPI.h и SAPI.lib.Указанные пути относятся к стандартной установке SAPI SDK.Если компилятор не может найти ни один файл, или если была выполнена нестандартная установка, используйте новый путь к файлам.Измените настройки проекта, чтобы отразить пути.Использование проекта-> Настройки.пункт меню, установите путь SAPI.h.Перейдите на вкладку C / C ++ и выберите препроцессор в раскрывающемся списке «Категория».Введите следующее в «Дополнительные каталоги включения»: C: \ Program Files \ Microsoft Speech SDK 5.1 \ Include.Чтобы задать путь SAPI.lib: 1. Выберите вкладку «Ссылка» в диалоговом окне «Те же параметры».2. Выберите Input из выпадающего списка Category.3. Добавьте следующий путь в «Дополнительный путь к библиотеке»: C: \ Program Files \ Microsoft Speech SDK 5.1 \ Lib \ i386.4. Также добавьте «sapi.lib» в строку «Объектные / библиотечные модули».Убедитесь, что имя разделено пробелом.

Шаг 2. Инициализация COM SAPIприложение на основе COM и COM должны быть инициализированы как перед использованием, так и во время активности SAPI. В большинстве случаев это на время жизни хост-приложения. Следующий код (из листинга 2) инициализирует COM. Конечно, приложение не выполняет ничего, кроме инициализации, но оно гарантирует, что COM успешно запущен.

#include <stdafx.h>
#include <sapi.h>

int main(int argc, char* argv[])
{
    if (FAILED(::CoInitialize(NULL)))
        return FALSE;

    ::CoUninitialize();
    return TRUE;
}

Листинг 2 Шаг 3: Настройка голоса После запуска COM следующим шагом будет создание голоса. Голос - это просто объект COM. Кроме того, SAPI использует интеллектуальные значения по умолчанию. Во время инициализации объекта SAPI автоматически присваивает большинство значений, чтобы объект можно было использовать сразу после этого. Это представляет собой важное улучшение по сравнению с более ранними версиями. Значения по умолчанию извлекаются из свойств речи в панели управления и включают такую ​​информацию, как голос (если в вашей системе доступно более одного) и язык (английский, японский и т. Д.). Хотя некоторые значения по умолчанию очевидны, другие - нет (скорость речи, высота тона и т. Д.). Тем не менее, все значения по умолчанию могут быть изменены либо программно, либо в свойствах речи в панели управления. Установка указателя pVoice в NULL не требуется, но полезна для проверки ошибок; это гарантирует, что недопустимый указатель не будет использоваться повторно, или как напоминание, что указатель уже был выделен или освобожден

#include <stdafx.h>
#include <sapi.h>

int main(int argc, char* argv[])
{
    ISpVoice * pVoice = NULL;

    if (FAILED(::CoInitialize(NULL)))
        return FALSE;

    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
    if( SUCCEEDED( hr ) )
    {
        pVoice->Release();
        pVoice = NULL;
    }

    ::CoUninitialize();
    return TRUE;
}

Листинг 3. Код, выделенный жирным шрифтом, представляет новый код для этого примера. Шаг 4: Говори! Фактическое произнесение фразы - это не менее простая задача: одна строка вызывает функцию Speak. Когда экземпляр голоса больше не нужен, вы можете отпустить объект.

#include <stdafx.h>
#include <sapi.h>

int main(int argc, char* argv[])
{
    ISpVoice * pVoice = NULL;

    if (FAILED(::CoInitialize(NULL)))
        return FALSE;

    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
    if( SUCCEEDED( hr ) )
    {
        hr = pVoice->Speak(L"Hello world", 0, NULL);
        pVoice->Release();
        pVoice = NULL;
    }

    ::CoUninitialize();
    return TRUE;
}

Листинг 4. Код, выделенный жирным шрифтом, представляет новый код для этого примера. Шаг 5: изменение речи Голоса могут быть изменены с использованием различных методов. Самый прямой способ - применять команды XML непосредственно к потоку. Команды описаны в XML-схеме. В этом случае относительная оценка 10 понизит высоту голоса.

#include <stdafx.h>
#include <sapi.h>

int main(int argc, char* argv[])
{
    ISpVoice * pVoice = NULL;

    if (FAILED(::CoInitialize(NULL)))
        return FALSE;

    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
    if( SUCCEEDED( hr ) )
    {
        hr = pVoice->Speak(L"Hello world", 0, NULL);

        // Change pitch
        hr = pVoice->Speak(L"This sounds normal <pitch middle = '-10'/> but the pitch drops half way through", SPF_IS_XML, NULL );
        pVoice->Release();
        pVoice = NULL;
    }
    ::CoUninitialize();
    return TRUE;
}

Листинг 5. Код, выделенный жирным шрифтом, представляет новый код для этого примера. Это полный пример кода.

1 Ответ

3 голосов
/ 26 августа 2011

Вы должны установить среду выполнения C ++, которая поставляется вместе с установщиком (повторный доступ).

VC ++ 2008 redist

VC ++ 2008 SP1 redist

Какой из них установить, зависит от пакета обновления VS - если SP1, то SP1, если не нет.

РЕДАКТИРОВАТЬ: Второй способ - связать статические библиотеки времени выполнения.,Это увеличивает размер исполняемого файла, но вам не нужны дополнительные требования на целевой машине.

...