我正在尝试使用PHP访问Windows SAPI5或文本到语音(TTS)。标准方法是为“SAPI.SpVoice”创建COM对象,然后获取已安装的语音。
示例PHP代码:
<?php
$obj = new COM('SAPI.SpVoice');
$voices = $obj->GetVoices;
$count = $voices->Count;
print $count; #prints "1"
不幸的是,PHP的COM对象返回的输出不正确,因为我的系统上安装了5个声音,但PHP只返回1.
所以,只是为了检查这是否是PHP特定的问题,我在Perl 5.8(草莓)中编写了相同的代码。
示例Perl代码:
#!/usr/bin/perl
use Win32::OLE;
my $obj = Win32::OLE->new('SAPI.SpVoice');
my $voices = $obj->GetVoices;
my $count = $voices->Count;
print $count; #print "5" which is correct.
所以perl代码正确返回我的系统上有5个TTS语音,但PHP只返回1?
这是一个错误还是我做错了什么?可能的原因是什么?
P.S。我在两台不同的计算机上试过这个,结果是一样的。
答案 0 :(得分:1)
我在一些试验错误后想到这一点。看起来如果我使用32位版本的PHP,那么我得到正确的结果(5个声音)。但是因为我默认安装了64位版本,所以只能获得1个声音。
我认为TTS语音大多是32位(就像我系统上安装的那些),所以当使用64位php.exe运行时,它只返回64位语音。使用32个php.exe,它将返回所有声音。
将此作为答案发布,以防将来有人面临类似问题。