GetTimetagLyrics/@Main.hsp
の編集
Top
/
GetTimetagLyrics
/
@Main.hsp
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
新規ページテンプレート
#set_tags(GetTimetagLyricsスクリプト) #pre{{ #packopt name "タイムタグ付き歌詞連続取得ツール" #packopt hide 1 #include "user32.as" #include "shell32.as" #include "comctl32.as" #include "kernel32.as" #include "ole32.as" #include "mod_regexp.as" #uselib "imagehlp.dll " #func global MakeSureDirectoryPathExists "MakeSureDirectoryPathExists" str #uselib "shlwapi.dll" #cfunc global PathMatchSpec "PathMatchSpecA" sptr,sptr #include "hspext.as" ;//2バイト文字判定 #define ctype wbyte(%1) ( (( (129<=%1)&(%1<=159) )||( (224<=%1)&(%1<=252) )) ) #include "gblconst-sysval.hsp"; #include "exlistview'.hsp" #include "mp3infp_ExportFunc_HSP.hsp" #include "lua-xl.hsp" #include "Modules.hsp" ;リストビューID #enum LIST_POINT = 0 #enum LIST_FOLDERNAME #enum LIST_FILENAME #enum LIST_TITLE #enum LIST_TITLE_DATA #enum LIST_ARTIST #enum LIST_ARTIST_DATA #enum LIST_ALBUM #enum LIST_ALBUM_DATA #enum LIST_TIME #enum LIST_TIME_DATA #enum LIST_LYRICSITE #enum LIST_DATABASE ;ウィンドウID #define global WindowID_Main 0 #define global WindowID_Setting 2 #define global WindowID_ShowSite 1 ;タイトル #define app_title "タイムタグ付き歌詞連続取得ツール" ;バージョン #define app_version "ver. 0.2.2" ;// メインウィンドウ作成 screen WindowID_Main, ginfo_dispx, ginfo_dispy, 0, ,, 640,480 title app_title ; 自ウィンドウのスタイルを変更 ; $10000 = 最大化ボタン有効 ; $40000 = ウィンドウサイズ可変有効 GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | $10000 | $40000 // 設定変数 FileSavePos = "" ;保存ファイル場所 FileSaveExt = ".lrc" ;保存ファイル拡張子 LyricsMasterPass = "" ;LyricsMasterのパス FileNameFilter = "" ;曲登録時のフィルタ FileNameFilterRegExpCheck = 0 ;フィルタを正規表現にする MusicFileExts="*.mp3,*.m4a,*.wma,*.wav,*.ogg,*ape" ;リスト登録フィルタ Option_CheckerPoint=90 ;チェック基準 Option_WeightTitle=100 Option_WeightArtsit=60 Option_WeightAlbum=40 Option_WeightTime=30 ;//グローバル変数 rec_dat = "" ;データベースの生データ LUA_hmiku = "" ;初音ミクWikiから歌詞を取得するためのLUAスクリプト LUA_touhoukashi="" ;東方同人CDの歌詞@Wikiから歌詞を取得するためのLUAスクリプト hlist = 0 ;リストビューのハンドル tb_hWnd = 0 ;ツールバーのハンドル tb_id(0) = 0 ;ツールバーのボタンID配列 ListViewPos=0,0 ;リストビューの位置 toolbar_height=0 ;ツールバーの高さ ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; Header.hsp ; ; ツールバー作成、割り込み設定、メッセージ処理 ;_______________________________________ #include "Header.hsp" ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; Option.hsp ; ; 設定ウィンドウ作成・処理、LyricsMaster検索中の詳細表示窓 作成 ;_______________________________________ #include "Option.hsp" ;データベースの点数付けの重み割り振り設定 PointInMusicList_option_set Option_WeightTitle, Option_WeightArtsit, Option_WeightAlbum, Option_WeightTime //データベース生データ取得(ネット) rec_dat = GetHTMLSource("http://timetag.main.jp/herodb/timetag/rec.dat", Char_EUC, 1) //歌詞取得LUAスクリプトをロード notesel LUA_hmiku noteload "LUA/www5.atwiki.jp_hmiku.lua" noteunsel notesel LUA_touhoukashi noteload "LUA/www31.atwiki.jp_touhoukashi.lua" noteunsel //リストビュー作成 hlist=Createlstview(0, 0, ListViewPos(1),ginfo_winx,480-ListViewPos(1) ) GetWindowLong hlist, -16 SetWindowLong hlist,-16,stat|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_NOSORTHEADER lsvexset hlist, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES lsvcladd hlist," ",LIST_POINT,0,50,0,0 lsvcladd hlist,"フォルダ",LIST_FOLDERNAME,0,60,0,0 lsvcladd hlist,"ファイル",LIST_FILENAME,0,180,0,0 lsvcladd hlist,"タイトル",LIST_TITLE,0,100,0,0 lsvcladd hlist,"DB",LIST_TITLE_DATA,0,100,0,0 lsvcladd hlist,"アーティスト",LIST_ARTIST,0,100,0,0 lsvcladd hlist,"DB",LIST_ARTIST_DATA,0,100,0,0 lsvcladd hlist,"アルバム",LIST_ALBUM,0,100,0,0 lsvcladd hlist,"DB",LIST_ALBUM_DATA,0,100,0,0 lsvcladd hlist,"再生時間",LIST_TIME,0,60,0,0 lsvcladd hlist,"DB",LIST_TIME_DATA,0,60,0,0 lsvcladd hlist,"歌詞サイト",LIST_LYRICSITE,0,120,0,0 lsvcladd hlist,"データベース",LIST_DATABASE,0,300,0,0 stop ; ; 【ウィンドウ作成 完了】 ;_______________________________________ ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; リストビュー:ファイルをドロップ ; ; 曲登録 処理 ;_______________________________________ *ListViewDrop ;//D&Dハンドル hDrop=wParam ;//D&D個数確認 DragQueryFile hDrop,-1,0,0 DropNum = stat //ツールバーのボタンを使用不可にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_LISTVIEW), 0 ;リストビュー項目の最大数 MaxListNum = lsvcount(hlist, 0) ; sdim DropFileName, 4*1024 MusicTitle="" MusicArtist="" MusicAlbum="" MusicTime="" ;曲除外フィルタを配列へ分解 split FileNameFilter, "|", FileNameFilters :FileNameFilters_num = stat repeat FileNameFilters_num ;ワイルドカード仕様になっていなかったら両側に**を足す if instr(FileNameFilters(cnt),0,"*")=-1 && instr(FileNameFilters(cnt),0,"?")=-1 : FileNameFilters(cnt) = "*"+FileNameFilters(cnt)+"*" loop ;ListView登録 repeat DropNum ;ドロップファイル名 1つ取得 DragQueryFile hDrop, cnt, varptr(DropFileName), 4*1024 //ファイルかフォルダか判断して、フォルダなら下層のファイルを取り出す ;フォルダか確認 dirlist x, DropFileName, 5 if stat=1 { ;フォルダだった d_cur=dir_cur chdir DropFileName+"\\" ;フォルダの下層ファイルを取得 dirlist2h 1, dirlist2 ssize, "*.*",1 sdim files, ssize dirlist2r files chdir d_cur currentadd=1 ;下層ファイルの場合、カレントディレクトリ名を足す必要がある }else { ;ファイルだった files = DropFileName currentadd=0 } // ファイルをリストビューへ登録 notesel files notemax_=notemax noteunsel index=0 repeat notemax_ getstr file, files, index, ,1024 :index+=strsize if currentadd=1 : file = DropFileName+"\\"+file ;フォルダか確認 dirlist x, file, 5 if stat=1 :continue ;フォルダなら弾く ;音楽ファイルか確認 if instr( MusicFileExts, 0, getpath(file,2+16) ) = -1 :continue ;違うなら弾く //曲除外フィルタ設定 if FileNameFilter!"" { if FileNameFilterRegExpCheck = 0 { ;ワイルドカードで除外 flg=0 repeat FileNameFilters_num if PathMatchSpec( getpath(file,8), FileNameFilters(cnt) ) ! 0 :flg=1 :break loop if flg=1 :continue }else { ;正規表現で除外 if match( getpath(file,8), FileNameFilter )!"" :continue } } //曲ファイルから情報を取得 GetMusicInfo file, MusicTitle, MusicArtist, MusicAlbum, MusicTime ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; 曲情報からデータベース内をあいまい検索。 確からしさ(ポイント)とデータを返す。 ; ; PointInMusicList( データベース生データ, "タイトル<>アーティスト<>アルバム<>再生時間(秒)" ) ; 戻り値 : "ポイント<>KEY<>タイトル<>アーティスト<>歌詞サイト<>タイムタグFileName<>wikiURL<>アルバム<>最終更新日時<>再生時間(ミリ秒)<>投稿者<>コメント" ;______________________________________ PIMLstr = PointInMusicList(rec_dat, MusicTitle+"<>"+MusicArtist+"<>"+MusicAlbum+"<>"+str( ( int(submatch(MusicTime,"^(\\d+):\\d+"))*60+int(submatch(MusicTime,"^\\d+:(\\d+)")) )*1000 )) //各情報を抽出 PIMLpoint = int(match(PIMLstr,"^\\d+")) ;ポイント抽出 PIMLtitle = submatch(PIMLstr,"^.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;タイトル抽出 PIMLartist= submatch(PIMLstr,"^.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;アーティスト抽出 PIMLalbum = submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?$") ;アルバム抽出 PIMLsite = submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;歌詞サイト抽出 mtime = int(submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?$")) ;再生時間抽出 mtimem=mtime/60/1000 :mtimes=mtime/1000-mtimem*60 PIMLtime = strf("%d:%02d",mtimem,mtimes) //リストビューへ登録 lsvimadd hlist, str(PIMLpoint), MaxListNum, LIST_POINT ;ポイント lsvsubadd hlist, getpath(file,32), MaxListNum, LIST_FOLDERNAME ;フォルダ lsvsubadd hlist, getpath(file,8), MaxListNum, LIST_FILENAME ;ファイル lsvsubadd hlist, MusicTitle, MaxListNum, LIST_TITLE ;タイトル(ファイル) lsvsubadd hlist, PIMLtitle, MaxListNum, LIST_TITLE_DATA ;タイトル(データベース) lsvsubadd hlist, MusicArtist, MaxListNum, LIST_ARTIST ;アーティスト(ファイル) lsvsubadd hlist, PIMLartist, MaxListNum, LIST_ARTIST_DATA ;アーティスト(データベース) lsvsubadd hlist, MusicAlbum, MaxListNum, LIST_ALBUM ;アルバム(ファイル) lsvsubadd hlist, PIMLalbum, MaxListNum, LIST_ALBUM_DATA ;アルバム(データベース) lsvsubadd hlist, MusicTime, MaxListNum, LIST_TIME ;再生時間(ファイル) lsvsubadd hlist, PIMLtime, MaxListNum, LIST_TIME_DATA ;再生時間(データベース) lsvsubadd hlist, PIMLsite, MaxListNum, LIST_LYRICSITE ;歌詞サイト lsvsubadd hlist, replace(PIMLstr,"^\\d+<>","",,1), MaxListNum, LIST_DATABASE ;データベース生データ(該当列) ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; 既にタイムタグ付き歌詞があるか確認 処理 ; 戻り値: 1=ファイルがある ;_________________________________ FileFolder = getpath(file,32) ;フォルダ名 FileName = getpath(file,8) ;ファイル名 gosub *ExistTimetagFile ; ・もしファイルがあるならチェックは付けない ; ・ポイントが水準以上ならチェックを付ける lsvsetcheck hlist, MaxListNum, (PIMLpoint >= Option_CheckerPoint) *(stat!=1) ;リストビュー総数に+1 MaxListNum++ wait 1 loop loop DragFinish hDrop ;開放 //ツールバーのボタンを使用可能にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_LISTVIEW), 1 return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; リストビュー:「実行」 ; ; タイムタグ付き歌詞取得 処理 ;_______________________________________ *GetTimetagLyrics //LyricsMasterのパスが設定されているか確認する dirlist x, LyricsMasterPass, 5 if stat = 0 { dialog "Lyrics Masterのあるフォルダを登録して下さい" gi_sel = ginfo_sel ;設定ウィンドウ開く gsel WindowID_Setting, 1 gsel gi_sel return } ;//LyricsMasterの設定ファイルをロード(連続取得に最適化) preferences_lyricsmaster = LoadLMpreferences(1) if preferences_lyricsmaster="" : dialog "Lyrics Masterを一度起動して使用規約に同意する必要があります",1 :return //LyricsMasterで検索中、どのサイトから歌詞を拾えば良いかを明示する窓を表示 gi_sel=ginfo_sel gsel WindowID_ShowSite, 2 gsel gi_sel //ツールバーのボタンを使用可能にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_NEXT), 1 sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_STOP), 1 ;リストビュー項目の最大数 MaxListNum = lsvcount(hlist, 0) ;全リスト 処理実行 repeat MaxListNum ;チェック状態確認 if lsvgetcheck(hlist, cnt)=1 { ;処理行選択表示 itemcheck = lsvgetcheck(hlist, cnt) lsvimsel hlist, cnt ;行選択 ;なんかlsvimselで行を選択したらチェックボックスが見えなくなるので見えるようにする lsvsetcheck hlist, cnt, itemcheck ;歌詞を入れる変数。半分フラグ代わりにも使用。 lyrics="" ;リストビューから歌詞サイト取得 lsvgetstr PIMLsite, hlist, cnt, LIST_LYRICSITE //URLが登録されている場合 if instr(PIMLsite, 0, "/http://")!-1 { ;URL抜き出し PIMLsiteURL = submatch(PIMLSite, "/(http://.*)$") ;//認識できる歌詞サイトか確認 if instr(PIMLsiteURL, 0, "http://www5.atwiki.jp/hmiku/")!-1 { //初音ミクWikiである lyrics = GetLyrics( PIMLsiteURL, LUA_hmiku ) ;歌詞を取得 }else : if instr(PIMLsiteURL,0, "http://www31.atwiki.jp/touhoukashi/")!-1 { ;東方同人CDの歌詞@Wikiである lyrics = GetLyrics( PIMLsiteURL, LUA_touhoukashi ) ;歌詞を取得 } } //URLが登録されていない=LyricsMasterで歌詞を取得する if lyrics="" { // LyricsMasterで歌詞を取得する ;リストビューからタイトル取得 lsvgetstr PIMLtitle, hlist, cnt, LIST_TITLE_DATA ;リストビューからアーティスト取得 lsvgetstr PIMLartist, hlist, cnt, LIST_ARTIST_DATA ;PIMLsiteから歌詞サイト名のみを抽出(もしURLがついていれば外す) PIMLsiteName = replace( PIMLsite, "/http://.*$", "" ) //LyricsMasterの設定を上書きする ;検索する歌詞サイトを指定 preferences_lyricsmaster_temp = ReplaceSearchSiteLMpreferences( preferences_lyricsmaster, PIMLsiteName ) ;設定ファイルを上書き保存する SaveLMpreferences preferences_lyricsmaster_temp ;//LyricsMaster起動 exec dirinfo(3)+"\\wscript.exe \""+LyricsMasterPass+"\\ExtSupport.js\" multi \""+PIMLtitle+"\" \""+PIMLartist+"\"" ;どの歌詞サイトから取得すれば良いか明示窓に表示 mes_ShowSiteWindow "("+(cnt+1)+"/"+MaxListNum+") "+PIMLtitle+"\n"+"取得歌詞サイト: "+PIMLsite ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; LyricsMaster起動後、歌詞取得監視 処理(検出するまで出てこない) ; ちゃんと取得できた → lyricsに歌詞が入る ; 「次へ」行くため戻ってきた → lyrics="" ; 「中止」 → lyrics="<中止>" ;____________________________________ gosub *LyricsMasterCheck // if lyrics="<中止>" :break ;タイムタグ付き歌詞取得処理を中止する // } //URLまたはLyricsMasterから歌詞を取得した。→タイムタグ付き歌詞を生成して保存する if lyrics ! "" { ;タイムタグ情報ファイル名を取得 lsvgetstr PIMLstr, hlist, cnt, LIST_DATABASE PIMLtagfile = submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;タイムタグ情報ファイル名抽出 ;//直接タイムタグ情報テキストを取得に行く timetagdata = GetHTMLSource( "http://timetag.main.jp/herodb/timetag/bin/"+PIMLtagfile,,1 ) ;//タイムタグ付き歌詞 生成 TimetagLyrics = ApplyTimetagData( lyrics, timetagdata ) ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; タイムタグ付き歌詞 ファイル保存 処理 ;____________________________________ lsvgetstr FileFolder, hlist, cnt, LIST_FOLDERNAME ;フォルダ取得 lsvgetstr FileName, hlist, cnt, LIST_FILENAME ;ファイル名取得 gosub *TimetagFileSave ;タイムタグ付き歌詞を保存できたらチェックを外す lsvsetcheck hlist, cnt, 0 } } wait 1 loop //LyricsMasterで検索中、どのサイトから歌詞を拾えば良いかを明示する窓を非表示 gi_sel=ginfo_sel gsel WindowID_ShowSite, -1 //メインウィンドウを全面に表示 gsel WindowID_Main, 2 gsel WindowID_Main, 1 gsel gi_sel //ツールバーのボタンを使用不可にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_NEXT), 0 sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_STOP), 0 ;//LyricsMasterの設定を「実行」の最初にロードした状態に戻す SaveLMpreferences_LastLoad return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; LyricsMaster:起動後 ; ; 歌詞取得監視 処理 ;_______________________________________ *LyricsMasterCheck LyricsMasterStep=0 ;ステップフラグ repeat //ステップ0 起動を確認。ウィンドウハンドルを取得する。 if LyricsMasterStep = 0 { ;起動確認 FindWindow "RBWindow","Lyrics Master" if stat!0 { LyricsMaster_hWnd = stat ;LyricsMasterのウィンドウハンドル LyricsMasterStep = 1 } } //ステップ1 メインウィンドウのエディットボックスを監視。歌詞が表示されたら取得する。 if LyricsMasterStep = 1 { ;開いているのを確認したが一度閉じた場合はキャンセル。次の項目へ行く。 IsWindow LyricsMaster_hWnd : if stat=0 :break ;LyricsMasterのリッチエディットの中身を取得 RitchEditStr = GetEdit_LyricsMster(LyricsMaster_hWnd) if RitchEditStr!"" { ;リッチエディット文字列からタイトルやアーティストを抽出、抜き取り、歌詞サイト推定 LMstringDivide RitchEditStr, "", LM_title, LM_artist, LM_website, 2/*LyricsMasterVersion*/ if stat=1 { if replace(PIMLsite,"/http://.*$","") ! LM_website { ;検索中の歌詞サイトと取得した歌詞サイトが異なる場合、確認する。 //メインウィンドウを全面に表示 gi_sel=ginfo_sel gsel WindowID_Main, 2 dialog "取得先の歌詞サイトが異なるようですが続行しますか?\n\nLyricsMaster: "+LM_website,2 gsel WindowID_Main, 1 gsel gi_sel if stat = 7 { ;いいえ SetEdit_LyricsMster LyricsMaster_hWnd, "" ;LyricsMasterのエディットボックスを空欄にする continue } } lyrics = RitchEditStr SetEdit_LyricsMster LyricsMaster_hWnd, "" ;LyricsMasterのエディットボックスを空欄にする ;歌詞取得処理から脱出ステップ LyricsMasterStep = -1 } } } //ステップ-1 歌詞取得処理から脱出 if LyricsMasterStep = -1 { ;+ツールバーから「次へ」コマンド //LyricsMasterが起動していたら閉じる ;起動していなかったら脱出 FindWindow "RBWindow","Lyrics Master" if stat != 0 { ;起動を確認、閉じる sendmsg stat, WM_CLOSE, 0,0 }else { break } } if LyricsMasterStep = -2 { ;ツールバーから「中止」コマンド lyrics = "<中止>" break } wait 150 ;1.5秒ごとに確認する。 loop ;//LyricsMasterを閉じる LyricsMasterStep=0 ;ステップフラグ return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; ファイル操作:保存 ; ; タイムタグ付き歌詞保存 処理 ;_______________________________________ *TimetagFileSave //歌詞を保存 //もし設定で保存先に絶対パスを指定していて保存フォルダがまだ作られていない場合、ややこしいので先に作る ;絶対パスか確認 if match( FileSavePos, "^\\w\\:\\\\" )!""{ //フォルダを確認 dirlist x, FileSavePos, 5 ;ディレクトリ確認 if stat=0 { ;フォルダがない場合作る MakeSureDirectoryPathExists FileSavePos+"\\" ;フォルダ作成(深階層OK) } } ;//保存場所 if FileSavePos = "" { ;曲と同じフォルダ TimetagFileName = FileFolder + getpath(FileName,1) + FileSaveExt }else { ;フォルダ(絶対パス)か確認 dirlist x, FileSavePos, 5 if stat=1 { ;絶対パス TimetagFileName = FileSavePos + "\\" + getpath(FileName,1) + FileSaveExt }else { ;曲の下層フォルダ TimetagFileName = FileFolder + FileSavePos + "\\" +getpath(FileName,1) + FileSaveExt } } //タイムタグ付き歌詞を保存 notesel TimetagLyrics notesave TimetagFileName noteunsel return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; ファイル操作:確認 ; ; 既にタイムタグ付き歌詞があるか確認 処理 ; 戻り値: 1=ファイルがある ;_______________________________________ *ExistTimetagFile ;//保存場所 if FileSavePos = "" { ;曲と同じフォルダ TimetagFileName = FileFolder + getpath(FileName,1) + FileSaveExt }else { ;フォルダ(絶対パス)か確認 dirlist x, FileSavePos, 5 if stat=1 { ;絶対パス TimetagFileName = FileSavePos + "\\" + getpath(FileName,1) + FileSaveExt }else { ;曲の下層フォルダ TimetagFileName = FileFolder + FileSavePos + "\\" +getpath(FileName,1) + FileSaveExt } } exist TimetagFileName if strsize!-1 { return 1 } return 0 ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; リストビュー:「チェックしてない項目を削除」 ; ; チェックしてない項目を削除 処理 ;_______________________________________ *NOCHECKDEL ;リストビュー項目の最大数 MaxListNum = lsvcount(hlist, 0) ;全リスト確認 repeat MaxListNum, 1 ;チェック状態確認 if lsvgetcheck(hlist, MaxListNum-cnt)=0 { lsvimdel hlist, MaxListNum-cnt } loop return }} - mKMSBc <a href="http://bclzakoqhdeb.com/">bclzakoqhdeb</a>, [url=http://ijmrlyayddwi.com/]ijmrlyayddwi[/url], [link=http://chflbistagzn.com/]chflbistagzn[/link], http://tcvgnygzvwgf.com/ -- [[seyajilr]] &new{2021-09-04 (土) 08:22:14}; - XyDzI2 <a href="http://znhvmargsbrl.com/">znhvmargsbrl</a>, [url=http://zgupnkblskqz.com/]zgupnkblskqz[/url], [link=http://popbkjawngdx.com/]popbkjawngdx[/link], http://zkaqbtrdsjva.com/ -- [[qubadoq]] &new{2021-09-09 (木) 02:45:26}; - BSOac7 <a href="http://qcsctwsryrlx.com/">qcsctwsryrlx</a>, [url=http://dizwhedswnnj.com/]dizwhedswnnj[/url], [link=http://giamxbzvxriu.com/]giamxbzvxriu[/link], http://dbgehgnlxzow.com/ -- [[jojfvnsn]] &new{2021-09-09 (木) 05:02:28}; #comment
タイムスタンプを変更しない
#set_tags(GetTimetagLyricsスクリプト) #pre{{ #packopt name "タイムタグ付き歌詞連続取得ツール" #packopt hide 1 #include "user32.as" #include "shell32.as" #include "comctl32.as" #include "kernel32.as" #include "ole32.as" #include "mod_regexp.as" #uselib "imagehlp.dll " #func global MakeSureDirectoryPathExists "MakeSureDirectoryPathExists" str #uselib "shlwapi.dll" #cfunc global PathMatchSpec "PathMatchSpecA" sptr,sptr #include "hspext.as" ;//2バイト文字判定 #define ctype wbyte(%1) ( (( (129<=%1)&(%1<=159) )||( (224<=%1)&(%1<=252) )) ) #include "gblconst-sysval.hsp"; #include "exlistview'.hsp" #include "mp3infp_ExportFunc_HSP.hsp" #include "lua-xl.hsp" #include "Modules.hsp" ;リストビューID #enum LIST_POINT = 0 #enum LIST_FOLDERNAME #enum LIST_FILENAME #enum LIST_TITLE #enum LIST_TITLE_DATA #enum LIST_ARTIST #enum LIST_ARTIST_DATA #enum LIST_ALBUM #enum LIST_ALBUM_DATA #enum LIST_TIME #enum LIST_TIME_DATA #enum LIST_LYRICSITE #enum LIST_DATABASE ;ウィンドウID #define global WindowID_Main 0 #define global WindowID_Setting 2 #define global WindowID_ShowSite 1 ;タイトル #define app_title "タイムタグ付き歌詞連続取得ツール" ;バージョン #define app_version "ver. 0.2.2" ;// メインウィンドウ作成 screen WindowID_Main, ginfo_dispx, ginfo_dispy, 0, ,, 640,480 title app_title ; 自ウィンドウのスタイルを変更 ; $10000 = 最大化ボタン有効 ; $40000 = ウィンドウサイズ可変有効 GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | $10000 | $40000 // 設定変数 FileSavePos = "" ;保存ファイル場所 FileSaveExt = ".lrc" ;保存ファイル拡張子 LyricsMasterPass = "" ;LyricsMasterのパス FileNameFilter = "" ;曲登録時のフィルタ FileNameFilterRegExpCheck = 0 ;フィルタを正規表現にする MusicFileExts="*.mp3,*.m4a,*.wma,*.wav,*.ogg,*ape" ;リスト登録フィルタ Option_CheckerPoint=90 ;チェック基準 Option_WeightTitle=100 Option_WeightArtsit=60 Option_WeightAlbum=40 Option_WeightTime=30 ;//グローバル変数 rec_dat = "" ;データベースの生データ LUA_hmiku = "" ;初音ミクWikiから歌詞を取得するためのLUAスクリプト LUA_touhoukashi="" ;東方同人CDの歌詞@Wikiから歌詞を取得するためのLUAスクリプト hlist = 0 ;リストビューのハンドル tb_hWnd = 0 ;ツールバーのハンドル tb_id(0) = 0 ;ツールバーのボタンID配列 ListViewPos=0,0 ;リストビューの位置 toolbar_height=0 ;ツールバーの高さ ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; Header.hsp ; ; ツールバー作成、割り込み設定、メッセージ処理 ;_______________________________________ #include "Header.hsp" ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; Option.hsp ; ; 設定ウィンドウ作成・処理、LyricsMaster検索中の詳細表示窓 作成 ;_______________________________________ #include "Option.hsp" ;データベースの点数付けの重み割り振り設定 PointInMusicList_option_set Option_WeightTitle, Option_WeightArtsit, Option_WeightAlbum, Option_WeightTime //データベース生データ取得(ネット) rec_dat = GetHTMLSource("http://timetag.main.jp/herodb/timetag/rec.dat", Char_EUC, 1) //歌詞取得LUAスクリプトをロード notesel LUA_hmiku noteload "LUA/www5.atwiki.jp_hmiku.lua" noteunsel notesel LUA_touhoukashi noteload "LUA/www31.atwiki.jp_touhoukashi.lua" noteunsel //リストビュー作成 hlist=Createlstview(0, 0, ListViewPos(1),ginfo_winx,480-ListViewPos(1) ) GetWindowLong hlist, -16 SetWindowLong hlist,-16,stat|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_NOSORTHEADER lsvexset hlist, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES lsvcladd hlist," ",LIST_POINT,0,50,0,0 lsvcladd hlist,"フォルダ",LIST_FOLDERNAME,0,60,0,0 lsvcladd hlist,"ファイル",LIST_FILENAME,0,180,0,0 lsvcladd hlist,"タイトル",LIST_TITLE,0,100,0,0 lsvcladd hlist,"DB",LIST_TITLE_DATA,0,100,0,0 lsvcladd hlist,"アーティスト",LIST_ARTIST,0,100,0,0 lsvcladd hlist,"DB",LIST_ARTIST_DATA,0,100,0,0 lsvcladd hlist,"アルバム",LIST_ALBUM,0,100,0,0 lsvcladd hlist,"DB",LIST_ALBUM_DATA,0,100,0,0 lsvcladd hlist,"再生時間",LIST_TIME,0,60,0,0 lsvcladd hlist,"DB",LIST_TIME_DATA,0,60,0,0 lsvcladd hlist,"歌詞サイト",LIST_LYRICSITE,0,120,0,0 lsvcladd hlist,"データベース",LIST_DATABASE,0,300,0,0 stop ; ; 【ウィンドウ作成 完了】 ;_______________________________________ ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; リストビュー:ファイルをドロップ ; ; 曲登録 処理 ;_______________________________________ *ListViewDrop ;//D&Dハンドル hDrop=wParam ;//D&D個数確認 DragQueryFile hDrop,-1,0,0 DropNum = stat //ツールバーのボタンを使用不可にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_LISTVIEW), 0 ;リストビュー項目の最大数 MaxListNum = lsvcount(hlist, 0) ; sdim DropFileName, 4*1024 MusicTitle="" MusicArtist="" MusicAlbum="" MusicTime="" ;曲除外フィルタを配列へ分解 split FileNameFilter, "|", FileNameFilters :FileNameFilters_num = stat repeat FileNameFilters_num ;ワイルドカード仕様になっていなかったら両側に**を足す if instr(FileNameFilters(cnt),0,"*")=-1 && instr(FileNameFilters(cnt),0,"?")=-1 : FileNameFilters(cnt) = "*"+FileNameFilters(cnt)+"*" loop ;ListView登録 repeat DropNum ;ドロップファイル名 1つ取得 DragQueryFile hDrop, cnt, varptr(DropFileName), 4*1024 //ファイルかフォルダか判断して、フォルダなら下層のファイルを取り出す ;フォルダか確認 dirlist x, DropFileName, 5 if stat=1 { ;フォルダだった d_cur=dir_cur chdir DropFileName+"\\" ;フォルダの下層ファイルを取得 dirlist2h 1, dirlist2 ssize, "*.*",1 sdim files, ssize dirlist2r files chdir d_cur currentadd=1 ;下層ファイルの場合、カレントディレクトリ名を足す必要がある }else { ;ファイルだった files = DropFileName currentadd=0 } // ファイルをリストビューへ登録 notesel files notemax_=notemax noteunsel index=0 repeat notemax_ getstr file, files, index, ,1024 :index+=strsize if currentadd=1 : file = DropFileName+"\\"+file ;フォルダか確認 dirlist x, file, 5 if stat=1 :continue ;フォルダなら弾く ;音楽ファイルか確認 if instr( MusicFileExts, 0, getpath(file,2+16) ) = -1 :continue ;違うなら弾く //曲除外フィルタ設定 if FileNameFilter!"" { if FileNameFilterRegExpCheck = 0 { ;ワイルドカードで除外 flg=0 repeat FileNameFilters_num if PathMatchSpec( getpath(file,8), FileNameFilters(cnt) ) ! 0 :flg=1 :break loop if flg=1 :continue }else { ;正規表現で除外 if match( getpath(file,8), FileNameFilter )!"" :continue } } //曲ファイルから情報を取得 GetMusicInfo file, MusicTitle, MusicArtist, MusicAlbum, MusicTime ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; 曲情報からデータベース内をあいまい検索。 確からしさ(ポイント)とデータを返す。 ; ; PointInMusicList( データベース生データ, "タイトル<>アーティスト<>アルバム<>再生時間(秒)" ) ; 戻り値 : "ポイント<>KEY<>タイトル<>アーティスト<>歌詞サイト<>タイムタグFileName<>wikiURL<>アルバム<>最終更新日時<>再生時間(ミリ秒)<>投稿者<>コメント" ;______________________________________ PIMLstr = PointInMusicList(rec_dat, MusicTitle+"<>"+MusicArtist+"<>"+MusicAlbum+"<>"+str( ( int(submatch(MusicTime,"^(\\d+):\\d+"))*60+int(submatch(MusicTime,"^\\d+:(\\d+)")) )*1000 )) //各情報を抽出 PIMLpoint = int(match(PIMLstr,"^\\d+")) ;ポイント抽出 PIMLtitle = submatch(PIMLstr,"^.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;タイトル抽出 PIMLartist= submatch(PIMLstr,"^.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;アーティスト抽出 PIMLalbum = submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?$") ;アルバム抽出 PIMLsite = submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;歌詞サイト抽出 mtime = int(submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?$")) ;再生時間抽出 mtimem=mtime/60/1000 :mtimes=mtime/1000-mtimem*60 PIMLtime = strf("%d:%02d",mtimem,mtimes) //リストビューへ登録 lsvimadd hlist, str(PIMLpoint), MaxListNum, LIST_POINT ;ポイント lsvsubadd hlist, getpath(file,32), MaxListNum, LIST_FOLDERNAME ;フォルダ lsvsubadd hlist, getpath(file,8), MaxListNum, LIST_FILENAME ;ファイル lsvsubadd hlist, MusicTitle, MaxListNum, LIST_TITLE ;タイトル(ファイル) lsvsubadd hlist, PIMLtitle, MaxListNum, LIST_TITLE_DATA ;タイトル(データベース) lsvsubadd hlist, MusicArtist, MaxListNum, LIST_ARTIST ;アーティスト(ファイル) lsvsubadd hlist, PIMLartist, MaxListNum, LIST_ARTIST_DATA ;アーティスト(データベース) lsvsubadd hlist, MusicAlbum, MaxListNum, LIST_ALBUM ;アルバム(ファイル) lsvsubadd hlist, PIMLalbum, MaxListNum, LIST_ALBUM_DATA ;アルバム(データベース) lsvsubadd hlist, MusicTime, MaxListNum, LIST_TIME ;再生時間(ファイル) lsvsubadd hlist, PIMLtime, MaxListNum, LIST_TIME_DATA ;再生時間(データベース) lsvsubadd hlist, PIMLsite, MaxListNum, LIST_LYRICSITE ;歌詞サイト lsvsubadd hlist, replace(PIMLstr,"^\\d+<>","",,1), MaxListNum, LIST_DATABASE ;データベース生データ(該当列) ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; 既にタイムタグ付き歌詞があるか確認 処理 ; 戻り値: 1=ファイルがある ;_________________________________ FileFolder = getpath(file,32) ;フォルダ名 FileName = getpath(file,8) ;ファイル名 gosub *ExistTimetagFile ; ・もしファイルがあるならチェックは付けない ; ・ポイントが水準以上ならチェックを付ける lsvsetcheck hlist, MaxListNum, (PIMLpoint >= Option_CheckerPoint) *(stat!=1) ;リストビュー総数に+1 MaxListNum++ wait 1 loop loop DragFinish hDrop ;開放 //ツールバーのボタンを使用可能にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_LISTVIEW), 1 return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; リストビュー:「実行」 ; ; タイムタグ付き歌詞取得 処理 ;_______________________________________ *GetTimetagLyrics //LyricsMasterのパスが設定されているか確認する dirlist x, LyricsMasterPass, 5 if stat = 0 { dialog "Lyrics Masterのあるフォルダを登録して下さい" gi_sel = ginfo_sel ;設定ウィンドウ開く gsel WindowID_Setting, 1 gsel gi_sel return } ;//LyricsMasterの設定ファイルをロード(連続取得に最適化) preferences_lyricsmaster = LoadLMpreferences(1) if preferences_lyricsmaster="" : dialog "Lyrics Masterを一度起動して使用規約に同意する必要があります",1 :return //LyricsMasterで検索中、どのサイトから歌詞を拾えば良いかを明示する窓を表示 gi_sel=ginfo_sel gsel WindowID_ShowSite, 2 gsel gi_sel //ツールバーのボタンを使用可能にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_NEXT), 1 sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_STOP), 1 ;リストビュー項目の最大数 MaxListNum = lsvcount(hlist, 0) ;全リスト 処理実行 repeat MaxListNum ;チェック状態確認 if lsvgetcheck(hlist, cnt)=1 { ;処理行選択表示 itemcheck = lsvgetcheck(hlist, cnt) lsvimsel hlist, cnt ;行選択 ;なんかlsvimselで行を選択したらチェックボックスが見えなくなるので見えるようにする lsvsetcheck hlist, cnt, itemcheck ;歌詞を入れる変数。半分フラグ代わりにも使用。 lyrics="" ;リストビューから歌詞サイト取得 lsvgetstr PIMLsite, hlist, cnt, LIST_LYRICSITE //URLが登録されている場合 if instr(PIMLsite, 0, "/http://")!-1 { ;URL抜き出し PIMLsiteURL = submatch(PIMLSite, "/(http://.*)$") ;//認識できる歌詞サイトか確認 if instr(PIMLsiteURL, 0, "http://www5.atwiki.jp/hmiku/")!-1 { //初音ミクWikiである lyrics = GetLyrics( PIMLsiteURL, LUA_hmiku ) ;歌詞を取得 }else : if instr(PIMLsiteURL,0, "http://www31.atwiki.jp/touhoukashi/")!-1 { ;東方同人CDの歌詞@Wikiである lyrics = GetLyrics( PIMLsiteURL, LUA_touhoukashi ) ;歌詞を取得 } } //URLが登録されていない=LyricsMasterで歌詞を取得する if lyrics="" { // LyricsMasterで歌詞を取得する ;リストビューからタイトル取得 lsvgetstr PIMLtitle, hlist, cnt, LIST_TITLE_DATA ;リストビューからアーティスト取得 lsvgetstr PIMLartist, hlist, cnt, LIST_ARTIST_DATA ;PIMLsiteから歌詞サイト名のみを抽出(もしURLがついていれば外す) PIMLsiteName = replace( PIMLsite, "/http://.*$", "" ) //LyricsMasterの設定を上書きする ;検索する歌詞サイトを指定 preferences_lyricsmaster_temp = ReplaceSearchSiteLMpreferences( preferences_lyricsmaster, PIMLsiteName ) ;設定ファイルを上書き保存する SaveLMpreferences preferences_lyricsmaster_temp ;//LyricsMaster起動 exec dirinfo(3)+"\\wscript.exe \""+LyricsMasterPass+"\\ExtSupport.js\" multi \""+PIMLtitle+"\" \""+PIMLartist+"\"" ;どの歌詞サイトから取得すれば良いか明示窓に表示 mes_ShowSiteWindow "("+(cnt+1)+"/"+MaxListNum+") "+PIMLtitle+"\n"+"取得歌詞サイト: "+PIMLsite ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; LyricsMaster起動後、歌詞取得監視 処理(検出するまで出てこない) ; ちゃんと取得できた → lyricsに歌詞が入る ; 「次へ」行くため戻ってきた → lyrics="" ; 「中止」 → lyrics="<中止>" ;____________________________________ gosub *LyricsMasterCheck // if lyrics="<中止>" :break ;タイムタグ付き歌詞取得処理を中止する // } //URLまたはLyricsMasterから歌詞を取得した。→タイムタグ付き歌詞を生成して保存する if lyrics ! "" { ;タイムタグ情報ファイル名を取得 lsvgetstr PIMLstr, hlist, cnt, LIST_DATABASE PIMLtagfile = submatch(PIMLstr,"^.*?<>.*?<>.*?<>.*?<>(.*?)<>.*?<>.*?<>.*?<>.*?<>.*?<>.*?$") ;タイムタグ情報ファイル名抽出 ;//直接タイムタグ情報テキストを取得に行く timetagdata = GetHTMLSource( "http://timetag.main.jp/herodb/timetag/bin/"+PIMLtagfile,,1 ) ;//タイムタグ付き歌詞 生成 TimetagLyrics = ApplyTimetagData( lyrics, timetagdata ) ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; タイムタグ付き歌詞 ファイル保存 処理 ;____________________________________ lsvgetstr FileFolder, hlist, cnt, LIST_FOLDERNAME ;フォルダ取得 lsvgetstr FileName, hlist, cnt, LIST_FILENAME ;ファイル名取得 gosub *TimetagFileSave ;タイムタグ付き歌詞を保存できたらチェックを外す lsvsetcheck hlist, cnt, 0 } } wait 1 loop //LyricsMasterで検索中、どのサイトから歌詞を拾えば良いかを明示する窓を非表示 gi_sel=ginfo_sel gsel WindowID_ShowSite, -1 //メインウィンドウを全面に表示 gsel WindowID_Main, 2 gsel WindowID_Main, 1 gsel gi_sel //ツールバーのボタンを使用不可にする sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_NEXT), 0 sendmsg tb_hWnd, TB_ENABLEBUTTON, tb_id(TB_STOP), 0 ;//LyricsMasterの設定を「実行」の最初にロードした状態に戻す SaveLMpreferences_LastLoad return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; LyricsMaster:起動後 ; ; 歌詞取得監視 処理 ;_______________________________________ *LyricsMasterCheck LyricsMasterStep=0 ;ステップフラグ repeat //ステップ0 起動を確認。ウィンドウハンドルを取得する。 if LyricsMasterStep = 0 { ;起動確認 FindWindow "RBWindow","Lyrics Master" if stat!0 { LyricsMaster_hWnd = stat ;LyricsMasterのウィンドウハンドル LyricsMasterStep = 1 } } //ステップ1 メインウィンドウのエディットボックスを監視。歌詞が表示されたら取得する。 if LyricsMasterStep = 1 { ;開いているのを確認したが一度閉じた場合はキャンセル。次の項目へ行く。 IsWindow LyricsMaster_hWnd : if stat=0 :break ;LyricsMasterのリッチエディットの中身を取得 RitchEditStr = GetEdit_LyricsMster(LyricsMaster_hWnd) if RitchEditStr!"" { ;リッチエディット文字列からタイトルやアーティストを抽出、抜き取り、歌詞サイト推定 LMstringDivide RitchEditStr, "", LM_title, LM_artist, LM_website, 2/*LyricsMasterVersion*/ if stat=1 { if replace(PIMLsite,"/http://.*$","") ! LM_website { ;検索中の歌詞サイトと取得した歌詞サイトが異なる場合、確認する。 //メインウィンドウを全面に表示 gi_sel=ginfo_sel gsel WindowID_Main, 2 dialog "取得先の歌詞サイトが異なるようですが続行しますか?\n\nLyricsMaster: "+LM_website,2 gsel WindowID_Main, 1 gsel gi_sel if stat = 7 { ;いいえ SetEdit_LyricsMster LyricsMaster_hWnd, "" ;LyricsMasterのエディットボックスを空欄にする continue } } lyrics = RitchEditStr SetEdit_LyricsMster LyricsMaster_hWnd, "" ;LyricsMasterのエディットボックスを空欄にする ;歌詞取得処理から脱出ステップ LyricsMasterStep = -1 } } } //ステップ-1 歌詞取得処理から脱出 if LyricsMasterStep = -1 { ;+ツールバーから「次へ」コマンド //LyricsMasterが起動していたら閉じる ;起動していなかったら脱出 FindWindow "RBWindow","Lyrics Master" if stat != 0 { ;起動を確認、閉じる sendmsg stat, WM_CLOSE, 0,0 }else { break } } if LyricsMasterStep = -2 { ;ツールバーから「中止」コマンド lyrics = "<中止>" break } wait 150 ;1.5秒ごとに確認する。 loop ;//LyricsMasterを閉じる LyricsMasterStep=0 ;ステップフラグ return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; ファイル操作:保存 ; ; タイムタグ付き歌詞保存 処理 ;_______________________________________ *TimetagFileSave //歌詞を保存 //もし設定で保存先に絶対パスを指定していて保存フォルダがまだ作られていない場合、ややこしいので先に作る ;絶対パスか確認 if match( FileSavePos, "^\\w\\:\\\\" )!""{ //フォルダを確認 dirlist x, FileSavePos, 5 ;ディレクトリ確認 if stat=0 { ;フォルダがない場合作る MakeSureDirectoryPathExists FileSavePos+"\\" ;フォルダ作成(深階層OK) } } ;//保存場所 if FileSavePos = "" { ;曲と同じフォルダ TimetagFileName = FileFolder + getpath(FileName,1) + FileSaveExt }else { ;フォルダ(絶対パス)か確認 dirlist x, FileSavePos, 5 if stat=1 { ;絶対パス TimetagFileName = FileSavePos + "\\" + getpath(FileName,1) + FileSaveExt }else { ;曲の下層フォルダ TimetagFileName = FileFolder + FileSavePos + "\\" +getpath(FileName,1) + FileSaveExt } } //タイムタグ付き歌詞を保存 notesel TimetagLyrics notesave TimetagFileName noteunsel return ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; ファイル操作:確認 ; ; 既にタイムタグ付き歌詞があるか確認 処理 ; 戻り値: 1=ファイルがある ;_______________________________________ *ExistTimetagFile ;//保存場所 if FileSavePos = "" { ;曲と同じフォルダ TimetagFileName = FileFolder + getpath(FileName,1) + FileSaveExt }else { ;フォルダ(絶対パス)か確認 dirlist x, FileSavePos, 5 if stat=1 { ;絶対パス TimetagFileName = FileSavePos + "\\" + getpath(FileName,1) + FileSaveExt }else { ;曲の下層フォルダ TimetagFileName = FileFolder + FileSavePos + "\\" +getpath(FileName,1) + FileSaveExt } } exist TimetagFileName if strsize!-1 { return 1 } return 0 ; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ; リストビュー:「チェックしてない項目を削除」 ; ; チェックしてない項目を削除 処理 ;_______________________________________ *NOCHECKDEL ;リストビュー項目の最大数 MaxListNum = lsvcount(hlist, 0) ;全リスト確認 repeat MaxListNum, 1 ;チェック状態確認 if lsvgetcheck(hlist, MaxListNum-cnt)=0 { lsvimdel hlist, MaxListNum-cnt } loop return }} - mKMSBc <a href="http://bclzakoqhdeb.com/">bclzakoqhdeb</a>, [url=http://ijmrlyayddwi.com/]ijmrlyayddwi[/url], [link=http://chflbistagzn.com/]chflbistagzn[/link], http://tcvgnygzvwgf.com/ -- [[seyajilr]] &new{2021-09-04 (土) 08:22:14}; - XyDzI2 <a href="http://znhvmargsbrl.com/">znhvmargsbrl</a>, [url=http://zgupnkblskqz.com/]zgupnkblskqz[/url], [link=http://popbkjawngdx.com/]popbkjawngdx[/link], http://zkaqbtrdsjva.com/ -- [[qubadoq]] &new{2021-09-09 (木) 02:45:26}; - BSOac7 <a href="http://qcsctwsryrlx.com/">qcsctwsryrlx</a>, [url=http://dizwhedswnnj.com/]dizwhedswnnj[/url], [link=http://giamxbzvxriu.com/]giamxbzvxriu[/link], http://dbgehgnlxzow.com/ -- [[jojfvnsn]] &new{2021-09-09 (木) 05:02:28}; #comment
テキスト整形のルールを表示する