見出し画像

メドレーマップを作って遊ぼう!

こんにちは!レイクンです。

突然ですがみなさんはメドレーマップを作ったりプレイしたりしたいと思ったことはないでしょうか?


メドレーマップとは、2つ以上の譜面が繋ぎ合わさっている譜面のことです。(今考えた!)



補足すると、組曲ニコニコ動画とかosu!memoriesなど元の楽曲そのものがメドレー曲であるようなものではなく、少なくともBeatSaberにおいては別々の曲・譜面として存在しているものを繋ぎ合わせたものです。

例えば、YouTubeに投稿された動画やビー祭などの配信イベントで、いくつかの曲を繋ぎ合わせてメニュー画面に戻ることなく連続してをプレイするパフォーマンスを見たことがあるかと思います。

今回は、こういったメドレーマップを簡単に作成・プレイする方法について紹介していこうと思います!


この記事はBeat Saber Advent Calendar 2021の23日目の記事です。

■【お手軽】配信・エンジョイプレイ向け


まず、ご紹介するのはkinsi55さん作のShaffuruというmodです。

Shaffuruは、CustomLevelsフォルダの中からランダムに選ばれた譜面が次々と再生され連続してプレイできるようになるmodです。

つまりメドレーマップが即興で作成されプレイできるmodということになります。

あらかじめ選ばれる譜面の条件をいくつかの項目でフィルタ設定でき、プレイリストで対象譜面を指定したりもできます。

※2021/12/19現在、BeatSaber1.18.3のみに対応しています。
※NoodleExtensionsなど"Requirements“設定のある譜面は対象外となります。
※スコアは送信されません。

こちらがShaffuruの設定画面 兼 スタート画面です。
下の[Play]ボタンを押すと直接ゲームのプレイが開始されます。

[SONG FILTERING]タブ

主な設定項目は以下のとおりです。

  • Min Song length (Seconds)
    選択対象となる譜面の最小時間(秒)

  • Enable more Filter settings
    ONにすると[CONFIGURE]ボタンからより詳細なフィルタ設定ができます。

[CONFIGURE]ボタンで開く設定項目

  ・Min. / Max. NJS
  ・Min. / Max. Notes/s 
(= NPS)
  ・Min. BPM (なぜかMax.はない…)
  ・Must be ranked ONにするとランク譜面のみが対象になります。

  • Highlighted Playlist difficulties
    ONにすると、1つ下の項目でプレイリストが指定されている場合は、プレイリスト内で指定されているレベルが選択されます。OFFの場合はランダムです。なぜか別のタブに Always pick highest Difficulties という項目もあり、こちらはONにすると必ず最も高いレベル(Ex+など)が選択されるようになります。

[RANDOM PICKER]タブ
  • Playlist
    選択される譜面をプレイリストで指定できます。


[MAP TRANSITION]タブ
  • Enable Jumpcut (Aka “Chaosmod“)
    ONにすると譜面の再生される時間がランダムに決定されるようになります。つまり、ランダムな位置から突然始まり、ランダムな位置で突然終わって次の譜面に接続されます。接続部分のノーツがDDかどうかなんて知りません。カオスです。

  • Jumpcut Min. / Max. play duration
    上記のカオスなモードにしたとき、1譜面あたり何秒間再生するかの設定です。


さて、設定を終えたら早速プレイしてみましょう!

[Start]画面

[Play]ボタンを押すとこのような確認画面が出ます。
Play time ではプレイする時間(ランダムに繋がれた譜面全体の長さ)を3~120分の間で指定します。
[START]ボタンでプレイ開始です。

こちらが実際にShaffuruを使ってプレイしている様子です。

まずは日本人マッパーのFefyさんの譜面を集めたプレイリストから、長さは3分間の設定でプレイしてみました。
カオスモードで Jumpcut Min. = 30秒、Max. = 30秒の設定なので、30秒毎に次の譜面に切り替わります。

カオスモードで遊ぶ時はこのくらいの難易度の譜面が丁度いいですね。
切り替わりの境目でノーツ配置が乱れるのはちょっと気になってしまいますが、NoFailで割り切るならいろいろな曲が遊べて楽しいです。
そして、設定した3分が経過すると唐突に終わります。
今回の撮影ではマイク音を録音していたわけではないですが、「こんな突然終わるのwww??」ってリップシンクが言ってます。


ではもう一つ。
こちらは10★ランクプレイリストから。
カオスモードで Jumpcut Min. = 20秒、Max. = 40秒、長さ3分の設定です。

高難度譜面は休憩地帯も長めのものがあるので、運悪くそこばかり引き当ててしまうとノーツが来ないですねw
今回は開幕と中盤で休憩地帯を引きました。
そして3分経つと突然の終了。最後は、「おわるんかいっ!」って言ってます。


さらに、このmodはチャットリクエストを受けることができるようになっています!

ChatCore を導入していれば以下のようなコマンドでリクエストを受け取ることができ、リクエストされた譜面を次々と連続してプレイできます。
リクエストする際にはレベルと時間も指定できます。

コマンド書式: !sr [bsr id] ([Difficulty]) ([Time])
  ※
DifficultyとTimeは無くてもよい。無い場合はランダム。
使用例: !sr 25f ExpertPlus 4:20
    !sr 25f 3:20

※ただし現在は、リクエストを受けられるのはダウンロード済みの譜面のみ。将来的に持っていない譜面のリクエストも受けられるようにするかも?とのことです。


このようにShaffuruは、普段の配信などカジュアルなプレイスタイルにおいて、手持ちのいろいろな譜面をメドレー形式でシームレスにプレイするのに役立つmodとなっています。

カジュアル・エンジョイプレイ用途以外でも、例えば普段のウォーミングアップなどである程度プレイする譜面が決まっているという方は、プレイリストをこのmodで一気に連続してプレイすることでスマートにルーティーンをこなすという使い方もできます。

ただし、スコアは送信できないので、ランクに疲れたときの気分転換などにも使ってみてはいかがでしょうか?



■【こだわり】動画・パフォーマンスプレイ向け

ここまでで紹介したShaffuruを使えば、メドレーマップが即興で作成され複数の譜面を連続してプレイすることができます。

しかし、再生される譜面の順番や、カオスモード(Jumpcutモード)で切り取られて再生されるパート(時間帯)はランダムで指定ができません。

そのため、動画撮影や配信イベント等でのパフォーマンス用途には使いにくいかと思います。そういった用途のためには、やはりあらかじめ複数の曲を好きな順番で一繋ぎにしたメドレーマップを自作する必要があります。


普通にマッピングエディタなどを使ってメドレーマップを作成しようとすると、音とノーツのタイミングを合わせるのが非常に大変だと思います。

理由としては、多くの場合繋げようとしている曲のBPMがバラバラなことや、適切な場所にBPM Changeブロックを設置するため音声無音区間の調整作業が必要になる場合があるということです。
このような調整をしないとマッピングエディタ上の拍線位置や間隔が曲のテンポとズレてしまいます。
これはノーツを元の譜面からコピーせず一から自分でマッピングする場合でも発生する問題です。

またこれらの問題を適切に対処してメドレー譜面を作ったとしても、BeatSaberのゲームの仕様上、NJSやオフセットの値は譜面全体に対して1つの値しか設定できないため、プレイ感覚としては元の譜面と大きく異なるものになってしまいます。


という感じで、できなくはないけどいろいろと面倒だということです。




・・・・・・・・




もっと軽率にメドレーマップを作っていきたいですね!(?)




なんて考えてたら生えてきたのがBeatSaberMapMixerというツールです。

BeatSaberMapMixerは、複数の譜面を繋ぎ合わせて1つの譜面ファイルとして出力できるツールです。

さらに、NJSやオフセットは元の譜面の設定を保持させたり、好きなように変更することができます


※このツールはノーツ単位でNJSとオフセットを設定するためNoodleExtensionsの機能を使っています。したがって、このツールで出力した譜面のプレイにはNoodleExtensionsプラグインの導入が必須です。

※執筆時現在、このツールはα版です。多くのバグと悪いUXを抱えています。もし使用する場合はREADMEの注意事項をよく読んでから使ってください。

ヨシッ!



BeatSaberMapMixer.exeを起動するとこのような画面が開きます。

起動画面

まずは[マップ選択]から譜面フォルダを指定し、譜面を読み込んでみましょう。
※読み込む譜面はWIPフォルダに置いておくことを推奨します。

すると読み込んだ譜面情報がこのように表示されます。

譜面読み込み後

何やらいろいろと項目が表示されていますが、詳しい説明は後述します。
まずはLevel項目のプルダウンから好きなレベルを選択し、右端の[+]ボタンをクリックしてください。

2ページ目

また、何もない画面が出てきます。
再び[マップ選択]から別の譜面フォルダを読み込んでみます。

2つ目の譜面を読み込んだ後

1つ目の譜面と同様にLevel項目から好きなレベルを選択します。
そうしたら、右下の[出力]ボタンを押して譜面の出力先フォルダを選択してください。ボタン左のMap Name欄に入力した名前の譜面フォルダが生成されます。(デフォルトはGenerated_Map)

生成された譜面をマッピングエディタで確認したり、実際にプレイしていただけれ分かると思いますが、譜面が合体しています!

右上に表示されているエディタ画面でブックマークが挿入されている部分が丁度譜面と譜面の境目になります。


とてもシンプルですが、譜面を単に結合していくだけであれば以上の手順で、簡単に作ることができます。
[+]ボタンでページを増やしていくことで3つ以上の譜面もどんどん繋げられます。


正直、ここまでの機能だけで読者の大半のニーズを満たしている気がしますが、もう少し詳しい使い方や仕様などの説明をしていきますのでよろしければお付き合いください。。。
README書くのめんどくさいしこの記事のリンクを貼ろう


まず、基本的な操作についてです。

基本操作
  • ①赤枠

    • マップ選択
      譜面フォルダを選択して譜面を読み込みます。

    • マップ削除
      読み込んだ譜面情報を削除します。次以降のページにも譜面が読み込まれていた場合は、1つずつ前のページにズレてきます。

    • Level
      レベルを選択します。ゲーム内表記ではなくdatファイル名で表示します。

  • ②青枠
    前のページへ戻るボタンと次のページへ進む(新規ページ作成)ボタンです。

  • ③緑枠
    左の数字は現在のページ、右の数字は読み込み済みの譜面数です。

  • ④橙枠

    • Map Name
      生成されるフォルダ名を指定します。デフォルトはGenerated_Mapです。

    • 出力
      譜面を結合して新しい譜面ファイルとして出力します。


続いて、譜面を読み込んだときに表示される項目についての説明です。

表示項目
  • ⑤赤枠
    info.dat内の譜面情報です。

  • ⑥青枠
    NJSとオフセットをお好みの値に変更することができます。Jump Distanceの計算結果も表示しているので、これを参考に弄るのがよいでしょう。

  • ⑦緑枠
    コマンド欄

    • *start
      曲の開始位置をbeat単位で指定します。デフォルトは0です。

    • *end
      曲の終了位置をbeat単位で指定します。デフォルトは曲の末尾です。

    • *fadein
      フェードインにかける時間をbeat単位で指定します。デフォルトは0です。例えば、*start=100、*fadein=4のとき、100~104beatの間で曲がフェードインします。

    • *fadeout
      フェードアウトにかける時間をbeat単位で指定します。例えば、*end=100、*fadeout=4のとき、96~100beatの間で曲がフェードアウトします。デフォルトは0です。

    • *silence
      *endの直後に挿入する無音区間の長さをbeat単位で指定します。負の数を指定した場合は*startの直前に挿入します。デフォルトは0です。

    • *xfade
      前の曲とのクロスフェードにかける時間長をbeat単位で指定します。デフォルトは0です。※1ページ目に読み込んだ曲には適用できません。例えば、*start=100、*xfade=4、前の曲の*end=200のとき、前の曲の196~200beatと、指定している曲の100~104beatの区間の音声が互いに重複してクロスフェードする区間となります。このときクロフェードにかける実時間は、BPMが小さい方の曲の4beat分の時間ということになります。譜面のノーツは、クロスフェード区間の丁度中央の位置で切り替わります。


さらに、これらのコマンドは譜面のブックマーク機能を使って読み込み前に指定しておくこともできます。

ブックマークコマンド例

画像の例のように指定すると、BeatSaberMapMixerのUI上で*start=90.5、*fadein=1.5と指定したことと同じになり、90.5beatから曲がスタートし、92beatにかけてフェードインします。*silenceコマンドに関しては、ブックマークを置く位置はどこでもよく、後に続けて書いた数値で指定します。画像の例では-2.5と書かれているので、*startの直前に2.5beatの無音区間が挿入されます。


以上のように、コマンド機能を使えば譜面の好きなパートを切り出して繋げていくことができます。

それでは、最後にBeatSaberMapMixerのコマンド機能を使って作成したメドレーマップをご覧ください!



これはもう実質ビーセイDJなのでは?!



■  おわりに

本記事では、kinsi55さん作のShaffuru modを使ったお手軽メドレーマッププレイの方法と、自作ツールBeatSaberMapMixerによる細かなカスタマイズが可能なメドレーマップ作成方法をご紹介させていただきました。

昨年Beat Saber Advent Calendar 2020で書いた「文字が流れる壁譜面を作る」の記事に引き続き、非常にニッチなプレイヤー層に向けた内容になったかと思いますが(笑)、この記事の内容が少しでもみなさまのプレイスタイル、パフォーマンスの幅を広げる助けとなっていれば幸いです。

なお本記事の内容およびBeatSaberMapMixerについてご質問などがあればお気軽に↓こちらまで~
Twitter:https://twitter.com/rei05_h


それではみなさま引き続き良きビーセイライフを~!


この記事が気に入ったらサポートをしてみませんか?