13

我将 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。第二个文件显然有一些失真。有任何想法吗?

4

1 回答 1

11

请参阅文件流对象的Format 属性。它是一种SpAudioFormat 类型,它具有用于设置音频格式的Type 属性。那是一个枚举类型,它有很多选择,所以你需要研究它们才能得到你想要的。

这一行应该为您提供(至少对于我使用的类型库版本)。

Stream.Format.Type_ := SAFT44kHz16BitMono;
于 2012-10-14T06:35:13.267 回答