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ですが、それよりもはるかに悪い音になります。

.wavPCスピーカーに直接出力される音声とまったく同じように聞こえるモノラル16ビット44.1kHzファイルに音声を出力するにはどうすればよいですか?2番目のコードサンプルを変更して、サンプルあたりのビット数とビットレートを設定する方法がわかりませんでした。

Follup-up:グレンの答えはビットレートの問題を解決します。それをありがとう。ただし、ファイルに出力される音声の品質は.wav、スピーカーに直接出力される品質よりも劣ります。画面記録ソフトウェアを使用して、コードの最初のブロックからの出力をhelloworldtospeakers.wavとして記録しました。グレンの行が追加されたコードの2番目のブロックは、helloworldtowav.wavを生成します。2番目のファイルには明らかに歪みがあります。何か案は?

4

1 に答える 1

11

ファイルストリームオブジェクトのFormat属性を参照してください。これは、オーディオ形式を設定するために使用するTypeプロパティを持つSpAudioFormatタイプです。これは列挙型であり、非常に多くのオプションがあるため、必要なものを取得するにはそれらを調査する必要があります。

この行はあなたのためにそれを取得するはずです(少なくとも私が使用したタイプライブラリのバージョンでは)。

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