TTS 음성 낭독이 끝났는지 판단

최근에 음성 낭독을 할 때가 비교적 많고 두 소프트웨어에서도 응용한 적이 있다.사실 대부분의 음성 낭독 코드는 아직 쓰기 쉽다. 다만 TTS 음성 낭독이 끝났는지 아닌지를 판단하거나 현재 음성 엔진의 상태를 판단하려면 파라미터를 조금 찾아야 한다.여기에 기록해 두십시오.
인터넷에서 검색한 TTS 낭독 완료 이벤트를 판단하는 코드WaitForSingleObject(spvoice.SpeakComplete Event, 200);델파이에서 사용했을 때 원래 있어야 할 효과에 이르지 못했는데 테스트 결과 이 물건은 TTS에서 낭독 흐름을 합성한 후에 되돌아왔다. 말하자면 TTS가 낭독하려고 하자 낭독이 완성된 것으로 판정되었다.spvoice의 매개 변수를 자세히 찾았는데 그 안에statdus 속성이 있습니다. 이 되돌아오는 대상에서 유용한 속성 매개 변수를 얻을 수 있습니다. 예를 들어 RunningState(운행상태), inputWordLegth(낭독문장의 모든 어휘 길이 총합), inputWordPosition(전에 낭독된 어휘의 마지막 위치)...
이 중 RunningState는 세 가지 상태가 있습니다. 낭독 텍스트가 모두 렌더링된 후 SRSEDone = 1 낭독 중 SRSEIs Speaking = 2 낭독을 중단하면 0 으로 돌아갑니다.
이 세 가지 속성을 사용하면 낭독이 완성되었는지 판단할 수 있고 두 개의 타이머를 추가하여 낭독 문장을 시작할 때 낭독 상태를 판단하는 타이머를 가동하고 완성한 후에 다시 타이머를 활성화하여 낭독할 수 있다.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
learnTTS.Speak('this is voa explorations in special english!',1);
WaitForSingleObject(learnTTS.SpeakCompleteEvent, 200);
timer2.Enabled:=true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
edit1.Text:=inttostr(learnTTS.Status.RunningState);
if learnTTS.Status.RunningState=1 then //        1
timer1.Enabled:=true;
end;

좋은 웹페이지 즐겨찾기