喫茶XRAYトップページ

[スレッド全体
]

[2334] Re5:音声合成を使用して動画マニュアル返信 削除
2009/4/28 (火) 20:05:00 TS
//以下てすとコード
Memo1は使っていません。
ボタンのみでテストしてます。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses tvif;

procedure wait_command(wait_val:integer);
begin
  while tvifGetStatus() <> wait_val do
    begin
    end;
end;


(*
static void help(void)
{
        printf("ボブクロック\n2つの割り込みを使用したサンプルプログラムです。\nこのプログラムはオートリジュームオフで動作しています。\n");
}
*)

function FileSizeEx(const FileName: String): Integer;
var
  R: TSearchRec;
begin
  if FindFirst(FileName, faAnyFile, R) = 0 then Result := R.Size
  else Result := -1;
  FindClose(R);
end;


function read_script(filename:string;var script:Pchar):boolean;
var FS:TFileStream;
    ByteA:TByteArray;
    PByteA:^TByteArray;
begin
  result:=False;
  if FileExists(filename) then
    begin
      FS:=TFileStream.Create(filename,fmOpenRead);
      FS.Read(ByteA,FileSizeEx(filename));
      script:=@ByteA;
      result:=True;
      FS.Free;
    end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var script:Pchar;
begin
        tvifInit(0,TVIF_DEFAULT_SCRIPT_LINE,TVP_ON);
        // オートリジュームをオンに設定
        tvifAutoResumScript(TVP_OFF);

        // CGモデルを常駐させる。
        tvifModelStationed(TVP_ON);
        tvifSetWindowPosition(0,0);
        // スクリプトが停止したときの状態の指定
        // tvifSetStopTypeで指定される状態に切り替えない場合は下記のように指定する。
        // ディフォルトはTVP_ON。
        tvifSetStopMode(TVP_OFF);

        // プレイヤーの起動
        if (tvifSetCommand(TVP_EXECUTE) = TVP_OK) then
                wait_command(TVP_STOP); // showmessage('test'); //
  //if read_script('bobclock.tvml',script) then
  if read_script('kaiwa.tvml',script) then
    begin
                  tvifSetScript(script);
                  // メインスクリプトの更新
                   tvifSetCommand(TVP_UPDATE_SCRIPT);
                   // プレイヤーの更新を待つ
                  wait_command(TVP_UPDATE_SCRIPT);
      // 再生
                        if tvifSetCommand(TVP_PLAY) = TVP_OK then
        wait_command(TVP_PLAY);
    end;
        // スクリプト再生が停止したら(ここでは、割り込み&メインスクリプト共に監視する。)
  repeat
        until tvifGetStatus = TVP_STOP;


  tvifSetCommand(TVP_SHUTDOWN);
        tvifExit();
end;

end.

[2335] Re6:音声合成を使用して動画マニュアル返信 削除
2009/4/28 (火) 21:33:30 TS
■ DLL_API void tvifGetMousePos(int *pos);
player2でウィンドウ内でマウスボタンがクリックされた位置を引数posにint[2]型ポイ
ンタで返す。取得される値は、
pos[TVP_X] X 座標
pos[TVP_Y] Y 座標
である。

と説明にあるので下記の様に修正したのですが

     PTVP=^TVP ;
     TVP=record
        TVP_X:integer; // X 座標
        TVP_Y:integer; // Y 座標
     end;

procedure tvifGetMousePos(var pos: PTVP); cdecl; external TvifExport;

  repeat
    //この下は上手く行くマウスの動作が拾えます。
    if tvifGetMouseButton=TVIF_MOUSE_MIDDLE then
     begin
       beep;
       tvifResetMouseButton;
     end;
    //ここが上手くないフリーズします。
    tvifGetMousePos(TVPos);
    Form1.Label1.Caption:=IntToStr(TVPos^.TVP_X);
    Form1.Label2.Caption:=IntToStr(TVPos^.TVP_Y);
 until tvifGetStatus = TVP_STOP;

これが出来ると画面の一部分を指定して
画面の動作を止めるなりして、止めなくてもいい
ですけど、次の画面をその選択したものに
変えるなどという事が出来ます。

クイズ番組も出来るでしょう

各説明に移動とかも出来るでしょう。

考えたら切りが無いですが。



[2336] Re6:音声合成を使用して動画マニュアル返信 削除
2009/4/28 (火) 21:55:14 Mr.XRAY
▼ TSさん

う〜ん.なるほど.さて.こちらも
Visual C++ 2008 Express Edition
が必要なようですね.私は何かの時だか忘れましたがインストールしてあります.
もしかしたら古いかも知れませんが.
(ハハハッ,既にpascalMagickの時に使用しているんだったけ.ボケです)

でも,こちらは開発環境用ですからね.
実行環境に必要なImageMagick(PascalMagick)とは意味あいが違いますね.
こっちはPascalMagickと違い,面白そうです.


[2337] Re7:音声合成を使用して動画マニュアル返信 削除
2009/4/28 (火) 22:07:05 Mr.XRAY
もしかしたら,このスレッドを読んで,早速やっている人がいたりして...

そんな方,是非報告をお待ちしています.
コーヒーのいっぱいぐらい,ご馳走します.


[2338] Re7:音声合成を使用して動画マニュアル返信 削除
2009/4/28 (火) 23:00:48 TS
▼ Mr.XRAYさん
> う〜ん.なるほど.さて.こちらも
> Visual C++ 2008 Express Edition
> が必要なようですね.私は何かの時だか忘れましたがインストールしてあります.


必要あるんですか。

int[2]型ポインタ array[1..2] of integer でも駄目みたい

どう書いたら良いんですかね。




[2339] Re8:音声合成を使用して動画マニュアル返信 削除
2009/4/28 (火) 23:52:57 Mr.XRAY
> 必要あるんですか。

まだ実際にはやっていないのですが,多分...

> int[2]型ポインタ array[1..2] of integer でも駄目みたい

array [1..2] of PInteger; ではダメですか?


[2342] Re9:音声合成を使用して動画マニュアル返信 削除
2009/4/30 (木) 11:39:30 Mr.XRAY
> array [1..2] of PInteger; ではダメですか?

ん? こんな単純にできましたっけ.ちょっとウソっぽいですね.

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82