2012-10-14 5 views
11

SAPI 형식 라이브러리를 Delphi로 가져 왔습니다. 내가 할 수있는이 코드를 사용하여 PC 스피커로 출력 연설 :Delphi의 text-to-speech-to-wav

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Voice: TSpVoice; 
begin 
    Voice := TSpVoice.Create(nil); 
    Voice.Speak('Hello World!', 0); 
end; 

내가 할 수있는이 코드와 .wav 파일로 출력 연설 :

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Voice: TSpVoice; 
    Stream: TSpFileStream; 
begin 
    Voice := TSpVoice.Create(nil); 
    Stream := TSpFileStream.Create(nil); 
    Stream.Open('c:\temp\test.wav', SSFMCreateForWrite, False); 
    Voice.AudioOutputStream := Stream.DefaultInterface; 
    Voice.Speak('Hello World!', 0); 
    Stream.Close; 
end; 

문제는 그 나는 .wav 파일을 재생할 때 정말 낮은 비트 전송률을 사용하는 것처럼 끔찍하게 들립니다. Audacity는 파일이 모노 16 비트 22.05kHz라고 알려주지 만, 그보다 훨씬 더 나쁜 것처럼 들립니다.

음성을 PC 스피커로 직접 출력하는 것과 똑같이 출력되는 모노 16 비트 44.1kHz .wav 파일로 어떻게 출력합니까? 두 번째 코드 샘플을 수정하여 샘플 당 비트 수와 비트 전송률을 설정하는 방법을 알지 못했습니다.

Follup-up : 글렌의 대답은 비트 전송률 문제를 해결합니다. 고마워. 그러나 .wav 파일로의 음성 출력 품질은 여전히 ​​스피커로 직접 출력되는 것보다 열등합니다. 나는 화면 기록 소프트웨어를 사용하여 첫 번째 코드 블록의 결과를 helloworldtospeakers.wav으로 기록했다. Glenn의 라인이 추가 된 두 번째 코드 블록은 helloworldtowav.wav입니다. 두 번째 파일에는 명확하게 왜곡되어 있습니다. 어떤 아이디어?

답변

9

파일 스트림 개체의 Format attribute을 참조하십시오. SpAudioFormat type이고 오디오 형식을 설정하는 데 사용하는 Type property이 있습니다. 그 중 많은 옵션을 가지고있는 enumerated type입니다. 그래서 당신이 원하는 것을 얻기 위해 그들을 연구해야 할 것입니다.

이 줄은 적어도 내가 사용하는 형식 라이브러리의 버전을 사용하면됩니다.

Stream.Format.Type_ := SAFT44kHz16BitMono;