TAgentで初期設定するには?


エージェントォゥ!!  2005-09-25 01:28:35  No: 17701

TAgent を使って遊んでいます。
以下のようなサンプルソースを作ったのですが、
1回目と2回目の「こんにちは」の音声が違います。
1回目はたぶん男性の声、2回目は女性の声だと思われます。
ソースを見てもらえばわかるのですが、
1回目も、2回目も女性の声で発声したいのですが、
どうすればよいのでしょうか?
あと、もうひとつ、これ、D6でやっているのですが、
D7で実行するとエラーになります。
Delphi7で問題なく実行する方法教えてください。

type
  TForm1 = class(TForm)
    ≪中略≫
  private
    Character: IAgentCtlCharacterEx;
  end;

≪中略≫

procedure TForm1.Button1Click(Sender: TObject);
begin
  Agent.Characters.Load('MyChara', 
                        'C:\WINDOWS\MSAGENT\CHARS\Peedy.acs');
  Character := Agent.Characters.Character('MyChara') 
                as IAgentCtlCharacterEx;
  Character.Set_TTSModeID('{A778E061-A936-11d1-B17B-0020AFED142E}');

  Character.Show(False);
  try
    Character.Speak('こんにちは', '');
    Character.Speak('こんにちは', '');
  finally
    Character.Hide(False);
  end;
end;


ずんどこべろんちょ  2005-09-25 06:41:34  No: 17702

> Character.Set_TTSModeID('{A778E061-A936-11d1-B17B-0020AFED142E}');
おそらく先のコードが問題であると感じます。

Character.Set_TTSModeID(LowerCase('{A778E061-A936-11d1-B17B-0020AFED142E}'));
てすればどうでしょうか?
はたまた、そのコードを抜けばD7でかどうするとかんじまする


エージェントォゥ!!  2005-09-26 17:47:05  No: 17703

回答どうもありがとうございました。

Character.Set_TTSModeID(LowerCase('{A778E061-A936-11d1-B17B-0020AFED142E}'));
のように、LowerCase をつけてみましたが、
やっぱり、同じ状態です。

D7でエラーが発生するのは
Character.Set_TTSModeID
です。

何か手立てはありますでしょうか?


にしの  2005-09-26 19:37:11  No: 17704

仕事中にて音が出せないのですが、少なくともD7proではエラーになりませんでした。
確認ですが、
・TAgentは、D7で取込直していますか?
# C:\WINDOWS\msagent\agentctl.dll
# {F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5}
# Microsoft Agent Control 2.0

・Peedyはインストール済ですか?
http://www.microsoft.com/msagent/dev/docs/characterdata.asp

・エラー内容はどのようなものでしょうか。


エージェントォゥ!!  2005-09-26 20:07:49  No: 17705

にしのさん回答ありがとうございます。

>・TAgentは、D7で取込直していますか?
TAgent はダウンロードした
MSagetn.exe を実行するとインストールされました。
D7用とかあるのでしょうか?
「コンポーネント」「ActiveXの取り込み」
「Microsoft Agent Control 2.0(Version 2.0)」「インストール」
で取り込みました。

># {F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5}
これを実行すると
「指定した音声支持エンジンがみつかりません。
  音声指示エンジンが、キャラクタの言語と一致しないか、
  音声出力が現在使用不能になっています。」
と、エラーメッセージが表示されます。

># Microsoft Agent Control 2.0
ダウンロードしたのは
lhttsjpj.exe 3078KB
MSagent.exe   392KB
AgtX0411.exe  128KB
Peedy.exe    3325KB
spchapi.exe   825KB
以上の5ファイルですべて実行しました。

>・Peedyはインストール済ですか?
C:\WINDOWS\MSAGENT\CHARS のディレクトリの中に
Peedy.acs ファイルが存在しています。

以上になります。
よろしくお願いします。

追記:
参考にしたのは以下のHPです
http://members.jcom.home.ne.jp/shinonon/delphi/tips3.html


エージェントォゥ!!  2005-09-26 21:08:35  No: 17706

すみません、勘違いでした。
以下のようなプログラムに変更して気づいたのですが
この状態だと、すべて男性の声で表示されます

以下のSpeak 呼び出しのところで
    Character.Speak('\pit=10\こんにちは', '');
    Character.Speak('\pit=10\こんにちは', '');
と、設定してやると
1番目は男性の声、2番目(2番目以降)は女性の声になりました。
結局  Character.Set_TTSModeID の設定にかかわらず
現象は同じ状態になりました。

《目的はすべて(1番目から)の音声を女性の声で出したい》
と、いうことなのです。

procedure TForm1.FormCreate(Sender: TObject);
begin
  Agent.Characters.Load('MyChara', 
                        'C:\WINDOWS\MSAGENT\CHARS\Peedy.acs');
  Character := Agent.Characters.Character('MyChara') as
               IAgentCtlCharacterEx;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Character.Show(False);
  try
    Character.Speak('こんにちは', '');
    Character.Speak('こんにちは', '');
  finally
    Character.Hide(False);
  end;
end;


にしの  2005-09-27 03:16:43  No: 17707

{F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5}はAgentControlのGUIDです。
音声指示エンジンではありません。

音声指示エンジンの女性の声は、
{A778E060-A936-11d1-B17B-0020AFED142E}
だと思いますが、こちらで試しましたか?
上にある{A778E061・・・}だと、Voice TypeがMaleと出ていますが。

Set_TTSModeIDの直後、少し間を置くとよいかもしれません。
SpeakやPlayは、非同期で動いているようです。


エージェントォゥ!!  2005-09-27 20:25:40  No: 17708

にしのさんどうもありがとうございました。

>音声指示エンジンの女性の声は、
>{A778E060-A936-11d1-B17B-0020AFED142E}
>だと思いますが、こちらで試しましたか?
すみません、出てきた音声で勘違い(思い込み?)してしまいました。

>Set_TTSModeIDの直後、少し間を置くとよいかもしれません。
>SpeakやPlayは、非同期で動いているようです。
初期設定を Form1.Create の中で行って
ボタンを押して、Speak するように変更しました。

現在は以下の状態でテストしています。
Character.Set_TTSModeID において

Delphi6でコンパイルリンクして動作させると
{A778E060-A936-・・・} {A778E061-A936-・・・}のどちらにしても
男性の声らしき低い同じ声しか出てきません()

Delphi7でコンパイルリンクして動作させると
[アドレス FFFFFFFF でアドレス FFFFFFFF に対する読込違反がおきました。]
と、表示されます

Character.Set_TTSModeID が正常に動作しないのでは
ないでしょうか?
それとも、D6,D7の両方をインストールして
使用しているのが原因なのでしょうか?
すみません、よろしくお願いします。

procedure TForm1.FormCreate(Sender: TObject);
begin
  Agent.Characters.Load('MyChara', 
                        'C:\WINDOWS\MSAGENT\CHARS\Peedy.acs');
  Character := Agent.Characters.Character('MyChara') 
                as IAgentCtlCharacterEx;
  Character.Set_TTSModeID('{A778E060-A936-11d1-B17B-0020AFED142E}'));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Character.Show(False);
  try
    Character.Speak('こんにちは', '');
    Character.Speak('こんにちは', '');
  finally
    Character.Hide(False);
  end;
end;


にしの  2005-09-27 23:53:58  No: 17709

まず、D7でエラーとなる問題について。
D6で取り込んだpasファイルが、D7のライブラリパスに含まれていませんか?

また、レジストリ上に、
{A778E060-A936-11d1-B17B-0020AFED142E}
は存在しますか?
キーは、
HKEY_CLASSES_ROOT\CLSID\{A778E060-A936-11d1-B17B-0020AFED142E}
にあるはずです。
このキーのMiscInfo\Nameに書かれている、C:\WINDOWS\LHSP\Voice\JPJVF160.DLLといったDLLは存在しますか?


エージェントォゥ!!  2005-09-28 00:49:34  No: 17710

>D6で取り込んだpasファイルが、D7のライブラリパスに
>含まれていませんか?
「取り込んだ」言う意味がわからないのですが、
ダウンロードして、インストールするときにも
ActiveXコントロールの取り込み時にもそれぞれの
ユニットディレクトリ名が
  D6の時:C:\Program Files\Borland\Delphi6\Imports\
  D7の時:C:\Program Files\Borland\Delphi7\Imports\
となっています。
また、プロジェクトオプションで、「ディレクトリ/条件」は
ユニットの別名を除いてすべて空白になっています。

>{A778E060-A936-11d1-B17B-0020AFED142E}
>は存在しますか?
はい、存在しています。

>このキーのMiscInfo\Nameに書かれている、
>C:\WINDOWS\LHSP\Voice\JPJVF160.DLLといったDLLは存在しますか?
はい、こちらも存在しています。

お手数をおかけして申し訳ありませんが、
よろしくお願いします。


エージェントォゥ!!  2005-09-28 03:07:10  No: 17711

お世話になっています。
以下のようにメッセージを表示するようにプログラムを組んでみました。

  Agent.Characters.Load('MyChara', 
                        'C:\WINDOWS\MSAGENT\CHARS\Peedy.acs');
  Character := Agent.Characters.Character('MyChara') as                                       IAgentCtlCharacterEx;
  Character.TTSModeID := '{A778E060-A936-11d1-B17B-0020AFED142E}';

  ShowMessage(Format('Pitch=%d, Speed=%d', [Character.Pitch, 
                                            Character.Speed]));
  ShowMessage('SRModeID    = ' + Character.SRModeID);
  ShowMessage('TTSModeID   = ' + Character.TTSModeID);
  ShowMessage('HelpFile    = ' + Character.HelpFile);
  ShowMessage('GUID        = ' + Character.GUID);
  ShowMessage('Version     = ' + Character.Version);
  ShowMessage('Name        = ' + Character.Name);
  ShowMessage('Description = ' + Character.Description);
  ShowMessage('ExtraData   = ' + Character.ExtraData);

以上の結果は以下のようになりました。
  RichEdit1
  Pitch=130, Speed=157
  SRModeID    = 
  TTSModeID   = {A778E060-A936-11D1-B17B-0020AFED142E}
  HelpFile    = 
  GUID        = {6A069521-46BB-11D1-A6F6-00AA002F83C2}
  Version     = 2.00
  Name        = ピーディ
  Description = こんにちは。ボクはデジタル オウムのピーディです。
                クラッカーと音楽が大好きなんだ。
  ExtraData   = ボクにまかせてよ!^^忘れちゃだめだよ!

にしのさんへ、
GUID の値が {F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5} になっていません。
これが原因なのでしょうか?
よろしくお願いします。


エージェントォゥ!!  2005-09-28 05:19:55  No: 17712

>SpeakやPlayは、非同期で動いているようです。
以下のような実験をして見ました。
  Character.Set_TTSModeID('{A778E060-A936-11d1-B17B-0020AFED142E}');
  Character.Speak('\Spd=150\こんにちは\', '');
  Character.Set_TTSModeID('{A778E061-A936-11d1-B17B-0020AFED142E}');
  Character.Speak('\Spd=150\こんにちは\', '');
  Character.Set_TTSModeID('{A778E060-A936-11d1-B17B-0020AFED142E}');
  Character.Speak('\Spd=150\こんにちは\', '');
  Character.Set_TTSModeID('{A778E061-A936-11d1-B17B-0020AFED142E}');
  Character.Speak('\Spd=150\こんにちは\', '');
実行すると「女性→女性→女性→女性」すべて女性の声になりました。

先頭で停止させて時間をかけてステップ実行しました
すると「男性→女性→男性→女性」
??、「女性→男性→女性→男性」だと思ったのですが・・・
違うようです。

次に、「\Spd=150\」をすべて削除しました。
  Character.Speak('こんにちは\', '');
この場合、通常実行もステップ実行も
この状態で4つ実行すると今度は
「男性→男性→男性→男性」になります。

どうも、わけがわからなくなってきました。
お助けください!


にしの  2005-09-28 09:26:41  No: 17713

音を出してみたところ、確かに男性の声が出てますね。
試しに、キャラクタをOfficeのイルカにしてみましたが、声が出ませんでした。
ACSファイルに声が指定してあるのかもしれません。
# 未確認です


エージェントォゥ!!  2005-10-04 21:13:55  No: 17714

ピッチ設定について調べてみました。

速度180にしてピッチのみ変更して聞いて見ると以下のようになりました。
コード→≪Format('\Pit=%d\\Spd=180\%s',[Pitch, MessageStr]) ≫
聞いた感じでは3種類ぐらいの声しか判別できません。

さて、デフォルトですが、  Pitch=130,Pitch=157 のようです。
この作成して以下の表を見てみるとLanguageID の設定とは
逆になっています。ピッチって何でしょうね?

−−−−−−−−−−−−−−−−−−−−−
LanguageID        女        男
−−−−−−−−−−−−−−−−−−−−−
  10  男  女
  20  男  女
  30  男  女
  40  男  女
  50  男  男
  60  男  男
  70  男  男
  80  男  男
  90  男  男
  100  男  男
  110  男  女
  120  男  女
  130  男  女
  140  男  女
  150  男  女
  160  女  女
  170  女  女
  180  女  女
  190  女  女
  200  女  女
  210  女  女
  220  女  女
  230  女  女
  240  女  女
  250  女  女


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

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






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