BMSプレイヤー(LR2,beatoraja)用選曲BGM集

公開年ごとにまとめています。DLリンクが切れているものは載せていません。無法そうなものも載せていません。

(最終更新: 2023/10/21)

2023年

2022年

2021年

2020年

2019年

www.youtube.comvenue.bmssearch.net

2018年

www.youtube.com

2017年

2016年

2015年

2014年

funkyhappylucky.blog.fc2.com

2013年

2012年

2011年

2010年

2009年

個人サイトなど

www7a.biglobe.ne.jp

excln.github.io

mournfinale.com

amidobms.web.fc2.com

hnctdtm.web.fc2.com

二次配布可能なBMSを調べてみた

二次配布可能BMS一覧 - Google スプレッドシート

上記リンクから見れます。

2020/10/13時点で、2015年~2020年までのBMSイベントに登録された作品を確認しています。(今後時間があれば更に調査するかもしれません)

野良BMSや個人サイト内で配布されたBMS、pupuly登録作品については未確認です。もし抜けやミスがあったらコメントなどで教えてください。

また、他に二次配布可を公言しているBMS作者についても、調べた範囲で別シートにまとめています。

調査理由

あった方が便利かなと思って。たまにツイッターでもそういう声が聞かれた気がしたので。

beatorajaのipfsみたいなBMSの共有方法の推進や、BMSの補完、初心者向けパッケージの作成などに役立つかなと思ったので調べてみました。

特に自分で何かしようという気は現状ありません。

調査方法

下記の記事を参考に、BMSファイル内の"二次"や"配布"などのワードが含まれているreadmeファイルを検索するスクリプトを作成して使用しました。

gnkg.seesaa.net

使用したスクリプトは下記リンクから確認できます。使用言語はGoです。

scanreadme.go · GitHub

最終的に、出力された検索結果から二次配布、二次利用の許可を明言しているものを抜き出してまとめています。

また、二次配布可なBMS作者の調査については、以下のwikiを参考にしています。

雑感

一覧を見ると、二次配布に寛容なBMS作者の方が分かって面白いですね。あと、BMS作品にクリエイティブ・コモンズのライセンスを適用している物もあってなるほどと思いました。表示 - 非営利 4.0 国際 (CC BY-NC 4.0)表示 - 非営利 - 改変禁止 4.0 国際 (CC BY-NC-ND 4.0) あたりはBMS作品にも使いやすい感じがします。

BMSのバージョン分けとハッシュ値について

この記事はBMSをプレイする立場である筆者が、BMS作者の方、特に初心者の方に注意していただきたいとある問題について書いたものです。

BMSイベントで作品を公開する前に読んで頂けると幸いです。

BMSのバージョン分け

BMSイベントで公開されているBMSには、wav版/ogg高画質BGA版/低画質BGAのように、同梱している音声・動画ファイルの形式や品質によって、複数のバージョンに分かれて用意されているものが存在します。

f:id:Shimi9999:20200603211322p:plain

ogg版とwav版で別々に配布されている

wavは大容量ですが、無圧縮で読み込み速度や音質に優れています。

oggは圧縮されているので音質と読み込み速度がwavにやや劣る代わりに、wavよりかなり軽量です。

このため、PCのストレージ容量が少ない人や回線速度の遅い人向けにはogg、音質にこだわる人向けにはwavと、住み分けのために2つのバージョンが用意されていることが多いです。

また動画に関しても、beatorajaなどの次世代プレイヤー向けにHD画質などの高解像度BGA版が別バージョンとして用意されることもあります。

このようなバージョン分けが行われているBMSには、とある問題が発生しているものがたびたび見られます。それは、各バージョンに同梱している譜面は同じはずなのに、BMSプレイヤーやIR(インターネットランキング)上ではそれぞれ異なる譜面として認識されているのです。

実際に何が起きているのか

wav版/ogg版でバージョンを分けていて、かつその問題が起きているBMSとして、G2R2018からGiselleを例に取って見てみます。

LR2IRでGiselleを検索してみると、なぜか[b]~[a]の譜面がそれぞれ2個ずつ存在しているのが確認できると思います。

f:id:Shimi9999:20200604032212p:plain

なぜかダブっているが…?

これは、wav版の譜面とogg版の譜面が異なる譜面として認識されていることによって発生しています。

f:id:Shimi9999:20200604033528p:plain

実はそれぞれ(認識的には)別物

しかし、wav版とogg版の譜面をBMSプレイヤー上でプレイして比較しても、これらの譜面の間には配置やキー音などの違いはありません

ではなぜこのような現象が起きているのでしょうか?それは実は、wav版とogg版で譜面データの記述が微妙に異なっていて、それによって譜面のハッシュ値の分裂が起こっているからです。

ハッシュ値とは?

ハッシュ値とは、元になるデータから一定の計算手順により求められた固定長の値。その性質から暗号や認証、データ構造などに応用されている。ハッシュ値を求めるための計算手順のことをハッシュ関数、要約関数、メッセージダイジェスト関数などという。

ハッシュ値(ダイジェスト値)とは - IT用語辞典 e-Words

ざっくり言うと、ハッシュ関数という入れたデータを決まった法則でぐちゃぐちゃにして吐き出してくれるものがあって、あるデータ(数値や文字列)を元にハッシュ関数が吐き出した値(文字列)をハッシュ値といいます。

f:id:Shimi9999:20200603220018p:plain

ハッシュ値生成のしくみ
(2進数やら16進数やらで色々な計算をしてぐちゃぐちゃにする)

ハッシュ値にはいくつか特徴があり、

このような特徴を持つため、ハッシュ値あるデータが他のデータと一致するかを特定するのに使われたりします。(IDみたいなイメージ)

BMSハッシュ値の関係

ではハッシュ値BMSに何の関係があるのかと言うと、一般的なBMSプレイヤーやIRでは、ハッシュ値を使って譜面を認識・特定しています

LR2ではハッシュ値の生成にMD5という有名なハッシュ関数を使っています。このMD5を使って ★1 星の器~STAR OF ANDROMEDA(ANOTHER) の譜面データをハッシュ値にすると、be6a3f3f38dccc7b49497c852885cc8cという値になります。

f:id:Shimi9999:20200603230716p:plain

譜面からハッシュ値を作るとこんな感じ

BMSプレイヤーやIRは、譜面データを管理する際に、譜面データそのものではなくハッシュ値を使っています。ハッシュ値によって譜面データを特定し、プレイヤーのスコアデータに紐付けているのです。

f:id:Shimi9999:20200604190334p:plain

ハッシュ値を使ってスコアをやり取りするイメージ

f:id:Shimi9999:20200603224603p:plain

LR2IRの譜面ページもMD5ハッシュ値から呼び出せる

ハッシュ値の弱点

このように活用されているハッシュ値ですが、一つ問題があります。それは、元となる譜面データが1文字でも違うと、ハッシュ値も別物になってしまうという点です。

先ほど例に出した 星の器~STAR OF ANDROMEDA(ANOTHER) ですが、仮にこの譜面のTOTAL値を500から600に変更したとしましょう。

すると、変更後の譜面データを元にMD5が生成するハッシュ値f8dcdfe070630bbb365323c662561a1aになり、元のハッシュ値be6a3f3f38dccc7b49497c852885cc8cとは全く違う値になってしまいます。

f:id:Shimi9999:20200603230810p:plain

元データを一文字変えただけでハッシュ値は別物になる

つまり、変更前と変更後の2つの譜面は全く違う譜面として扱われることになり、スコアも別々に保存され、IRページも別々になってしまうのです。

今回の例ではTOTAL値を変更しましたが、他にも、

  • タイトルを1文字変える
  • レベルを変える
  • 音声ファイル定義のファイル名を変える
  • COMMENT定義でコメントを追加する
  • 譜面情報とは関係ない場所に半角スペースを1個入れる

といった様に、BMSファイルというテキスト上で何か1文字でも変更をした場合、生成されるハッシュ値は全くの別物になります。

※ちなみに、譜面のファイル名はハッシュ値の生成とは関係がありません。ファイルの内容のみを元にハッシュ値が作られています。

バージョン分けによるハッシュ値の分裂

ここでバージョン分けの話に戻ります。

wav版/ogg版でバージョンを分けて用意する時に、元々作ってあるwav版の音声ファイルをwavからoggに変換し、それに伴ってBMSファイル内の音声ファイル定義の拡張子もwavからoggに書き換えたとします。

すると勿論、wav版のBMSファイルとogg版のBMSファイルの記述に違いがあるので、それぞれの譜面データから生成されるハッシュ値も別になります。

このように、バージョン分け作業の過程で譜面データの一部を変更してしまうと、バージョンごとに異なるハッシュ値の譜面になってしまい、BMSプレイヤーやIRからは別の譜面として扱われることになります。

f:id:Shimi9999:20200604042917p:plain

バージョン分けでBMSファイルの内容を書き換えると、ハッシュ値が別になってしまう

前述した通り、同じタイトル、同じノーツ配置の譜面でも、音声ファイル定義の拡張子が違うだけで、それぞれは全く別の譜面として認識されてしまうのです。

この本来同一のハッシュ値であるべき譜面が、バージョン分け作業などによって意図せず別々のハッシュ値に分かれてしまう現象を、私は個人的にハッシュ値の分裂と呼んでいます。

ハッシュ値の分裂が起きている譜面は、IRページが別になり、DLしたバージョンによってスコアが分散してしまいます。こうなるとプレイヤーは別バージョンをプレイした他のプレイヤーとスコアを比較できなくなってしまいます。

ハッシュ値の分裂が起こる主な原因としては、

  • wav版/ogg版で分ける際に、BMSファイル内の音声ファイル定義の拡張子をwavからoggに書き換えてしまう
  • 高画質BGA/低画質BGAで分ける際に、BMSファイル内の動画ファイル定義の拡張子を書き換えてしまう(mpegとmp4など)
  • 高画質BGA/低画質BGAで分ける際に、BGAファイルのファイル名を高画質/低画質で別々にしてしまう("bga_hq.mpg"と"bga_lq.mpg"のように)

などがあります。

往々にしてやりがちなのは、BMSファイル内の音声/動画ファイル定義の書き換えです。

正しいバージョン分けの方法

では、バージョン分けをしたい場合はどうすればいいのかと言うと、BMSファイルの内容は同じまま、分けたい音声/動画ファイルのみを別々に用意してください。

実はLR2やbeatorajaなどのBMSプレイヤーには音声ファイルの拡張子を補完してくれる機能があり、BMSファイルで定義した拡張子と実際のファイルの拡張子が違っても、ファイル名が同じであれば勝手に拡張子を補完して再生してくれるのです。

f:id:Shimi9999:20200605112331p:plain

ファイル名が同じなら、拡張子はBMSプレイヤーが補完してくれる

また、LR2向けの低画質動画とbeatoraja向けの高画質動画を分けて用意したい場合も、BMSファイルは同じまま、バージョンごとに拡張子の違うBGAファイルを同梱すればOKです。

beatorajaには動画の拡張子に優先度があり、以下の様になっています。

mp4 > wmv > m4v > webm > mpeg > m1v > m2v > avi

この優先度を利用して、以下の手順で用意します。

  1. LR2用にmpegBGAファイルを用意する(例:bga.mpeg
  2. beatoraja用に同名のmp4のBGAファイルを用意する(例:bga.mp4)
  3. BMSファイルのBMP定義にはbga.mpegを書く

このようにすると、LR2でプレイする際にはbga.mpegが再生され、beatorajaでプレイする際には拡張子の優先度の高いbga.mp4が再生されるようになります。

beatoraja用のBGA作成についてはMALVA.さんの記事に詳細に書かれているので、ぜひ参考にしてみて下さい。

aruderia.amebaownd.com

まとめ

配布するBMSのバージョンを分ける時は、いずれも同じBMSファイルを同梱しましょう。

譜面の内容が一文字でも違うとハッシュ値は別物になり、BMSプレイヤーやIRで全く別の譜面として扱われます。

BMSを公開する時にはこのことを意識して下さると、プレイヤーの立場としては非常に有難いです。どうかよろしくお願いします。

 

余談:修正・更新によるハッシュ値の変更

BMS公開後にBGA追加やミスの修正によってBMSファイルが更新され、譜面のハッシュ値が変更されることがあります。

BMS作品がより良くなっていくという点では喜ばしい事なのですが、ハッシュ値が変わってしまうと修正前にプレイした時に出したスコアはパーになり、プレイヤーはもう一度プレイし直す羽目になります。

このようなこともあり、BMSイベントにおけるBMSファイル書き換えを伴う更新は、インプレイヤーの心証を悪くすることがあります。

ですので、公開前になるべくBMSファイルを書き換えなくて済むよう工夫した方が良いのです。

後からBGAを追加したい場合

もし後からBGAを追加する予定がある場合は、あらかじめBGA定義をBMSファイルに記載しておいてください。一枚絵を仮BGIとして入れたい場合は、動画化してBGAとして同梱してください。こうすることで、BGAを追加する時に譜面のハッシュ値が変わってしまうのを防げますし、追加する際もBGAファイルを同梱するだけなので楽に済みます。

どうしても後からBMSファイルを書き換えたい

公開後にミスが発覚したり、気に入らない点が見つかったりして、どうしても後から譜面を書き換えたくなることはあると思います。その場合は、BMSの公開ページにBMSファイルの中身を書き換えた旨を明確に記載してください。既にダウンロードした人向けに最新版の存在を告知することは非常に重要です。これを疎かにすると修正前の譜面がずっと遊ばれ続けることになるので、注意が必要です。

LR2とbeatorajaのあること、できること比較

(2020/04/13時点)

LR2にある、できる

  • LR2IRへの接続
  • ライバルフォルダ
  • IRのゴーストから譜面を借りる
  • オフラインスコアのIR送信
  • 1鍵固定
  • JUDGE AUTO ADJUST
  • オートスクラッチ
  • 非アシストのCONSTANT
  • FREQ/PITCH/SPEEDを利用した通常プレイ
  • BATTLE(2人プレイ)
  • SP-to-DP
  • プレイ中の数字キーでの表示設定
  • NONSTOP、RANDOM MIX
  • スコア推移グラフの表示
  • DIFFICULTY表示切り替え
  • スキンセレクトでのプレビュー表示
  • preview.wavのない曲のプレビュー再生
  • ADPCM形式のWAVの再生
  • イコライザー
  • マルチキーアサイ
  • タグ編集
  • マイナスBPMバグ
  • 各種マニアックオプション(EARTHQUAKE、LUNARIS等)

beatorajaにある、できる

  • Mocha-Repository、MinIRへの接続
  • SVGA~ULTRAHD(4K)の解像度
  • mp4形式の動画の再生
  • CN、HCNモード
  • bmsonのプレイ
  • 24KEYS、48KEYS譜面のプレイ
  • FAST/SLOW表示
  • LIFT
  • 緑数字表示
  • R-RANDOM
  • RANDOM+、S-RANDOM+、SPIRAL
  • ASSIST EASY、EX-HARDゲージ
  • Gauge Auto Shift
  • 各種アシストオプション(判定エリア表示等)
  • PERFECT、MAXクリアランプ
  • 空POOR表示
  • 空遅POOR
  • VERYEASY判定
  • DEFEXRANK定義
  • EXPAND JUDGE
  • ラクティスモード
  • オートプレイ、リプレイの再生速度変更
  • FAVORITEフォルダ
  • JSON形式の難易度表読み込み
  • 未所持譜面のDLページ表示
  • MIRROR、RANDOMが使用可能な段位
  • preview.wavの再生
  • 譜面密度の表示
  • ノーツ分布グラフ、BPM変化グラフの表示
  • 判定分布の表示
  • JSONLua形式のスキン使用
  • SCROLL定義
  • ぽみゅキャラの表示
  • 開発への参加

Mocha-Repository(beatorajaのIR)のLevel Reviewが便利な話

Level Reveiwとは?

簡単に言うと、プレイヤーみんなで提案・投票できる難易度表(っぽいもの)です。

  1. 曲をプレイして、
  2. 難易度のレビューをすると、
  3. 難易度表に反映される!

そういうシステムです。

便利なところ

  • まあまあ適正難易度の譜面がたくさん遊べる
  • 他者のレビューから知らない曲を知ることができ、すぐにダウンロードできる
  • レビューをする内に、そこそこ正確な難易度感覚が身につく
  • レビューをする内に、難易度表の形でたくさんの譜面が収集される

この記事では、Level Reviewの使い方や仕様について紹介していきます。

Level Reviewの表の見方

Level Reviewは、beatorajaのIRの一つであるMocha-Repositoryの機能です。Level Reviewの表は、Mocha-RepositoryページのLevel Reviewの項目から見れます。

こんな感じ↓

f:id:Shimi9999:20190127123405p:plain

Level Reviewには、7Keysと14Keysの表があります。(2019/01/27現在)
難易度は、7Keysは☆1~☆12と★1~★27、14Keysは☆1~☆11と★1~★13が用意されています。

また、beatorajaでMocha-Repositoryに接続すると、起動時に自動的にLevel Reviewフォルダが生成されます。

f:id:Shimi9999:20190127124303p:plain
難易度表と同じく、持っていない譜面を選択するとDLページが開きます。(DL URL登録済の譜面のみ)

f:id:Shimi9999:20190127141652p:plain↑持っていない譜面は赤文字で表示されます。

レビューの送り方

まず、beatorajaでMocha-Repositoryに接続した状態で曲をプレイし、リザルトを送信します。

f:id:Shimi9999:20190127132658p:plain↑「IRへスコア送信完了」といったメッセージが表示されていればOK(スキンによる)

すると、Mocha-Repositoryのプレイした曲のページでLevel Reviewの投票フォームが表示されます。
(IRの楽曲ページは、選曲画面で曲にカーソルを合わせてF11キーを押すと表示できます。)

f:id:Shimi9999:20190127135824p:plain

そこに自分の感じた難易度を記入し、POSTボタンで送信します。
COMMENT欄からコメントも一緒に送れます。

f:id:Shimi9999:20190127135914p:plain

レビューが反映されました。

f:id:Shimi9999:20190127135942p:plain

誰がどの難易度を送信したかは、スコアランキングのコメントとして表示されます。

f:id:Shimi9999:20190127140248p:plain

レビューで送った難易度を変更したい場合は、Level Reviewの投票フォームの内容を書き換えて再送すればOKです。

レビューのフォーマット

Level Reviewに投票できる難易度は、通常難易度(☆)と発狂難易度(★)があり、7Keysは☆1~☆12と★1~★27、14Keysは☆1~☆11と★1~★13が投票できます。

フォーマット

  • ☆(★)付きでも、数値のみでも投票できます
    例 : ☆4, ★4, 4 → ☆4
  • 通常難易度の数値を超えると、発狂難易度として扱われます
    例(7Keys) : ☆13 → ★1, 20 → ★8
  • 小数点第一位までの小数で投票できます

    例 : ☆4.8, 16.3

フォーマットに合わない難易度を送信しても反映されないので、注意しましょう。

難易度の算出

レビューが1件の場合は、そのレビューがそのまま難易度に採用されます。
レビューが複数ある場合は、平均値が難易度に採用されます。
また、難易度毎の表に振り分けられる際に、小数点第一位は四捨五入されます。

例 : ☆4.4 → ☆4の表へ, ☆4.5 → ☆5の表へ

ダウンロードURLの登録方法

楽曲のダウンロードURLが登録されていると、未所持者がbeatoraja内の表からDL可能になるので、余裕があれば登録しておくと良いです。
ただし、難易度表の譜面をプレイしてリザルトを送信した場合は、自動でダウンロードURLがMocha-Repositoryに送信されるので、登録の必要はありません。

まず、SongページのEditボタンから編集画面に移ります。

f:id:Shimi9999:20190127151506p:plain
本体URLを「URL」、差分譜面の場合は差分URLを「Diff URL」に記載します。
Updateボタンでページに反映されます。

f:id:Shimi9999:20190127151532p:plain

ダウンロードURLが登録されている譜面は、曲リストに緑色で表示されます。

f:id:Shimi9999:20190128092507p:plain

おまけ:レビューでつける難易度に悩むときは?

レビューでつける難易度に悩むこと、結構あります。

Mocha-RepositoryのHow to useページには以下の様に書いてあります。

既存の難易度表での評価にとらわれず、実際にプレイして感じた難易度を自由に投票して下さい。

自由に…う~む難しいf:id:Shimi9999:20190127153147p:plain

通常の難易度表では、難易度を付ける基準となるクリアランプが設定されていることが多いのですが、Level Reviewにはそれがありません。
自分はEASY9割、HARD1割くらいの感覚でなんとな~く難易度を付けています。
基本はラストの密度と配置を基準にして、道中がめちゃめちゃ難しければ少し難易度をプラスするといった感じでしょうか。

また、参考にできるものとして

  1. 譜面の元の難易度
  2. 難易度表の譜面なら、難易度表の難易度
  3. LITONEスキンを使っている場合、選曲画面で表示される推定難易度
    (ラスト100Total分の密度によって算出されているらしい?)

があります。悩んだらどんどん参考にしましょう。

あと、小数点第一位までの数値で投票する場合、最終的に表に振り分けられる際に四捨五入されることも意識しておくと良いと思います。☆12.4は☆12フォルダに送られますが、☆12.5は★1フォルダに送られます。

また、どうしても難易度の判断が付かない時や、そもそも譜面が難しすぎてクリアできなかった場合は、レビューをつけないという選択もアリだと思います。
ただし、送ったレビューは後から変更が可能ですし、レビューが集まれば最終的な難易度の数値は平均化されていくので、そこまで気負わずに”自由に”送ればいいかな~と思います。