текст-в-речь-для-WAV в Делфи

я импортировал библиотеку типов SAPI в Delphi. Я могу выводить речь на динамики ПК с помощью этого кода:

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:temptest.wav', SSFMCreateForWrite, False);
  Voice.AudioOutputStream := Stream.DefaultInterface;
  Voice.Speak('Hello World!', 0);
  Stream.Close;
end;

проблема в том, что когда я проигрываю .wav файл это звучит ужасно, как будто он использует очень низкий битрейт. Наглость говорит мне, что файл моно 16 бит 22.05 кГц, но это звучит гораздо хуже.

как вывести речь на моно 16 бит 44,1 кГц .wav файл, который будет звучать точно так же, как речевой вывод непосредственно на динамики ПК? Я не мог понять, как изменить второй образец кода, чтобы установить биты на образец и битрейт.

Follup-up: ответ Гленна решает проблему битрейта. Спасибо за это. Но качество речевого вывода на .wav файл по-прежнему уступает тому, что выводится непосредственно на динамики. Я использовал программное обеспечение для записи экрана для записи с выхода первого блока кода as helloworldtospeakers.WAV и. Второй блок кода, с добавленной строкой Гленна, производит helloworldtowav.WAV и. Во втором файле явно есть какие-то искажения. Есть идеи?

1 ответов


посмотреть атрибут на объекте потока файлов. Это SpAudioFormat тип С вид имущества настройки аудио-формате. Это перечислимого типа, который имеет очень много вариантов, поэтому вам нужно изучить их, чтобы получить то, что вы хотите.

эта строка должна получить его для вас (по крайней мере, с версией библиотеки типов, которую я использовал).

Stream.Format.Type_ := SAFT44kHz16BitMono;