我将 SAPI 类型库导入 Delphi。我可以使用以下代码向 PC 扬声器输出语音:
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 扬声器的语音完全相同?我不知道如何修改第二个代码示例以设置每个样本的位数和比特率。
跟进:格伦的回答解决了比特率问题。感谢那。但是输出到.wav
文件的语音质量仍然不如直接输出到扬声器的质量。我使用屏幕录制软件将第一个代码块的输出记录为helloworldtospeakers.wav。第二个代码块,加上 Glenn 的行,产生helloworldtowav.wav。第二个文件显然有一些失真。有任何想法吗?