本文へスキップ

ゲームに反応する音楽 ​

ゲーム側が曲を曲げてあげれば、1 曲でゲーム全体をまかなえます。そのためのつまみが、Player には 2 つあります。

テンポ ​

ts
player.tempo(1.12); // 12% faster
player.tempo(0.85); // slower
player.tempo(1); // the song's own bpm

変更は次の音から反映されます。音が飛んだり、最初からやり直したりはしません。

レイヤー ​

曲の中の楽器は、それぞれフェードできるレイヤーです。

ts
player.layer("kick", 0, 0.8); // fade the kick out over 0.8 seconds
player.layer("kick", 1, 0.8); // and back in
player.layer("hat", 0.5); // half volume

ムード ​

gloop のサウンドトラックは、まるごと 1 つのテーマを 4 つのムードで鳴らし分けています。

ts
type Mood = "map" | "room" | "tense" | "done";

function setMood(mood: Mood) {
  const drums = mood === "room" || mood === "tense" ? 1 : 0;
  for (const track of ["kick", "snap"]) player.layer(track, drums, 0.8);
  player.layer("hat", mood === "map" ? 0.5 : mood === "done" ? 0.3 : 1, 0.8);
  player.tempo(mood === "map" ? 0.85 : mood === "tense" ? 1.12 : 1);
}

マップ画面ではドラムなしで落ち着いた雰囲気に。レベルに入るとドラムが加わり、残り 3 手になるとテンポが上がって急かします。レベルをクリアすると、ジングルが聞こえるようになります。ゲームの状態が変わるところで setMood を呼びましょう。

曲の切り替え ​

player.play(otherSong, { fade: 1 }) は今の曲を止めて、新しい曲をフェードインします。クロスフェードしたいときは、同じオーディオコンテキスト上で Player を 2 つ使います。