VistaでスピーチAPIで日本語を喋らせるには

解決


Delphi大好き  2010-08-25 15:52:57  No: 39050

いつもお世話になってます。

Vista、D7なのですが、
マイクロソフトスピーチAPIで日本語を喋らせたいと思っています。

XPでは難なく出来たのですが、Vistaでは日本語非対応のようです。

win98時代の古い英日翻訳ソフト「こりゃ英和」の日本語発音も動かない状態なのですが、
それのTextToSpeachアクティブXコンポーネントを使った自作ソフトでは、
Vistaでも日本語を喋ります。
(因みにXPにてコンパイル、以後Vistaでは手をつけてません。)

同じコンポーネントを使っても、製品版は日本語喋れない、
自作ソフトでは難なく日本語を喋れるという不思議・・・。
因みにVistaで新規に作ると、英語しか喋れません。

XPに再びダウングレードすれば済むのでしょうが、
出来ればVistaでやっていきたいと思っています。
(慣れるとVistaの方が快適(笑))

自分でも調べましたが、
VistaではスピーチAPIは日本語非対応らしいと知りました。
しかし、音声認識(聞き取り)は、
Vistaでも日本語を認識でき、
XPで作った喋るソフトはVistaでも日本語を喋ります。

どなたか解決策をご存知の方いらっしゃいますでしょうか?
よろしくお願いしますm(__)m。


Delphi大好き  2010-08-25 16:29:53  No: 39051

追記です。
因みに以下のコンポーネントを使ってます。

↓TextToSpeechアクティブX
コラム/Delphiをおしゃべりにしよう! 
http://www.wikihouse.com/DelphiVIP/index.php?%A5%B3%A5%E9%A5%E0%2FDelphi%A4%F2%A4%AA%A4%B7%A4%E3%A4%D9%A4%EA%A4%CB%A4%B7%A4%E8%A4%A6%A1%AA

↓SAPI5.1  Delphi用コンポーネント
SAPI 5.1 sample programs & support packages for Delphi
http://cc.embarcadero.com/item/19511


monaa  2010-08-25 23:00:34  No: 39052

再配布可能でフリーのライブラリが有ります。
AquesTalk
http://www.a-quest.com/products/aquestalk.html
こちらに乗り換えてみるのも一つの手だと思います。
一部地域でよく耳にする音声です。


Delphi大好き  2010-08-26 05:15:50  No: 39053

monaaさんありがとうございます。
こんな便利なものが無償で使えるんですね!
凄いです!!

早速検索してみたら、DelphiでAquesTalkを使ってるページがありました。
http://netakiri.net/labo/aques_talk_sample.shtml

早速本体とサンプルをダウンロードして使ってみました。

uses
  AqTalk;

procedure TForm1.Button1Click(Sender: TObject);
var
  AquesTalk: TAquesTalk;
begin
  AquesTalk := TAquesTalk.Create;
  AquesTalk.Play('こんにちは');
end;

非常にありがたいです。
本当に助かりました。
業務やフリーソフトにも使えるのは嬉しいです。
今は色々なものがあって本当に驚きです。

因みに聞いて話せるメモ帳を作ってます。
これで話せる部分も直ぐに出来そうです。
それではありがとうございましたm(__)”m。


yuuki  2010-10-03 18:52:10  No: 39054

AquesTalkを調べていてここにたどり着きました。
上記の
http://netakiri.net/labo/aques_talk_sample.shtml
のサンプルですが
delphi2009 & vista の環境では音が出ませんでした。

何か修正されましたか?
もしうまくいっているようならアドバイスいただけますか。


TS  2010-10-03 19:18:33  No: 39055

Delphi大好き さんのコピーです。
Delphi2009以降だと下記の様になるのではないでしょうか、未確認です。
vista は使用していませんので分かりませんが。

procedure TForm1.Button1Click(Sender: TObject);
var
  AquesTalk: TAquesTalk;
  Ast:AnsiString;
begin
  AquesTalk := TAquesTalk.Create;
  Ast:='こんにちは';
  AquesTalk.Play(Ast);
end;


TS  2010-10-03 20:04:41  No: 39056

http://netakiri.net/labo/aques_talk_sample.shtml
を見ました。

var koe: string;       とある部分を
var koe: AnsiString;    に変更してみて下さい。


yuuki  2010-10-03 20:36:16  No: 39057

早急なレス、本当にありがとうございます。

問題を簡単にするため
サンプルソースの
procedure TForm1.Button1Click(Sender: TObject);
begin
  AquesTalk.Play(ComboBox1.Items[ComboBox1.ItemIndex]);
end;

を下記のように修正して確認しましたが、やはり音がしません。
エラーも出ません。

procedure TForm1.Button1Click(Sender: TObject);
var
  Ast:AnsiString;
begin
  Ast:='こんにちは';
  AquesTalk.Play(Ast);
//  AquesTalk.Play(ComboBox1.Items[ComboBox1.ItemIndex]);
end;

初心者ですので、何か根本的な勘違いをしているのでしょうか?


yuuki  2010-10-03 20:50:28  No: 39058

ご指摘のようにラッパー部分の
var koe: string;       とある部分をすべて
var koe: AnsiString;    に変更すると音がでました。

感動です。
本当にありがとうございました。


TS  2010-10-03 22:06:50  No: 39059

http://netakiri.net/labo/aques_talk_sample.shtml
ダウンロードして使用してみました。

unit1  は変更せず、unit AqTalk;は別のPasファイルに作られておられる
ので。

unit AqTalk;  を下記の様に変更した方が後々使いやすいかもしれません。

function TAquesTalk.Play(koe: String; hWnd: HWND; msg,
  dwUser: ULONG): Boolean;
begin
  Result := AquesTalkDa_Play(FHandle, AnsiString(Koe), FSpeed, hWnd, msg, dwUser) = 0;
end;

function TAquesTalk.PlaySync(Koe: string): Boolean;
begin
  Result := AquesTalkDa_PlaySync(AnsiString(Koe), FSpeed) = 0;
end;

function TAquesTalk.Synthe(FileName, Koe: string): Boolean;
var Size: Integer;
  Wav: Pointer;
  FileHandle : Integer;
begin
  Wav := AquesTalk_Synthe(AnsiString(Koe), FSpeed, Size);


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加