2006年08月10日

Speech.pasでプログラミング

Delphiで、音声合成のプログラムを作ろうといろいろ探してみると、PROJECT JEDIAPI Library Converting APIsに、sapi.zipというファイルが置いてあった。ライセンスはMPL1.1



この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.








posted by takayan at 23:32 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする