7月以降のSearcherの更新内容を全部見落としていたことに私は気がついた(すみません)。格段に便利になっていた。まず#PREVIEW
がsupportされた。これは元々はraindrop拡張preview関連tagsのひとつだったが、beatorajaは#PREVIEW
のみを採用し、以降それが普及しつつあるようだ。ちょっとややこしい振る舞いとして“Song preview autodetects audio files now.”というのがある。
#PREVIEW (音源ファイルパス)
選曲時に対象の楽曲バーにカーソルを合わせることで自動演奏されるプレビュー音源を指定します。指定されていない場合、フォルダ内にあるpreview(*).wav(ogg)をプレビュー音源として自動指定します。
自動検出は既存のBMS fileのhashを変えずに#PREVIEW
に対応できるようにするための措置だろうか。そんなところまでSearcherが面倒を見なくても大丈夫な気はするし、実際Searcherはそこまではお世話しない。“#PREVIEW preview.ogg
”に対して音源がpreview.wavだとSearcherが強制終了するという問題はあるにせよ、ちゃんとpreview音声が鳴って興奮した。ありがとうございました。私はBMSEの#WAV
定義listのような「照準即演奏」型をもともとは想像していたが、今思うに、それはうざい。
あと、directoryごとにseparatorが挿入されるようになって、これがわりと良かった。BOFUやBMS衆議院選のように各作品がteam分けされている場合も、teamごとにseparatorが挟まる。
あと、特に勉強しなくても猿真似できるsample scriptsが用意されていて良かった。例:
bmx2wav_seacher.class.nutやbmx2wav_seacher.nutのcharsetは、ANSI(日本語Windows環境の場合、CP932
≈Shift_JIS
)じゃないと駄目っぽい。ここではbmx2wav_seacher.nutを編集する。
- EXE化済みbeatorajaでAUTOPLAY:
local beatoraja = {
name = "beatoraja",
function execute( target_entry, entries ) {
if ( target_entry.is_dummy ) {
return;
}
::BMX2WAV.create_process(
"D:\\beatoraja0.7.5\\beatoraja.exe",
"-a \"" + target_entry.path + "\"",
"D:\\beatoraja0.7.5"
);
}
};
これを実行した場合、当環境では実際のcommand-lineは以下のような感じになる:
"C:\Program Files\Java\jre1.8.0_231\bin\javaw.exe" -Xms4096m -Xmx8192m -jar "D:\beatoraja0.7.5\beatoraja.exe" -a "D:\b m s\fo on as so.bms"
create_process()
の第三引数は「既定のディレクトリ」らしい。よくわからないがこれはたぶんWindowsのshortcut.lnkとかのPropertyでいうところの「作業フォルダー」というやつじゃないかしら。AUTOPLAYだとあんまり意味ないけど、普通に手動演奏してscoreを残したい場合とかだと、ここの値がnull
のままじゃうまくいかないような気がする。よくわからんけど。
- Meryで開く:
local mery = {
name = "Mery",
function execute( target_entry, entries ) {
if ( target_entry.is_dummy ) {
return;
}
::BMX2WAV.create_process(
"D:\\apps\\Mery\\Mery.exe",
target_entry.path,
null
);
}
};
- BMSのHashを得る(Windows 7以降で有効):
local get_sha256 = {
name = "SHA256",
function execute( target_entry, entries ) {
if ( target_entry.is_dummy ) {
return;
}
::BMX2WAV.system(
"certutil -hashfile \""
+ target_entry.path
+ "\" SHA256"
);
}
};
結果は「スクリプトの標準出力ダイアログ」(SeacherのToolbarのButton-2)に表示される。
「実行結果として得たHash値に基づいてInternet Rankingの当該頁を開く」とかもできそうだけど、「スクリプトの標準出力ダイアログ」からHash値を持ってくる方法がわからない。まあできなくてもいいや。
あとは前述の関数群を、bmx2wav_seacher.nutの末尾あたりから、contextmenu-itemsとして登録するだけ。
::Searcher.entry_processors.items.append( beatoraja );
local sub = ::SubMenu( "ファイル操作", [shell_execute, notepad, get_sha256] );
すぐ上の"絶対パスの表示"
のforeach
らへんを真似すれば、複数の対象のHash値を列挙したりすることもできそう。
英数字を眺めていたらお腹が熱くなってきて叫びだしそうになったので終了。