ビートセイバーでノーツを切ると「しゅぱーん」というカット音が鳴りますよね。音ゲー界隈では「キー音」と呼ばれるようです。今回はこれについて書いてみます。
音ゲーでは、操作を行ったときに、キー音が鳴るものと、鳴らないものがあります。音が鳴るほうが、自然にリズムに合わせて演奏している雰囲気が得られるはず、と思いがちですが、実際はこのキー音をリズムに合わせるのは難しい部分があります。
というのも、押したら音が鳴るボタンがゲーム内にあったとして、実際に音が聞こえるまでには、様々な処理を経由する必要があり、叩いた瞬間に音が鳴る楽器のようにはいかない部分があります。
1. 人間がボタンを押し始める
2. ボタンの押下量が入力閾値を超える
3. OS(ドライバー)が入力を認識する
4. ゲームが入力を認識して、効果音を流し始める
5. 効果音を他に同時再生されている音とミキシング、エフェクト処理
6. すべて合成された音をOS(ドライバー)が再生デバイスへ送る
7. 再生デバイスで受け取った音を D/A 変換
8. アンプなどを通って、スピーカーやヘッドホンで聞こえる音になる
まず 1, 2 の僅かなタイミングの差で、感覚がずれる可能性があります。また、2, 3 の入力発生までの遅延や、6, 7 の発声処理から実際にアナログ信号が出るまでの遅延は、OS やハードウェアの違いで差が出てくる部分です。
この結果、押した瞬間には音が出ず、効果音が遅れて出てしまうことで、リズム感を損なう結果になる場合もあります。これを嫌ってか、キー音をなしにするリズムゲームも存在する状況です。
それでは、ビートセイバーのカット音はどうなっているのでしょうか?
すぐに答えを書いてしまいますが、ビートセイバーのカット音は切るタイミングに関係なく鳴ります。たとえばノーツが曲開始から 1.0 秒のところに置いてあった場合、早めに 0.9 秒のところで切っても、遅れて 1.1 秒のところで切っても、きっちり 1.0 秒のタイミングで音が鳴ります。
そんなバカな…、1.1 秒のところで切るなら、1.0 秒の時点ではまだノーツが切られるかミスするかわからないんだから、そのタイミングでカット音なんて出せない、と思うかもしれません。そうなんです。ビートセイバーは空振りしても、ミスが確定するまではカット音を流します。
試しに、音楽を無音にした譜面で全部空振りしてみた動画です。ちゃんとカット音鳴ってますよね?
ビートセイバーでは、ノーツが出現した時点で、AudioSource-PlayScheduled という命令で、各ノーツに譜面で設定された切られるべき時間に、グッドカットの音を再生するよう予約がなされます。
ここですこし早めのタイミングでノーツを切った場合でも、切った瞬間には音が鳴らず、予約した時間になって初めて、グッドカットの音が鳴ります。
逆に、まだノーツを切っていないのに、予約した時間が来てしまった場合、とりあえずグッドカット音を流し始めます。この場合、グッドカット音の音量はセイバーの速度に依存します。つまり、セイバーを振っていればノーツに当たらなかったときもグッドカット音は鳴りますが、セイバーをまったく振らなかったり、床に置いたままだったりしたときは、音は聞こえません。
このグッドカット音が流れている最中に、セイバーでノーツを切った場合、グッドカットであれば、以降はグッドカット用の音量固定での音を再生し続けます。一方、バッドカット (セイバーとノーツの色違い) の場合は、その瞬間にグッドカット音の再生は終わり、バッドカット音が再生されるようになります。
たまに、NoodleExtensions 譜面で、切っても音が鳴らないノーツに遭遇することがありますが、これは譜面に設定されているノーツの切られるべき時間と、実際のノーツ位置 (移動の仕方) が一致していない場合に起こります。NoodleExtensions ではノーツの動きを、譜面のノーツ時間とは関係なく動かすことが可能なため、このような現象が発生する場合もあります。
あとは、ノーツが同時に 65 個以上出現しているときは、(ノーツ時間が一番若い) ノーツのカット音の再生や再生予約が停止されます。ポールノーツ (プードル) 譜面で、カット音が鳴ったり鳴らなかったりするのは、この制限のためでしょう。
上ではわかりやすくするため「各ノーツに譜面で設定された切られるべき時間」に再生予約される、と書きましたが、実際は、音声処理の遅延分とカット音のイントロの長さを考慮して、ノーツ時間より約 0.2 秒早くに再生が始まります。また、音のレイテンシ設定をしていれば、さらにその分の調整も入ります。
どういうことかというと、カット音は「しゅぱーん」という音が鳴りますが、この「ぱ」のところでノーツが切れるよう、「しゅ」の部分 (0.185 秒) を先に再生を始めておこう、という意図の処理になってます。
もし HitSoundChanger mod でカスタムのグッドカット音を作るときは、0.185 秒のところがカット音になるよう作ると良いと思います。なお、バッドカット音は、普通に切った瞬間から再生を始めるので、開始の 0 秒がカット時の音になります。
上の行、なんだか当たり前のことを書いているようですが、現状はカットしたときと関係なく鳴っているので…。普通の?音ゲーと同じように、カットした瞬間に音を再生する仕様に変える mod を作ってみました。
ううーん…、カット音がリズムと合っておらず、わたしのリズム感のなさを露呈しています。わたし、他のキー音がある音ゲーやってもこんな感じで、いつもなんか合わなくて、もやもやしてしまいます。
前述したように、この仕様の場合、カット前から音を鳴らし始めることはできず、「しゅぱーん」の前半 0.2 秒「しゅぷ」あたりの音がなくなるので、若干、オリジナルのカット音と変わってしまうのは、仕方のない部分です。
みなさんも試せるようにこの mod を置いておきます。ビートセイバーのデフォルト仕様とくらべてどう思います?
(追記)
下記の mod の機能は NalulunaCutTimeBar に統合されました。こちらをお使いください。下記は現在動作確認していませんし、今後の更新予定もないため非奨励です。
CutSoundMod 0.0.2 for Beat Saber 1.21.0
0.0.2
- 正常に鳴らない場合がある不具合を修正
なるるるるな / NALULUNA
2022-04-27 17:47:30 +0000 UTCアノン
2022-04-27 05:31:13 +0000 UTCなるるるるな / NALULUNA
2022-04-26 15:43:35 +0000 UTCなるるるるな / NALULUNA
2022-04-26 15:21:12 +0000 UTCJAN
2022-04-26 14:54:58 +0000 UTC