2016-11-24 5 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는 그래서 1

을 반환하기 때문에 불행하게도 PHP의 COM 개체에서 반환 된 출력이 단지 확인, 잘못 이 PHP 특정 문제가 있다면, 나는 펄 5.8 (딸기)에 동일한 코드를 썼다.

샘플 펄 코드 :

#!/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. 

그래서 제대로 펄 코드는 내 시스템에 5 TTS의 목소리를 가지고 반환하지만 PHP는 1을 반환?

이 버그입니까? 아니면 내가 잘못하고 있습니까? 이것의 가능한 원인은 무엇일까요?

P. 두 개의 다른 컴퓨터에서이 작업을 시도했지만 결과는 같습니다.

+0

내 생각에 혼자서 알아 냈습니다. 32 비트 버전의 PHP를 사용하면 올바른 결과 (5 개의 음성)를 얻는 것처럼 보입니다. 그러나 기본적으로 64 비트 버전을 설치 했으므로 1 음성 만 얻습니다. 이제 해결되었습니다 .. 고마워요! – supersan

+0

추신 어떤 모드라도 내가이 질문으로 무엇을해야하는지 말해 줄 수 있습니까? 이 의견을 해결책으로 게시해야합니까, 아니면 그대로 두어야합니까? 감사. – 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

관련 문제