2016-11-24 2 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" 

私は自分のシステムにインストールされている5つの声を持っているので、残念ながらPHPのCOMオブジェクトから返された出力が正しくないですが、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.私は2つの異なるコンピュータでこれを試して、結果は同じです。

+0

私はこれを自分で考え出しました。 PHPの32ビット版を使用した場合、正しい結果(5つの声)が得られるようです。しかし、私がデフォルトで64ビットバージョンをインストールして以来、私は1つの声を得るだけです。それは今解決されました..ありがとう! – supersan

+0

P.S.どんなMODが私にこの質問で何をすべきか教えてください。このコメントを解決策として投稿する必要がありますか?ありがとう。 – supersan

+2

問題の解決策が見つかった場合は、自分の回答を投稿して受け入れることができます。 http://stackoverflow.com/help/self-answer –

答えて

1

私はこれをいくつかの試行錯誤の後に考え出しました。 PHPの32ビット版を使用した場合、正しい結果(5つの声)が得られるようです。しかし、私がデフォルトで64ビットバージョンをインストールして以来、私は1つの声を得るだけです。

私は、TTSの音声は主に私のシステムにインストールされているもののように32ビットだと思うので、64ビットのphp.exeで動いているときは64ビットの音声しか返しません。 32 php.exeですべての音声を返します。

誰かが今後同様の問題に直面した場合の回答として投稿してください。

+3

それを受け入れられた回答としてマークする必要があります。 – MrApnea

+0

私はそれをすることができる2日前に待たなければならないと言います.. – supersan

関連する問題