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