HSPで簡単なミュージックプレイヤーを作ったのでそれについて書く。
ソフト開発は自己責任でやって下さい。
HSPで紅茶タイマーを作ってみる
HSPでインターバルタイマーを作ってみる
1.HSPとは(自己責任でやってね)
HSPというのはWindows用のソフトを作る開発システムだ。
HSPはHot Soup Processorの略だ。
割と有名なソフトで簡単なソフトからゲームまで色々なものが作れる。
ソフト開発というとマイクロソフトのVisualStudioとかがあるけどこちらは面倒な事は無く軽い。
特にランタイムとか無しで単独で動作するexeファイルも作成可能だ。
さすがに大規模なソフトとなると厳しいが個人用のものなら十分で使いやすい。
これまで色々な所でお世話になっている優れもののソフトだ。
HSP3
2.ミュージックプレイヤーもどきとは(自己責任でやってね)
私は特別音楽好きではないけど出かける時や旅行ではスマホで聞くし、家ではアレクサで聞いている。
それで大きな不満は無いのだがタイマー等を作成してみて次に欲しいのを考えると
ミュージックプレイヤーが頭に浮かんだ。
特に複雑な機能は必要では無く、MP3のあるフォルダを指定するとその中のものをランダム再生して
くれるみたいな単純なものが欲しかったので作ってみる事にした。
表題にミュージックプレイヤー「もどき」とあるのはHSPの仕様として曲をフル再生すると
操作が効かなくなりまた曲の時間や終了タイミングが分かりにくいというのがあるので
それを逆手にとって冒頭の30秒だけ連続再生するものを作ってみた。
これが意外と面白くしばらく使ってみようと思っている。MP3データも結構多数持っているけど
全部聞くのは大変なのでこれなら部分的にだがかなり聞けそうだ。
普通の人にはあまり役に立つとは思えないがパソコンを良く使っていて音楽好きで
HSPに興味がある人が試しに使ってみるのは良いと思う。
3.簡単な説明(自己責任でやってね)
・下記のリストをHSPに貼り付けて HSP(P)-コンパイル+実行 で動作する。
・HSP(P)-実行ファイル自動作成 でexeファイル作成。
・HSP自体の詳しい操作方法はネットで調べて下さい。最新の3.51での動作は確認しています。
・exeファイルをMP3ファイルのあるフォルダに置いて実行すると簡単に使えます。
・exeファイルで実行する時はHSPのhspext.dllファイルを同じフォルダ内に置かないと
フォルダ選択の時にエラーが出ます。
・NwfdにMP3ファイルのあるフォルダを指定してもすぐに再生できます。(Nwfd="D:/MP3" 等)
・初期設定で実行時の位置、効果音、再生秒数が変更できます。位置は1920x1080用。
・効果音はWindows10なら出ると思いますが他のOSでうまく行かない場合は変更して下さい。
同じフォルダにwav、MP3ファイルを置くならパス設定は不要です。(ptn)
・秒数で曲を何秒再生するか指定できます。ほぼフルに聞きたいなら240秒(4分)が良さそう。
・ファイル名にスペースが含まれていると再生できない事があります。
・*Muscnt1内のmmload pmus.(mpo.Icnt),2をmmload pmus.(mpo.Icnt),2,2 にするとフル再生が出来ますが
操作が出来なくなります。exist命令でデータ容量が分かるのでそれで曲の長さを推定する手もあります。
他にmci命令を使うとかあるようなので興味のある人は調べて下さい。
・フォルダ内のMP3、WAVデータを検索して順番を指定、再生するだけのソフトです。
・c:/windows/media を指定すると効果音が色々と聞けます。
・ノートパソコン等の画面の小さいもので使用する時は初期位置を調整するかリンクを作成して
右クリック-プロパティ-互換性-高DPI設定の変更-高DPIスケール設定の上書き
にチェックを入れるとそのままの位置でも使えると思います。
・どこかのソフト例にありそうな程度のソフトなので自己責任で自由に使ってもらっていいです。
・一応、著作権はぷれでたが保持します。(著作権とは良い響きだ)
・記事の無断転載は止めて下さい。
4.全体的なまとめ(自己責任でやってね)
昔、ラジカセでこういう機能があった記憶があるけど懐かしい。
曲数が多くなると聞くのも大変だしどういう曲があるのかも忘れてしまう。
それを探すのに使うのも良いかもしれない。
意外に使えそうなのでしばらく使ってみようと思う。
ほんとにこのHSPは簡単に使えて役に立つ素晴らしいソフトだ。開発者の方に感謝したい。
5.ソースリスト(自己責任でやってね)
;**************************************************
;音楽再生 2019.11 ぷれでた 公開用
;Ver1.0.0 ランダム再生、フォルダ指定
;**************************************************
;初期設定
wx = 1600 :wy = 810 ;ウィンドウの初期位置
ptn = "C:/windows/media/" ;効果音パス
mn1 = ptn + "Windows Navigation Start.wav" ;クリック音
mn2 = ptn + "Alarm01.wav" ;アラーム音
Ptim = 30 ;再生時間(秒)
Mxmn = 500 ;最大曲
;**************************************************
sdim pmus,50,Mxmn ;音楽名
sdim buf,4096,1 ;
dim mpo,Mxmn ;再生順
px = 130 : py = 100 ;表示位置指定
cply = 0 ;クリック音
cply2 = 0 ;アラーム音
Icnt = 0 ;インターバル動作カウント
Acnt = 0 ;全カウント
Mcnt = 0 ;曲数
ITS = 1000 ;1秒毎に割り込み
tmgo = 0 ;タイマー制御
tim = 0 ;タイマー
Ntim = 0 ;現在秒数
Nwfd = dir_cur ;現在フォルダ
#packopt name "Music01" ;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,320,200,0,wx,wy ;ウィンドウサイズ
cls 4:color 255,255,255 ;画面初期化
title "Mプレイヤー Ver.1.0.0 By ぷれでた" ;タイトル表示
gosub *stbtn ;ボタン配置
gosub *LDSound ;効果音読み込み
gosub *DatSet ;データ設定
stop ;一時停止してキー割り込みを待つ
;**************************************************
*statm ;スタート
gosub *ctmstm1 ;音楽&タイマー動作
stop ;一時停止
*restm ;ランダム
gosub *DatSet2 ;データ順再設定
gosub *ctmstm1 ;音楽&タイマー動作
stop ;一時停止
;**************************************************
*stoptm ;ポーズ
if tmgo = 1 { ;動作中
gosub *ctmstm0 ;音楽&タイマー停止
} ;
else { ;停止中
gosub *prttim ;タイマー表示
mmplay 2 ;再生再開
gosub *conttm1 ;タイマー制御
}
stop ;一時停止
*secfd ;フォルダ選択
gosub *ctmstm0 ;音楽&タイマー停止
a = "" ;
selfolder a,"曲フォルダ"
if a!"" { ;
Nwfd = a : chdir a ;フォルダ変更
gosub *DatSet ;データ読み込み
} ;
stop ;一時停止
;**************************************************
*pend ;終了
gosub *ctmstm0 ;音楽&タイマー停止
end ;
;**************************************************
*ctmstm0 ;音楽&タイマー停止
mmstop ;音楽停止
gosub *conttm0 ;タイマー制御
gosub *prttim ;データ表示
gosub *pmsc1 ;クリック音
return ;
*ctmstm1 ;音楽&タイマー動作
gosub *pmsc1 ;クリック音
Icnt = 0 ;
Ntim = 0 ;
gosub *Muscnt1 ;タイマー動作
return ;
;**************************************************
*Muscnt1 ;音楽再生
tim = Ptim ;再生時間
Icnt = Icnt + 1 ;次の曲
if Icnt>Acnt : return ;終了判定
mmload pmus.(mpo.Icnt),2 ;データロード
gosub *prttim ;データ表示
mmplay 2 ;曲演奏
gosub *conttm1 ;タイマー制御
return ;
;**************************************************
*OnTimer ;タイマー割込み
tim = tim - 1 ;
Ntim = Ntim + 1 ;
gosub *prttim ;タイマー表示
if tim<=0 { ;
gosub *Muscnt1 ;音楽再生
if Icnt>Acnt { ;再生終了
gosub *ctmstm0 ;音楽&タイマー停止
gosub *pmsc2 ;終了音
} ;
} ;
return ;
;**************************************************
*prttim ;データ表示
color 0,0,0:boxf 0,0,px+200,py+200:color 255,255,255 ;表示を消す
pos px-80,py-30:mes "No. : "+str(Icnt)+" / "+str(Acnt)+" Time : "+str(tim)+" / "+str(Ntim)
pos px-80,py :mes pmus.(mpo.Icnt) ;現在曲
pos px-80,py+30:mes 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 = 10 : y = 20 ;表示位置指定
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 ;ボタン配置
return ;
;**************************************************
*LDSound ;効果音読み込み
exist mn1 ;ファイルがあるか?
if strsize > 0 : mmload mn1,0 : cply = 1 : pos px-10,py+20 : mes "クリック音あり" ;
exist mn2 ;ファイルがあるか?
if strsize > 0 : mmload mn2,1 : cply2 = 1 : pos px-10,py+40 : mes "アラーム音あり" ;
gosub *pmsc1 ;クリック音
return ;
;**************************************************
*DatSet ;音楽ファイル読み込み
m = 0 : k = 0 ;
notesel buf ;
repeat ;
n = 0 : buf = "" ;MP3とWAV再生
if m = 0 : dirlist buf,"*.MP3",1
if m = 1 : dirlist buf,"*.WAV",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>=2 : break ;
loop ;
Acnt = k ;全曲数
gosub *prttim ;データ表示
return ;
;**************************************************
*DatSet2 ;音楽ランダム再生
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 ;
;**************************************************