sample24_DVDPlayer.hsp

sample\hspdsp\sample24_DVDPlayer.hsp » Plain Format

#include "hspdsp.as"

/*******************************************************************************
/ DVD Player サンプル
/ dsp_DVD 〜 で始まる命令は現在マニュアルがありません。
/ 作者サイトで新しいバージョンが作成されている場合があるので確認してください。
/ https://hsp.moe/
/ また、再生できない場合はMPEG2デコーダが別途必要な場合があります。
*******************************************************************************/

	screen 0, 640, 480, 0 ; 動画ウィンドウ
		title "DVD Player サンプル"
		boxf : hwnd_main = hwnd 
		
	screen 1, 320, 40, 4+8; コントローラー
		title "コントローラー"
		gsel 1, 2 : boxf : color 255, 255, 255

		dl = "A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ"
		objsize 40, 20
		combox drive, 100, dl
		pos 46,3
		font "", 12, 16
		mes "ドライブ"
		
		objsize 90, 20
		pos 0,20
		button gosub "Open", *open
		
		objsize 40, 40
		pos 90, 0
		button gosub "Close", *close
		
		objsize 40, 40
		pos 130, 0
		button gosub "Play", *play

		objsize 40, 40
		pos 170, 0
		button gosub "Pause", *pause

		chaplist = "ChapterList"
		objsize 110, 20
		pos 210, 0
		combox chapid, 100, chaplist : objid_chap = stat

		objsize 110, 20
		pos 210, 20
		button gosub "ChapJump", *chapjump

	openflag = 0	// オープンフラグ

	repeat
		// 現在の再生状況を取得
		dsp_GetDVDCurrentLocation t, c, h, m, s
		title "タイトル:"+t+" チャプタ:"+c+" "+h+"時間 "+m+"分 "+s+"秒 "
		wait 12
	loop
	
	stop
*open
	// DVDドライブをオープン
	if openflag == 0{
		// ドライブのパスを取得&DVD_VIDEOかチェック
		notesel dl
		noteget tmp, drive
		path = ""+tmp+":\\VIDEO_TS"
		exist path+"\\VIDEO_TS.IFO"
		if strsize == -1 : dialog "DVD_VIDEOではないようです" : return
		dsp_DVDOpen path, AM_DVD_HWDEC_PREFER
		if stat != 0 : dialog "再生エラーが発生しました" : return
		dsp_DVDPlay hwnd_main, 0, 0, 640, 480

		// タイトル数とチャプタ数を取得する
		chapter = 0
		dsp_GetDVDVolumeInfo numVolumes, curVolume, discSide, numTitles
		repeat numTitles
			chapter.cnt = dsp_GetDVDChapters(cnt+1)	// タイトル番号は 1 から始まります。
		loop

		// チャプタ移動用の文字列作成
		chaplist = ""
		repeat length(chapter)
			_cnt = cnt
			repeat chapter.cnt
				chaplist += ""+(_cnt+1)+"-"+(cnt+1)+"\n"
			loop
		loop
		objprm objid_chap, chaplist	// リスト更新
		
		openflag = 1
	}else{
		dialog "一度クローズしてから実行してください。"
	}
return
*close
	if openflag == 1{
		dsp_DVDStop
		dsp_DVDClose
		openflag = 0
	}
return

*play
	if openflag == 1{
		dsp_DVDPlay hwnd_main, 0, 0, 640, 480
		dsp_DVDPlayForwards
	}
return

*pause
	if openflag == 1{
		dsp_DVDPause
	}
return

*chapjump
	if openflag == 1{
		
		// 選択されたタイトルとチャプタ番号を取得
		notesel chaplist
		noteget tmp, chapid

		spl = ""
		split tmp, "-", spl
		if length(spl) != 2 : return 
		
		tt = int(spl.0)	// タイトル番号
		cp = int(spl.1)	// チャプタ番号

		dsp_DVDPlayChapterInTitle tt, cp
		
	}
return