HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0624
SATTOMCIコマンドの video off について5解決


SATTO

リンク

2010/6/24(Thu) 01:36:46|NO.33407

MCIをつかって動画ファイルの音声のみを再生させたいのですがうまくいきません
そもそも「video off」コマンドは動画非表示という目的ではない?

dialog "", 16 if stat == 0 : end FilePass = refstr onexit *exit_routine mci "open \"" + FilePass + "\" alias HSP" if stat == -1 : dialog "MCIオープン失敗" : end mci "set HSP video off" mci "play HSP" stop *exit_routine mci "close HSP" end



この記事に返信する


ANTARES

リンク

2010/6/24(Thu) 05:40:47|NO.33408

 mci "window id state hide"というのが使えるようですが、
playの後でないとダメなので、一瞬、表示されます。



inovia

リンク

2010/6/24(Thu) 07:17:20|NO.33409

領域外へ追い出す方法(これも一瞬ちらつきます)


dialog "", 16 if stat == 0 : end FilePass = refstr onexit *exit_routine mci "open \"" + FilePass + "\" alias HSP" if stat == -1 : dialog "MCIオープン失敗" : end mci "where HSP source" // 動画のサイズを取得 rec=refstr // HSP 3.1以前 ;dim as,4:i=0 ;repeat 4 ; getstr tmp,rec,i,$20 ; i+=strsize:as.cnt=0+tmp ;loop // HSP 3.2 dim as,4 split rec," ",as // HSPウィンドウ内で再生 mci "window HSP handle "+hwnd // 動画を領域外へ追い出す mci "put HSP destination at -"+as.2+" -"+as.3+" -"+as.0+" -"+as.1 mci "play HSP" stop *exit_routine mci "close HSP" end

hspdsp.dllを使って音声のみ再生。
こちらは最初から音声ストリームしか読み込まないのでちらつきません。
http://homepage2.nifty.com/MJHS/dotou_hsp/plugin.htm


#include "hspdsp.as" dsp_Init ; 初期化 dialog "*",16,"メディアファイル" if stat=0:end // NULLレンダラーで開く dsp_Open refstr,OPEN_NULL_RENDERER ,0,0,0 onexit *exit ; 終了時開放するため dsp_Play2 stop *exit dsp_Close ; メディアファイルを閉じる dsp_Exit ; 開放 end



SATTO

リンク

2010/6/24(Thu) 19:35:38|NO.33414

アドバイスありがとうございます
どうにか解決できそうです



MillkeyStars

リンク

2010/6/25(Fri) 20:21:33|NO.33433

なんとなく弄ってたら、できちゃいました。

screen 0,800,600,0
onexit *p_end

gsel 0
mci "open e:\\test.avi alias media TYPE MPEGVideo style child parent "+hwnd
mci "put media destination at -100 -100 100 100"

mci "play media"
mci "window media state hide" ; ←非表示用 MCI 命令は、プレイした後にすること。これがないと、画面更新がおかしくなります。
stop

*p_end
mci "close media"
end



SATTO

リンク

2010/6/28(Mon) 03:15:55|NO.33481

>>MillkeyStars
アドバイス有難うございます、ここの意見を参考にMCIをいろいろといじりまわして
ようやく使い勝手が分かってきたので実験ソースコードを貼っておきます

//////// 定数を指定して動作を選ぶ //////// #define DEVICE_TYPE 1 // 使用するデバイス種類 (0〜3) #define WINDOW_STYLE 1 // 動画を表示するウィンドウのスタイル(0〜4) #define VIDEO_HIDE 1 // 動画の非表示フラグ (0 = 表示 | 1 = 非表示) #define VIDEO_SIZE 1 // 画面のサイズ(0 = 元サイズ | 1 = ストレッチ | 2 = フルスクリーン) ////////////////////////////////////////// buffer 1 picload dir_exe+"/doclib/cg.gif" w = ginfo_sx : h = ginfo_sy screen 0, ginfo_dispx/2, ginfo_dispy/2 onexit *exit_routine button "open", *restart x = ginfo_cx : y = ginfo_cy pos (ginfo_sx - w)/2, (ginfo_sy - h)/2 gcopy 1, 0, 0, w, h pos x, y stop *start // 再生ファイルを選択 dialog "", 16 if stat == 0 : end FilePass = refstr // ※使用するデバイスタイプ(DEVICE_TYPE) switch DEVICE_TYPE case 1 : devtype = "type mpegvideo" : swbreak // スプリッタとコーデックが揃えば何でも再生できるので、一番有効 case 2 : devtype = "type mpegvideo2" : swbreak case 3 : devtype = "type avivideo" : swbreak default : devtype = "" // 拡張子から自動的に選択 swend // ※表示するウィンドウのスタイル(WINDOW_STYLE) playflags = "" switch WINDOW_STYLE case 1 : wstyle = "style child parent "+hwnd : swbreak // 子ウィンドウ case 2 : wstyle = "style overlapped parent "+hwnd : swbreak // オーバーラップウィンドウ case 3 : wstyle = "style popup parent "+hwnd : swbreak // ポップアップウィンドウ case 4 // メインウィンドウに直接表示 default : wstyle = "" // MCIの独自ウィンドウ swend // MCIを開く mci strf("open \"%s\" alias HSP %s %s",FilePass, devtype, wstyle ) if stat == -1 : dialog "MCIオープン失敗" : goto *exit_routine if WINDOW_STYLE == 4 : mci "window HSP handle " + hwnd // メインウィンドウのハンドルを渡す // ステータスを調べる mci "capability HSP device type" // デバイスタイプ devtype = refstr mci "where HSP source" // 画面サイズ rec=refstr dim as,4 split rec," ",as title strf("デバイスのタイプ:%s / サイズ:%s, %s", devtype, as(2), as(3)) // ※動画の非表示フラグ (VIDEO_HIDE) if VIDEO_HIDE { if WINDOW_STYLE == 4 { mci strf("put HSP destination at -%d -%d %d %d", as(2), as(3), as(0), as(1)) }else{ mci strf("put HSP window at -%d -%d %d %d", as(2), as(3), as(0), as(1)) } mci "play HSP" mci "window HSP state hide" stop } if WINDOW_STYLE == 1 or WINDOW_STYLE == 4{ origin_x = ginfo_cx : origin_y = ginfo_cy origin_w = ginfo_sx-ginfo_cx : origin_h = ginfo_sy-ginfo_cy }else{ origin_x = ginfo_wx1 : origin_y = ginfo_wy1 origin_w = ginfo_sizex : origin_h = ginfo_sizey } // ※動画を表示するウィンドウのスタイル(VIDEO_SIZE) switch VIDEO_SIZE case 1 // ストレッチ video_aspect = 1.0 * int(as(2)) / int(as(3)) window_aspect = 1.0 * origin_w / origin_h if window_aspect < video_aspect { video_w = origin_w video_h = 1.0 * video_w / video_aspect video_x = origin_x video_y = origin_y + (origin_h - video_h) / 2 }else{ video_h = origin_h video_w = 1.0 * video_h * video_aspect video_y = origin_y video_x = origin_x + (origin_w - video_w) / 2 } swbreak case 2 // フルスクリーン wait 10 // ダイアログを閉じた後フルスクリーンをする場合これがないと画面が落ちる mci "play HSP fullscreen" stop // フルスクリーンはここで処理停止 case 0 // 元サイズ default video_w = as(2) video_h = as(3) video_x = origin_x + (origin_w - video_w) / 2 video_y = origin_y + (origin_h - video_h) / 2 swend // 画面の出力位置、サイズを指定 if WINDOW_STYLE == 4 { mci strf("put HSP destination at %d %d %d %d", video_x, video_y, video_w, video_h) }else{ mci strf("put HSP window at %d %d %d %d", video_x, video_y, video_w, video_h) } // 再生 mci "play HSP" stop // 再生しなおす *restart mci "close HSP" goto *start //終了処理 *exit_routine mci "close HSP" end
実験環境
OS:WindowsXP SP3
コーデック:ffdshow
スプリッタ:FLVSplitter.ax, MP4Splitter.ax
上記の環境で手持ちのavi, mpg, wmv, flv, mp4ファイルは一通り再生できました



ONION software Copyright 1997-2021(c) All rights reserved.