2012-10-14 108 views
11

我將SAPI類型庫導入到Delphi中。我可以輸出語音到PC音箱使用此代碼:delphi中的文本到語音轉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,但聽起來比這更糟糕。

如何將語音輸出到單聲道16位44.1kHz的.wav文件,該文件的發音與直接發送到PC揚聲器的語音輸出完全相同?我無法弄清楚如何修改第二個代碼示例來設置每個採樣位和比特率。

Follup-up: Glenn的答案解決了比特率問題。感謝那。但是輸出到.wav文件的語音質量仍然低於直接輸出到揚聲器的質量。我使用屏幕錄製軟件將第一個代碼塊的輸出記錄爲helloworldtospeakers.wav。第二塊代碼與Glenn的系列相加,產生了helloworldtowav.wav。第二個文件顯然有一些失真。有任何想法嗎?

回答

9

查看文件流對象上的Format attribute。這是一個SpAudioFormat type,它有一個Type property用於設置音頻格式。這是一個enumerated type,它有很多選擇,所以你需要研究它們以得到你想要的。

這一行應該爲您提供(至少使用我使用的類型庫的版本)。

Stream.Format.Type_ := SAFT44kHz16BitMono;