2016-11-24 170 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

相關問題