落書き帳

ちょっとしたメモ置き場

BMS 関連のわざわざページを作るまでもないちょっとしたメモを適当に置いておきます。
不定期で増えたり減ったりすると思います。

雑なので要注意。

BMS ファイル

譜面製作時に気をつけたいこと

  • #TITLE内のサブタイトルに(長音符) を使用しない

    • LR2 では#TITLE内のサブタイトル内になどの括弧を入れると正常に読み込めなくなるバグがあります
      • #TITLE タイトル [アナザー]← これはダメ
      • #TITLE タイトル, #SUBTITLE [アナザー]←これはOK
  • #SUBTITLEを使用する際に気をつけること

    • LR2 では#SUBTITLEを使用していてかつ、#TITLE内にサブタイトルとして認識される部分があるとその部分が無視されます
      • #TITLE タイトル ~サブタイトル~, #SUBTITLE [Another]←これがタイトル [Another]となってしまう

LR2

遅延対策

  • LR2遅延対策入門

  • NVIDIA の GPU を使用している場合

    • NVIDIA コントロールパネルから Low Latency ModeUltra にする

難易度表

次期難易度表フォーマット

データ部のURLに相対パスを用いる場合の注意

ヘッダー内のデータ部の URL を相対パスとした場合の基準となる URL が難易度表の仕様で定まっていないため、処理が実装により異なります。(実際に BMSeeker と GLA で処理が異なる)
そのためヘッダーとデータの json ファイルが別のディレクトリにある場合は、ヘッダー内のデータ部の URL を絶対パスにしたほうが無難かもしれません。

json を作成する

song.db から json を作成する

以下のツールは SQLite のテーブルデータを json で出力することができます

SQLite Online を使用した json の出力方法

  1. SQLite Onlinesong.dbを開く
  2. songテーブルからSELECT文を用いて出力したい曲リストを選択する
    • このときAS句を使用してhashのカラム名をmd5としておくとよい
  3. 「Export」→「→ JSON」で json として出力する

SQLの例

SELECT level, title, artist, hash as md5
	FROM song
    WHERE title like "FREEDOM DiVE%"
    ORDER by level

ソフトウェア

wav → ogg 変換

  • oggenc2 - wav -> ogg変換を行うコマンドラインツール
    • フォルダ内のすべての wav を ogg に変換するバッチファイル
      • @echo off
        for /R %%i in (*.wav) do oggenc2.exe -Q "%%i" >nul

ogg → wav 変換

  • oggdec - ogg -> wav変換を行うコマンドラインツール
    • フォルダ内のすべての ogg を wav に変換するコマンド
      • oggdec *.ogg

バッチファイルにパスを通しておくと便利。

動画 BGA 関連

BMS command memo によると

  • 最も互換性が高い形式は MPEG1 (256x256) です。

らしい。

FFmpeg を使用して動画ファイルを上記の形式にエンコードするバッチファイル

@echo off

set OFN=%~1
set FN=%~n1

ffmpeg ^
  -i "%OFN%" -pass 1 ^
  -c:v mpeg1video -b:v 2M ^
  -vf "scale=256:256:force_original_aspect_ratio=decrease,pad=256:256:(ow-iw)/2:(oh-ih)/2" ^
  -an -y ^
  "_out_%FN%.mpg" && ^
ffmpeg ^
  -i "%OFN%" -pass 2 ^
  -c:v mpeg1video -b:v 2M ^
  -vf "scale=256:256:force_original_aspect_ratio=decrease,pad=256:256:(ow-iw)/2:(oh-ih)/2" ^
  -an -y ^
  "_out_%FN%.mpg"

del ffmpeg2pass-0.log

bgaenc.bat "bga.mp4"のように使用します。
アスペクト比が異なる場合はレターボックスが追加されます。
エンコードした動画ファイルを既存の譜面にも読み込ませたいときは拡張子を元の拡張子に合わせる必要があります。

音量

SoX を使用した音量を一括変更するバッチファイル

@echo off
mkdir converted
for %%i in (*.wav) do sox %%i "converted/%%i" gain %1

wavgain.bat +2のように使用します。引数で音量の変更量をdbで指定します。
変換後のファイルはconvertedフォルダに生成されます。
音割れが発生すると警告が表示されます。

uBMplay のインストール

収集

ダウンロード

  • Wget for Windows - コマンドラインダウンローダ

    • 再帰ダウンロードなどができます。とても収集向き。
    • あるディレクトリ以下のファイルをまとめてダウンロード
      • wget -r http://...
        • -r: 再帰的に取得する
        • -l: 再帰の深さ
        • 他にも便利なオプションがたくさんあります。詳しくはググってください。
    • URL リスト内の URL をすべてダウンロード
      • wget -i list.txt
        • list.txtは各行に URL を記述したテキストファイル
  • 現在のページ内にある URL リストをコンソールに出力するだけのブックマークレット

    • javascript:var str="";Array.prototype.forEach.call(document.querySelectorAll("a"),function(r){str+=r.href+"\n"}),console.log(str);
      
    • 上の文字列を URL に指定したブックマークレットを作成し、そのブックマークレットを開くことで実行できます
    • コンソールは Chrome ならCtrl + Shift + Jで開けます。

展開

  • 7-Zip - ファイルアーカイバ

    • "*\" に展開を使用することでいわゆるだばぁを防げます
  • tree

    • ディレクトリ構造をツリー形式で表示するコマンド
    • tree > tree.txtとすると結果をファイルに出力できます
    • 多重階層になってしまっている bms を見つけたいときなどに
      • ├─[0310] Echoes from Pangaea                     
        ├─[13eastie] Mermaid Breeze                      
        ├─[140/fth + ルゼ] Just one word                   
        │  └─no_notes                                    
        ├─[69 de 74 + morph] CHAOTIC DESTRUCTION         
        ├─[69 de 74] マッドメチャクチャニズム                        
        ├─[7mai] Boxel Adventure                         
        ├─[@On_OTL] Shadow_Templer                       
        ├─[A-ZERO Project + iF + TeePy] EMOJISM
  • 多重フォルダ解除 - 無駄に回層が深い、いわゆる多重フォルダを一回層に変更するツール

Internet Archive 関連

  • サイト内の IA に保管されているすべてのファイルを表示する

  • 上記のファイル一覧の URL をhttps://web.archive.org/web/*/http://...からhttps://web.archive.org/web/19900101/http://...と変換するだけのブックマークレット

    • リンク先がファイルの日付選択画面からファイルへのリンクへ変わります
    • javascript:Array.prototype.forEach.call(document.querySelectorAll("a"),function(r){try{var e=r.href;e=e.replace("*","19900101"),r.href=e}catch{}});
      
    • 上の文字列を URL に指定したブックマークレットを作成し、そのブックマークレットを開くことで実行できます
  • 上記のファイル一覧の URL リストをコンソールに出力するだけのブックマークレット

    • javascript:var str="";Array.prototype.forEach.call(document.querySelectorAll("#resultsUrl a"),function(r){str+=r.href+"\n"}),console.log(str);
      
    • 上の文字列を URL に指定したブックマークレットを作成し、そのブックマークレットを開くことで実行できます
    • コンソールは Chrome ならCtrl + Shift + Jで開けます。

差分インストール

BMSeeker 先生におまかせ

便利なリンク集