Intereting Posts
Сложность Ioncube с PHP 5.5 PHP flock () – что находится под капотом? Как найти первый / второй элемент ассоциативного массива, когда ключи неизвестны? как создать класс php, который может быть запущен до логического (быть правдивым или ложным) Opencart: добавление кнопки «Купить сейчас» на странице продукта Opencart Перенаправление на новую страницу, когда пользователь использует Internet Explorer Авторизовать с помощью curl и parse с помощью простого html dom не работает Установите PHP на XP / IIS 5.1? Php не обновится, чтобы показать новый контент sql рекурсивный обход дерева – Как отслеживать уровень рекурсии? Управлять приложениями вкладки «Facebook» через Open Graph API? Как создать динамическое предложение WHERE mysqli WAMP Не удается получить доступ в локальной сети 403 Запрещено static :: vs. self :: – есть ли недостатки? Функция PHP – игнорировать некоторые параметры по умолчанию

Запуск приложения Windows Speech SDK в PHP

Этот вопрос связан с моим предыдущим (неотвеченным) вопросом: запуск консольной программы в PHP

Программа, которую я написал в этом вопросе ( progName.exe ), на самом деле является приложением Windows Speech SDK, которое генерирует WAV-файл из текстового файла и вычисляет некоторые параметры из текстового файла. Я упростил программу Speech SDK:

 #include "stdafx.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { HRESULT hr = S_OK; CComPtr <ISpVoice> cpVoice; CComPtr <ISpStream> cpWavStream; CSpStreamFormat cAudioFmt; hr = ::CoInitialize(NULL); if (SUCCEEDED(hr)) hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&cpVoice); if (SUCCEEDED(hr)) hr = cAudioFmt.AssignFormat(SPSF_22kHz16BitMono); if (SUCCEEDED(hr)) hr = SPBindToFile(L"hello.wav", SPFM_CREATE_ALWAYS, &cpWavStream, &cAudioFmt.FormatId(), cAudioFmt.WaveFormatExPtr(), SPEI_PHONEME); if (SUCCEEDED(hr)) hr = cpVoice->SetOutput(cpWavStream, TRUE); if (SUCCEEDED(hr)) hr = cpVoice->Speak(L"Hello World", SPF_DEFAULT, NULL); cpVoice->WaitUntilDone(INFINITE); cpWavStream->Close(); cpVoice.Release(); return 0; } 

Этот код создает WAV-файл, содержащий «Hello world». Когда он запускается непосредственно на консоли сервера, он создает правильный .WAV-файл (около 60 кБ). Однако, когда он вызывается с использованием PHP-скрипта из браузера:

 <?php $cmd = "helloTTS.exe"; // The name of the program exec($cmd); ?> 

Программа запускается и заканчивается, но созданный файл .WAV составляет всего 46 байт. Но если я использую интерактивный режим PHP в Windows ( php -a ) для запуска того же скрипта, размер файла .WAV верен.

Любая идея о том, что может это сделать? Почему скрипт PHP выполняется в интерактивном режиме, отличном от того, который выполняется в браузере?

Другой вопрос, который мог бы мне помочь: какая библиотека (.DLL) фактически используется такими функциями, как ISpVoice::Speak() ? Это SAPI.DLL ?

Related of "Запуск приложения Windows Speech SDK в PHP"