sample_video_player.hsp

sample\iron\sample_video_player.hsp » Plain Format

;============================================================
;  iron_video サンプル: Media Foundation 動画/音楽プレイヤー
;
;  iron_video.hsp (MFPlay/IMFPMediaPlayer) を使った GUI プレイヤー。
;
;  対応フォーマット: MP4/MKV/AVI/WMV/MOV/MP3/WAV/AAC 等
;  (Windows 標準 Media Foundation コーデックに準拠)
;
;  機能:
;    - ファイル選択ダイアログ
;    - Play / Pause / Stop / FrameStep
;    - 再生速度変更 (0.5x / 1.0x / 1.5x / 2.0x)
;    - 音量スライダ (0-100)
;============================================================

#include "hsp3_net_64.as"
#include "iron_video.hsp"

	title "iron_video — Media Foundation Player"
	screen 0, 800, 600
	font "MS Gothic", 14

	loaded = 0
	rate_idx = 1     ; 0=0.5x  1=1.0x  2=1.5x  3=2.0x
	vol_int = 80     ; 0-100

	; ----- UI -----
	pos 10, 10
	objsize 80, 28
	button gosub "Open", *do_open
	pos 100, 10
	objsize 60, 28
	button gosub "Play", *do_play
	pos 165, 10
	objsize 70, 28
	button gosub "Pause", *do_pause
	pos 240, 10
	objsize 60, 28
	button gosub "Stop", *do_stop
	pos 305, 10
	objsize 60, 28
	button gosub "Step", *do_step

	pos 380, 14
	mes "Speed:"
	pos 430, 10
	objsize 60, 28
	button gosub "0.5x", *do_rate_05
	pos 495, 10
	objsize 60, 28
	button gosub "1.0x", *do_rate_10
	pos 560, 10
	objsize 60, 28
	button gosub "1.5x", *do_rate_15
	pos 625, 10
	objsize 60, 28
	button gosub "2.0x", *do_rate_20

	pos 695, 14
	mes "Vol:"
	pos 725, 10
	objsize 60, 24
	input vol_int, 4, 4, 24

	; 動画表示領域 (背景塗りつぶし)
	color 16, 16, 16 : boxf 10, 50, 790, 540 : color 0, 0, 0
	pos 320, 290
	color 200, 200, 200
	mes "(Open で動画を開く)"
	color 0, 0, 0

	; 状態表示
	pos 10, 555
	mes "状態: 未ロード"

*main_loop
	; 音量を反映
	if loaded {
		iron_video_set_volume 0.01 * double(vol_int)
	}
	; 状態表示
	color 255, 255, 255 : boxf 10, 555, 790, 595 : color 0, 0, 0
	pos 10, 555
	if loaded {
		s = iron_video_state()
		mes "状態 code=" + s + "  (1=Stopped 2=Playing 3=Paused 4=Shutdown)"
	} else {
		mes "状態: 未ロード"
	}
	await 100
	goto *main_loop

;------------------------------------------------------------
*do_open
	dialog "mp4;*.mkv;*.avi;*.wmv;*.mov;*.mp3;*.wav;*.aac;*.m4a", 16, "メディアファイル"
	if stat = 0 : return
	fname = refstr
	; 古い再生があれば閉じる
	if loaded : iron_video_close
	; ウィンドウ全面を再描画 (動画領域の背景)
	color 16, 16, 16 : boxf 10, 50, 790, 540 : color 0, 0, 0
	; HWND 渡しで動画を貼り付け
	iron_video_open fname, hwnd
	loaded = 1
	; 初期速度を反映
	gosub *do_rate_10
	return

*do_play
	if loaded : iron_video_play
	return

*do_pause
	if loaded : iron_video_pause
	return

*do_stop
	if loaded : iron_video_stop
	return

*do_step
	if loaded : iron_video_step
	return

*do_rate_05
	if loaded : iron_video_set_rate 0.5
	return
*do_rate_10
	if loaded : iron_video_set_rate 1.0
	return
*do_rate_15
	if loaded : iron_video_set_rate 1.5
	return
*do_rate_20
	if loaded : iron_video_set_rate 2.0
	return