このZIPファイルは、Microsoft Speech APIのインターフェイスとなるspeech.pasが入っている。このSAPI(Speech API)は、4.0のみ対応。いまさらSAPI4.0というのもあれだけど、簡単にできそうなのでしばらく、これを使って遊んでみよう。
日本語SAPI4.0対応音声合成エンジンが既にインストールされている必要がある。スクリーンリーダやホームページリーダがインストールされていればまず大丈夫。持っていなければ、ドキュメントトーカを購入するという方法もある。
資料。参考になるのは、このZIPファイル内のDEMOSフォルダの中のサンプルプログラム。そしてマイクロソフトのSAPI4.0のSDKをインストールして手に入るドキュメント(通常のインストールでは C:/Program Files/Microsoft Speech SDK/Document)。どちらにしても英語の文章を読まないといけない。
このspeech.pasを使うときは、作っているプロジェクトのフォルダの中に放り込んで、uses節にspeechを追加する。
まず、作ってみたのは、自分のパソコンに入っているSAPI4対応音声合成エンジンを調べるプログラム。単に名前を表示するだけ。今回は(スクリーンリーダーを使わないならば)何もしゃべらない。このプログラムの実質はFormCreateプロシージャ内のコード。マイクロソフトのSAPI4のCOMのドキュメントをそのまま参考にして、Delphiでも作っていけそう。
DelphiのバージョンはBorland Developer Studio 2006。
unit unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Speech, StdCtrls, Comobj, ActiveX, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
aTTSEnum : ITTSEnum;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
NumFound : DWord;
ModeInfo : TTSModeInfo;
begin
OleCheck(CoCreateInstance(CLSID_TTSEnumerator, Nil, CLSCTX_ALL, IID_ITTSEnum, aTTSEnum));
OleCheck(aTTSEnum.Reset);
OleCheck(aTTSEnum.Next(1, ModeInfo, @NumFound));
RichEdit1.Lines.Clear;
While NumFound > 0 do
begin
RichEdit1.Lines.Add(String(ModeInfo.szModeName));
OleCheck(aTTSEnum.Next(1, ModeInfo, @NumFound));
end;
RichEdit1.SelStart := 0;
end;
end.