[英]Why PHP COM objects are not returning correct results?
我正在尝试使用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个?
这是一个错误还是我做错了什么? 这可能是什么原因?
PS我已经在两台不同的计算机上尝试过,结果是相同的。
经过一些试验错误,我发现了这一点。 看来,如果我使用32位版本的PHP,那么我会得到正确的结果(5个声音)。 但是由于默认情况下我安装了64位版本,所以我只能听到1条声音。
我认为TTS声音大多为32位(就像安装在系统上的声音一样),因此当使用64位php.exe运行时,它只会返回64位声音。 使用32 php.exe,它将返回所有声音。
将其发布为答案,以防将来有人遇到类似问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.