Delphi 4.0からTosttsx.ocxを使ってみる

このページでは、 東芝音声システムと Delphi 4.0で、簡単なプログラムを試しに作ってみたので その過程を紹介します。

目次

東芝音声システムを手に入れる

最近は、ViaVoiceなど音声認識ソフトがはやっているようですが、 どうも音声認識ソフトと音声合成ソフトはそろいで扱われることが 多いことに気がつきました。 マイクロソフトの その他のSAPI対応音声合成エンジンと いうページを見ると、東芝音声システムがあげられており、 値段も安いようなので試してみることにしました。

東芝音声システムの ページで東芝ダイレクトPCで注文できると 紹介されていたので、注文しました。 東芝音声システム自体の値段は3000円、消費税150円、送料サービス0円でした。 製品はCD-ROM1枚と紙切れ1枚でハガキ大の郵便で届きました。 多分注文してから数日で着いたと思います。

現在、東芝音声システムはバージョン4.0のようですが、 東芝音声システムの ページに以前のバージョンであるバージョン2あたりがお試し版としておいてあります。 結構大きなファイルなので、ネットワークで一生懸命取って来るより 製品を買ってCD-ROMを送ってもらった方が良いかもしれません。

東芝音声システムをインストールする

8月始めには、東芝音声システムを手に入れていたのですが、 色々忙しかったので、ほったらかしにしてました。 9月下旬になって急に試したくなって来たので、 インストールすることにしました。 動作条件は、 「Windows 95またはWindows 98が稼動するマシン」となっていたのですが、 Windows95には入れるスペースがなかったので、Windows NT に入れてしまいました。

CD-ROMを入れると、自動的にインストールが始まりました。 東芝音声システムのインストールがひとまず終った後、 Microsoft Agent 2.0 と Microsoft Speech API 4.0 が インストールされました。

インストールが終ると、 F:\Program Files\Toshiba\Speech System というディレクトリができ(私のWindows NTはF:にあります。)、 F:\Program Files\Toshiba\Speech System\SAMPLE\speakpad に Visual Basic で音声を出力するプログラムの見本が インストールされます。

お試しプログラム?として以下のような物が入っていましたが、 とりあえず余り動かさずに、ActiveXコントロールを使って プログラムをしてみることにしました。

ActiveXを使用するための準備をする

Visual Basic のサンプルしか入っていなかったのですが、 ActiveX 対応の新しい Visual Basic は持っていないので、 Delphi を使ってみることにしました。 Delphiの最新版はDelphi5ですが、 Delphi5を購入するか非常に迷っているところなので、 私は、Delphi4までしか持っていません。 Delphi4でも ActiveXコントロールが使えるようなので、 プログラムしてみることにしました。

実は、ActiveXコントロールなどというものは、 これまで使用したことがなかったので、 どう使って良いのかさっぱり分かりませんでした。 (つい最近まで DLL も使ったことなかったし…) 「ここまでできるBorland Delphi4パワーガイド」(秀和システム)という本を見たところ、 ActiveXコントロールを使うためには、まずIDEに登録をしなくてはいけない らしいことが分かりました。 最初に[コンポーネント][ActiveXコントロールの取り込み(X)] メニューを実行しました。 そうすると、下のような画面が表示されるので、 東芝音声合成コントロールを選択した後[インストール(I)...]ボタンを 押して登録しました。

ActiveXの取り込みで東芝音声合成コントロールを選択する

既存の所に登録するか?とか何か質問されましたが、 意味が分からなかったので確か全部OKを押しました。 良く分からないうちにコンポーネントが登録された という下のようなメッセージの所までたどり着きました。 どうやらこれで ActiveXコントロールが使えるようになったようです。

コンポーネントが登録され確認ダイアログの表示

コンポーネントパレットのActiveXのところを見ると、 TOSTTSXが登録されていました。

コンポーネントパレットに登録されたTOSTTSX

フォームを作成する

まず、次のようなフォームを作成しました。

Buttonが一つ置かれたフォーム

フォームの上にButton一つとActiveXコントロールである TOSTTSXを置いたただけです。 何の意味もないプログラムですが、 東芝音声システムの音声ライブラリTosttsx.ocxを使用して しゃべらせるのが目的なのでよしとしましょう。

コードを書く

東芝音声システムをインストールすると、 サンプルプログラムがインストールされますが、 Visual Basic 用のみです。

Delphi でどう記述して良いのか分からないまま、 単なる推測で、次のようなコードを書いてみました。 いまいち良く分かっていないので、エラー処理は ほとんどしていません。 ボタンを押すと"こんにちは"としゃべるようコードを記述しました。 コードの最初の部分は、元から記述されていた雛型なので、 実際、自分で記述したのは、{$R *.DFM}以下のコードだけです。 Visual Basic の Sub Form_Load, Sub Form_Unload が Delphi で 何に対応するのか良く分からなかったので、FormCreate, FormDestroy に対応させて記述しました。 (本当はどう記述すれば良いか今後調べてみなくては…) 音声合成コントロールの使い方が、 F:\Program Files\Toshiba\Speech System\SYSTEM\TOSTTSX.HLP に記述されており、まだ良く見ていませんが、 色々細かい設定ができるようです。 今後、ぼちぼち試してみましょう。

unit hellofm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, TOSTTSXLib_TLB;

type
  TForm1 = class(TForm)
    Button1: TButton;
    TOSTTSX1: TTOSTTSX;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
     if not TOSTTSX1.IsEnable then
        Application.MessageBox('音声合成エンジンオブジェクトの作成に失敗しました。', '警告', MB_ICONSTOP);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     TOSTTSX1.AudioReset;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     TOSTTSX1.Speak('こんにちは')
end;

end.

実行する

実行すると、下のようにボタン一つが置かれたフォームが 表示されました。 ボタンをクリックすると、「こんにちは」としゃべりました。 ProTALKER97 や 95Reader の音声エンジンとは、また一味違う しゃべり方をします。

実行結果

実行時にできた実行形式ファイルを含めてリンクを張っておきます。 Delphi用のDLLがインストールされていないと、 実行できないかどうかは分かりません。

E-mail : nnakamur@mxq.mesh.ne.jp