2016-11-24 171 views
0

我想使用PHP访问Windows SAPI5或文本到语音(TTS)。标准方法是为“SAPI.SpVoice”创建一个COM对象,然后获取已安装的声音。为什么PHP 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

我猜我自己想通了。它看起来像是我使用了32位版本的PHP,然后我得到了正确的结果(5个声音)。但由于我默认安装了64位版本,我只能获得1个声音。现在解决了..谢谢! – supersan

+0

P.S.请问任何MOD可以告诉我我应该怎样处理这个问题。我是否应该将此评论发布为解决方案,还是应该保留原样?谢谢。 – supersan

+2

如果您发现问题的解决方案,则发布并接受您自己的答案是完全可以接受的。 http://stackoverflow.com/help/self-answer –

回答

1

经过一些试验性错误后,我想到了这一点。它看起来像是我使用了32位版本的PHP,然后我得到了正确的结果(5个声音)。但由于我默认安装了64位版本,我只能获得1个声音。

我认为TTS的声音大多是32位(就像我的系统上安装的那样),所以当使用64位php.exe运行时,它只返回64位声音。用32个php.exe它会返回所有的声音。

如果将来有人遇到类似问题,请将其作为答案发布。

+3

你应该将它标记为接受的答案。 – MrApnea

+0

它说我必须等2天才能做到这一点.. – supersan

相关问题