【问题标题】:Why PHP COM objects are not returning correct results?为什么 PHP COM 对象没有返回正确的结果?
【发布时间】:2017-04-09 05:03:05
【问题描述】:

我正在尝试使用 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 个?

这是一个错误还是我做错了什么?这可能是什么原因?

附:我在两台不同的电脑上试过,结果是一样的。

【问题讨论】:

  • 我想这是我自己想出来的。看起来如果我使用 32 位版本的 PHP,那么我会得到正确的结果(5 个声音)。但由于我默认安装了 64 位版本,所以我只能得到 1 个声音。现在已经解决了。。谢谢!
  • P.S.任何mod都可以告诉我我应该如何处理这个问题。我应该将此评论作为解决方案发布还是应该保持原样?谢谢。
  • 如果您找到了问题的解决方案,完全可以发布并接受您自己的答案。 stackoverflow.com/help/self-answer

标签: php perl com text-to-speech sapi


【解决方案1】:

我在一些试验错误后发现了这一点。看起来如果我使用 32 位版本的 PHP,那么我会得到正确的结果(5 个声音)。但由于我默认安装了 64 位版本,所以我只能得到 1 个声音。

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

将此作为答案发布,以防将来有人遇到类似问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多