


HSPで簡単な動画プレイヤーを作ったのでそれについて書く。
ソフト開発は自己責任でやって下さい。
1.HSPとは(自己責任でやってね)

HSPというのはWindows用のソフトを作る開発システムだ。
HSPはHot Soup Processorの略だ。
割と有名なソフトで簡単なソフトからゲームまで色々なものが作れる。
ソフト開発というとマイクロソフトのVisualStudioとかがあるけどこちらは面倒な事は無く軽い。
特にランタイムとか無しで単独で動作するexeファイルも作成可能だ。
さすがに大規模なソフトとなると厳しいが個人用のものなら十分で使いやすい。
これまで色々な所でお世話になっている優れもののソフトだ。
HSP3
2.動画プレイヤーもどきとは(自己責任でやってね)

以前、ミュージックプレイヤーを作成して楽しんでいたがそれを改造した物だ。
以下の機能が加わっている。
・WMVの動作再生可能。(MP3も可能、他のフォーマットは未確認だがおそらくMP4も可能)
・聞いた曲名をファイルに保存してソフトを終了後再度使用しても重複再生しない。
・再生するフォルダを選択可能。
・指定曲を長時間再生。(バグがありそうだし簡易的な物なので使える範囲でどうそ)
普通の人にはあまり役に立つとは思えないがパソコンを良く使っていて動画データを多く持っていて
HSPに興味がある人が試しに使ってみるのは良いと思う。
3.簡単な説明(自己責任でやってね)

・下記のリストをHSPに貼り付けて HSP(P)-コンパイル+実行 で動作する。
・HSP(P)-実行ファイル自動作成 でexeファイル作成。
・HSP自体の詳しい操作方法はネットで調べて下さい。最新の3.51での動作は確認しています。
・フォルダ内のMP3、WAV、WMVデータを検索して順番を指定、再生するだけのソフトです。
・ファイル名に半角スペースが入っていると再生できない事があります。
・ノートパソコン等の画面の小さいもので使用する時は初期位置を調整するかリンクを作成して
右クリック-プロパティ-互換性-高DPI設定の変更-高DPIスケール設定の上書き
にチェックを入れるとそのままの位置でも使えると思います。
・冒頭の初期設定で下記の設定が可能です。
・c:/windows/media を指定すると効果音が色々と聞けます。
・実行時の位置、効果音、再生秒数が変更できます。位置は1920x1080用。
(効果音はWindows10なら出ると思いますが他のOSでうまく行かない場合は変更して下さい)
同じフォルダにwav、MP3ファイルを置くならパス設定は不要です。(ptn)
・秒数で曲を何秒再生するか指定できます。フル再生時の秒数制限。
・動画は720×400用に調整しているのでうまく再生出来ない場合はウィンドウ関連項目を変更。
・使用するデータ拡張子。
・フル再生時の計算定数。(ファイルデータ容量から計算する簡易的なものです)
・再生する動画フォルダ。(これを自分用に設定するのがお勧め)
あるいはexeファイルを動画フォルダに置いて使用。
・ベクターにアップされている音量調整DLLを使用する時の設定音量。
・フォルダ選択にはhspext.dll、音量設定にはKexMP3.DLLが必要。
・再生済み動画Enms.dat、フル再生名Fpms.datです。
フル再生はエディタで編集しても良いですが簡易的なものなので余りこの機能は使わない方がいいです。
・どこかのソフト例にありそうな程度のソフトなので自己責任で自由に使ってもらっていいです。
・一応、著作権はぷれでたが保持します。(著作権とは良い響きだ)
・記事の無断転載は止めて下さい。
KexMP3.DLL
4.全体的なまとめ(自己責任でやってね)

動画もフルで見ると時間がかかるのでこれは意外と便利だ。
いくつか機能も追加してこれも面白い。それの一方でバグも発生するのが厄介。
使える範囲で軽く使うのが良いだろうと思う。
ほんとにこのHSPは簡単に使えて役に立つ素晴らしいソフトだ。開発者の方に感謝したい。

5.ソースリスト(自己責任でやってね)

;**************************************************
;音楽再生 2019.12 ぷれでた 公開用
;Ver1.0.0 ランダムのみ、60秒
;Ver1.0.1 再生曲、フル曲記録追加
;Ver1.0.2 公開用に変更
;**************************************************
;初期設定
wx = 480 : wy = 240 ;ウィンドウの初期位置
sx = 800 : sy = 520 ;ウィンドウサイズ
ptn = "C:/windows/media/" ;効果音パス
mn1 = ptn + "Windows Navigation Start.wav" ;クリック音
mn2 = ptn + "Alarm01.wav" ;アラーム音
Ptim = 60 ;再生時間(秒)
Mxmn = 500 ;最大曲
Dtcv = 131100 ;MP3:15800 WMV:131100
Dtcv2 = 15800 ;MP3:15800 WMV:131100
Mtim = 300 ;1曲の最大時間
Dft1 = "*.MP3" ;データ拡張子
Dft2 = "*.WAV" ;データ拡張子
Dft3 = "*.WMV" ;データ拡張子
;Nwfd = "D:/MPEG" ;動画フォルダ
;chdir Nwfd ;動画フォルダ移動
;#include "KexMP3.as" ;音量調整
;MP3Ready 30,30,100 ;音量設定
;**************************************************
sdim pmus,50,Mxmn ;音楽名
sdim enms,50,Mxmn ;再生済み音楽名
sdim fpms,50,Mxmn ;全曲再生音楽名
sdim buf,4096,1 ;
dim mpo,Mxmn ;再生順
dim mptm,Mxmn ;再生時間
px = 40 : py = 45 ;表示位置指定
cply = 0 ;クリック音
cply2 = 0 ;アラーム音
Icnt = 0 ;インターバル動作カウント
Acnt = 0 ;全カウント
Mcnt = 0 ;曲数
ITS = 1000 ;1秒毎に割り込み
tmgo = 0 ;タイマー制御
tim = 0 ;タイマー
Ntim = 0 ;現在秒数
Ecnt = 0 ;演奏済み曲数
Fcnt = 0 ;フル再生曲数
#packopt name "Video01" ;exeファイル名
#define WM_TIMER 0x0113 ;タイマーメッセージ
#define TIMER_ID 1 ;タイマーID
#include "user32.as" ;タイマーAPI
#include "hspext.as" ;フォルダ選択
randomize ;乱数発生
oncmd gosub *OnTimer, WM_TIMER ;タイマー割込み
onexit *pend ;ウィンドウの×ボタンで終了
screen 0,sx,sy,0,wx,wy ;ウィンドウサイズ
cls 4:color 255,255,255 ;画面初期化
title "VP Ver.1.0.2 By ぷれでた" ;タイトル表示
gosub *stbtn ;ボタン配置
gosub *LDSound ;効果音読み込み
gosub *Rdenms ;再生済み音楽読込
gosub *DatSet ;データ設定
gosub *Rdfpms ;フル再生音楽読込
gosub *Chkfpms ;フル再生音楽チェック
stop ;一時停止してキー割り込みを待つ
;**************************************************
*statm ;ランダム
gosub *DatSet2 ;データ順再設定
gosub *ctmstm1 ;音楽&タイマー動作
stop ;一時停止
*restm ;1分
gosub *ctmstm1 ;音楽&タイマー動作
stop ;一時停止
;**************************************************
*stoptm ;ポーズ
if tmgo = 1 { ;動作中
gosub *ctmstm0 ;音楽&タイマー停止
} ;
else { ;停止中
gosub *prttim ;タイマー表示
mmplay 2 ;再生再開
gosub *conttm1 ;タイマー制御
}
stop ;一時停止
*secfd ;フル再生曲記録
gosub *Wtfpms ;フル再生音楽記録
stop ;一時停止
*secfd2 ;フォルダ選択
gosub *ctmstm0 ;音楽&タイマー停止
a = "" ;
selfolder a,"曲フォルダ"
if a!"" { ;
Nwfd = a ;
chdir a ;フォルダ変更
gosub *Rdenms ;再生済み音楽読込
gosub *DatSet ;データ読み込み
gosub *Rdfpms ;フル再生音楽読込
gosub *Chkfpms ;フル再生音楽チェック
gosub *prttim ;タイマー表示
} ;
stop ;一時停止
*nxtms ;次の曲
gosub *Muscnt1 ;音楽再生
if Icnt>Acnt : gosub *ctedms ;再生終了
stop ;一時停止
;**************************************************
*pend ;終了
gosub *ctmstm0 ;音楽&タイマー停止
if Icnt>=Acnt : Ecnt=0 : enms.1="" ;演奏済みデータリセット
if Acnt>0 : gosub *Wtenms ;再生済み音楽記録
end ;
;**************************************************
*ctmstm0 ;音楽&タイマー停止
mmstop ;音楽停止
gosub *conttm0 ;タイマー制御
gosub *prttim ;データ表示
gosub *pmsc1 ;クリック音
return ;
*ctmstm1 ;音楽&タイマー動作
if Acnt = 0 : return ;バグ対策
gosub *pmsc1 ;クリック音
Icnt = 0 ;
Ntim = 0 ;
gosub *Muscnt1 ;音楽再生
return ;
*ctedms ;再生終了
if Acnt = 0 : return ;バグ対策
Icnt = Acnt ;
gosub *ctmstm0 ;音楽&タイマー停止
gosub *pmsc2 ;終了音
Ecnt=0:enms.1="" ;演奏済みデータリセット
gosub *Wtenms ;再生済み音楽記録
return ;
;**************************************************
*Muscnt1 ;音楽再生
Icnt = Icnt + 1 ;次の曲
if Icnt>Acnt : return ;終了判定
repeat ;演奏済み曲チェック
x = 1 : b = 0 ;
a = pmus.(mpo.Icnt) ;曲名
repeat ;
if x>Ecnt : enms.x = a : Ecnt=Ecnt+1 : b = 1 : break ;未演奏
if a=enms.x : break ;演奏済み
x = x + 1 ;
loop ;
if b = 1 : break ;未演奏
Icnt = Icnt + 1 ;次の曲チェック
loop ;
if Icnt>Acnt : return ;終了判定
;color 0,0,0:boxf 450,0,px+800,py:color 255,255,255 ;表示を消す
mmload pmus.(mpo.Icnt),2 ;データロード
tim = mptm.(mpo.Icnt) ;再生時間
gosub *prttim ;データ表示
mmplay 2 ;曲演奏
gosub *conttm1 ;タイマー制御
return ;
;**************************************************
*OnTimer ;タイマー割込み
tim = tim - 1 ;
Ntim = Ntim + 1 ;
if tim<=0 { ;
gosub *Muscnt1 ;音楽再生
if Icnt>Acnt { ;再生終了
gosub *ctedms ;再生終了
return ;
} ;
} ;
gosub *prttim ;タイマー表示
return ;
;**************************************************
*prttim ;データ表示
color 0,0,0:boxf 0,0,px+800,py+400:color 255,255,255 ;表示を消す
pos px,py:mes "No. : "+str(Icnt)+" / "+str(Acnt)+" / "+str(Ecnt)+" / "+str(Fcnt)+" Time : "+str(tim)+" / "+str(Ntim)+" "+pmus.(mpo.Icnt)+" "+Nwfd ;再生情報
return ;
;**************************************************
*conttm0 ;タイマー制御
KillTimer hwnd, TIMER_ID : tmgo = 0 ;タイマー停止
return ;
*conttm1 ;タイマー制御
SetTimer hwnd, TIMER_ID, ITS, 0 : tmgo = 1 ;タイマー起動 1S
return ;
;**************************************************
*pmsc1 ;クリック音
if cply = 1 : mmplay 0 ;音源ありなら再生
return ;
*pmsc2 ;アラーム音
if cply2 = 1 : mmplay 1 ;音源ありなら再生
return ;
;**************************************************
*stbtn ;ボタン配置
x = 40 : y = 10 ;表示位置指定
objsize 70,24 ;ボタン大きさ
pos x ,y:button "ランダム",*statm ;ボタン配置
pos x+ 80,y:button "アルファ",*restm ;ボタン配置
pos x+160,y:button "一時停止",*stoptm ;ボタン配置
pos x+240,y:button "フル記録",*secfd ;ボタン配置
pos x+320,y:button "フォルダ",*secfd2 ;ボタン配置
pos x+400,y:button "次の動画",*nxtms ;ボタン配置
return ;
;**************************************************
*LDSound ;効果音読み込み
exist mn1 ;ファイルがあるか?
if strsize > 0 : mmload mn1,0 : cply = 1 : pos px+500,py-30 : mes "クリック音あり" ;
exist mn2 ;ファイルがあるか?
if strsize > 0 : mmload mn2,1 : cply2 = 1 : pos px+630,py-30 : mes "アラーム音あり" ;
gosub *pmsc1 ;クリック音
wait 100 ;
return ;
;**************************************************
*DatSet ;音楽ファイル読み込み
m = 0 : k = 0 ;
notesel buf ;
repeat ;
n = 0 : buf = "" ;MP3とWAV再生
if m = 0 : dirlist buf,Dft1,1
if m = 1 : dirlist buf,Dft2,1
if m = 2 : dirlist buf,Dft3,1
repeat ;
noteget a,n ;データを得る
if a="" : break ;データ無しなら終了
k = k + 1 : n = n + 1 ;
pmus.k = a ;ファイル名にスペースがあると
mpo.k = k ;再生できない
if k>=Mxmn : break ;最大曲制限
loop ;
m = m + 1:if m>=3 : break ;
loop ;
Acnt = k ;全曲数
gosub *prttim ;データ表示
return ;
;**************************************************
*DatSet2 ;音楽ランダム再生
if Acnt = 0 : return ;バグ対策
n = 1 ;再生順再指定
repeat ;
repeat ;
m = rnd(Acnt) + 1 ;ランダム
k = 1 ;
repeat ;
if mpo.k = m : break
k =k + 1 ;
if k>n : break ;
loop ;
if k>n : break ;
loop ;
mpo.n = m ;
n = n + 1 ;
if n>Acnt : break ;
loop ;
return ;
;**************************************************
*Rdenms ;再生済み音楽読込
fnam = "Enms.dat" ;
dat = "" ;
notesel dat ;データバッファ設定
exist fnam ;
if strsize = -1 : notesave fnam ;ファイル作成
noteload fnam ;データ読み込み
n = 0 ;
repeat ;
noteget buf,n ;
if buf="" : break ;
n = n + 1 ;
enms.n = buf ;
if n >= Mxmn : break ;最大曲制限
loop ;
Ecnt = n ;再生終了曲数
return ;
;**************************************************
*Wtenms ;再生済み音楽記録
fnam = "Enms.dat" ;
dat = "" ;
notesel dat ;データバッファ設定
n = 1 ;
repeat ;
if enms.n="" : break ;
noteadd enms.n ;データ追加
n = n + 1 ;
if n > Ecnt : break ;
loop ;
notesave fnam ;データ記録
return ;
;**************************************************
*Rdfpms ;フル再生音楽読込
fnam = "Fpms.dat" ;
dat = "" ;
notesel dat ;データバッファ設定
exist fnam ;
if strsize = -1 : return ;ファイル無しで処理終了
noteload fnam ;
n = 0 ;
repeat ;
noteget buf,n ;
if buf="" : break ;
n = n + 1 ;
fpms.n = buf ;
if n >= Mxmn : break ;最大曲制限
loop ;
Fcnt = n ;フル再生曲数
return ;
;**************************************************
*Wtfpms ;フル再生音楽記録
if Acnt = 0 : return ;バグ対策
fnam = "Fpms.dat" ;
dat = "" ;
notesel dat ;データバッファ設定
a = pmus.(mpo.Icnt) ;
n = 1 ;
repeat ;
if n > Fcnt : break ;記録曲なし
if a = fpms.n : break ;記録曲あり
noteadd fpms.n ;データ追加
n = n + 1 ;
loop ;
if n<=Fcnt : return ;記録しない
Fcnt = Fcnt + 1 ;
fpms.n = a ;
noteadd a ;データ追加
notesave fnam ;データ記録
pos px+500,py-30:mes " 記録 : "+a ;現在フォルダ
return ;
;**************************************************
*Chkfpms ;フル再生音楽チェック
n = 1 ;
repeat ;
if n>Acnt : break ;
exist pmus.n ;ファイル容量
if strsize = -1 { ;ファイル無しで
mptm.n = 1 ;1秒
} ;
else { ;ファイルあり
mptm.n = Ptim ;
a = strmid(pmus.n,-1,3) ;
if (a="WMV")|(a="wmv") : mptm.n = strsize / Dtcv ;再生秒数
if (a="MP3")|(a="mp3") : mptm.n = strsize / Dtcv2 ;再生秒数
if mptm.n > Mtim : mptm.n = Mtim ;最大5分
} ;
if mptm.n > Ptim { ;曲が長い場合確認
gosub *Chkfpms2 ;フル再生音楽チェック
if an = 0 : mptm.n = Ptim ;短時間再生
} ;
n = n + 1 ;
loop ;
return ;
*Chkfpms2 ;フル再生音楽チェック
x = 1 : an = 0 ;
repeat ;曲名一致するか?
if x>Fcnt : break ;
if pmus.n = fpms.x : an = 1 : break ;
x = x + 1 ;
loop ;
return ;
;**************************************************