ゲームに反応する音楽
ゲーム側が曲を曲げてあげれば、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 つ使います。