Я пытаюсь заставить Text To Speech и Speech Recognition работать в PHP с использованием Microsoft SAPI через COM-объекты.
В прошлом я уже использовал этот код для работы TTS (Apache 2.1, PHP 5.5, на Windows 2003 Server)
// Instantiate the object
$VoiceObj = new COM("SAPI.SpVoice") or die("Unable to instantiate SAPI");
// Get the available voices
$VoicesToken=$VoiceObj->GetVoices();
$NumberofVoices=$VoicesToken->Count;
for($i=0;$i<$NumberofVoices;$i++)
{
$VoiceToken=$VoicesToken->Item($i);
$VoiceName[$i]=$VoiceToken->GetDescription();
}
// Get and print the id of the specified voice
$SelectedVoiceToken=$VoicesToken->Item(0);
$SelectedVoiceTokenid=$SelectedVoiceToken->id;
// Set the Voice
$VoiceObj->Voice=$SelectedVoiceToken;
$VoiceName=$VoiceObj->Voice->GetDescription();
$VoiceFile = new COM("SAPI.SpFileStream");
$VoiceFile->Open('./test.wav', 3, false);// Speak to file
$VoiceObj->AudioOutputStream = $VoiceFile;
$VoiceObj->Speak("What an unbelievable test", 0);
$VoiceFile->Close();
На моей новой установке (IIS 7.5, PHP 7.0, Windows Server 2008R2) тот же код завершается ошибкой при
$VoiceObj->Speak("What an unbelievable test", 0);
Fatal error: Uncaught com_exception: <b>Source:</b> Unknown<br/><b>Description:</b> Unknown in \\web\tts.php:30 Stack trace: #0 \\web\tts.php(30): com->Speak('this is a marve...', 0) #1 {main}
С такой маленькой детализацией (где найти больше?) Я не могу понять, в чем может быть проблема.
Написание разрешений проверено.
PHP 7.0 заменен на 5.5, все еще не работает.
Тот же код протестирован с приложением Win32, и он работает безупречно.
Есть намеки?
Два года спустя я случайно нашел ответ на эту проблему.
PHP COM-объекты не могут выполнять файловые операции на сетевых путях, даже со всеми необходимыми разрешениями
После того, как папки разработки были перенесены на ту же машину, на которой работает IIS, начала работать куча ранее сломанных тестов. У них всех было одно общее: они использовали COM-интерфейсы для сохранения файлов или что-то в этом роде.
Других решений пока нет …