[英]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.