SoundpackLoader

v0.2.6·Updated 2024-08-02

Loads custom soundpacks

Screenshots 1 screenshots

About this mod Author’s original text

SoundpackLoader

An early WIP mod for loading custom soundpacks into the game.

For users

Download SoundpackLoader from here

Upon launching the game, a CustomSoundpacks folder should appear in the BepInEx folder. If it didn't, make the folder yourself. Put your soundpacks there and relaunch.

The current interface is a bit rough -- on the "Choose Yer Tromboner" screen, the selected soundpack is written at the top of the screen. Cycle through soundpacks using PageUp and PageDown. You can also cycle through soundpacks while playing a song. The keys can be changed in the config text file in TromboneChamp\BepInEx\config\org.crispykevin.soundpackloader.cfg.

Changelog

v0.2.6

  • Don't delete trombone sound if no CustomSoundpacks
  • Actually create the CustomSoundpacks folder

v0.2.5

  • Serialize json async

v0.2.4

  • Load into the game faster
  • Default trombone sound if you skip char select

v0.2.3

  • Fix for mac

v0.2.2

  • Fix so trombone sound can happen if you skip the character select screen

Soundpack structure

Making a soundpack is simple. It's just fifteen audio files of the notes of the C major scale, from C1 to C3. Additionally, some information about the pack is given in a special text format (JSON).

Currently, not much is in the.json file:

| Attribute | Description | Required? |

| ------------- | ------------- | ---------- |

| SoundpackFormatRevision | Indicates which version of the soundpack specification this soundpack was designed for. Right now, always set this to 1. | true |

| Name | Name of the soundpack | true |

| Namespace | Another name/identifier used in case there's two soundpacks with the same name. | true |

| VolumeModifier | Multiplier to adjust the trombone volume while using the soundpack (0.0-1.0) | false, default = 1.0 |

{

"SoundpackFormatRevision": 1,

"Name": "cello-lower",

"Namespace": "crispykevin",

"VolumeModifier": 1.0

}

Other notes:

  • A soundpack must have fifteen audio files, each matching "{noteName}." (file glob, not regex) (e.g. "my_cool_C2.wav" is acceptable)
  • Currently,.ogg and.wav audio files are supported.

For modders

API Overview

SoundpackLoader provides an API to conveniently control soundpacks in-game. Almost everything you need will be in the SoundpackManager class.

  • Get a Soundpack instance using SoundpackManager.FindPack, GetAllPacks, GetVanillaPacks, and GetCustomPacks.
  • Inside a song, use SoundpackManager.ChangePack(GameController, Soundpack) to change the currently-selected soundpack and update the sounds used by the GameController instance.
  • To change the currently-selected soundpack without updating the sounds used by a GameController instance, use the SoundpackManager.CurrentPack setter property.
  • To add/remove/load songs dynamically (besides the ones in CustomSoundpacks folder), use SoundpackManager.AddPack, RemovePack, and LoadPack.
  • To do something whenever the soundpack changes, subscribe to SoundpackManager.SoundpackChanged. The event args provide the old and new packs.

Setup

Add a reference to SoundpackLoader's DLL in your project's DLL. To do this, add another `` in your.csproj file:

$(GameFolder)\BepInEx\plugins\SoundpackLoader.dll

Code examples

Change the soundpack before every note (see

[HarmonyPatch(typeof(GameController))]

class GameControllerPatch

{

[HarmonyPrefix]

[HarmonyPatch(nameof(GameController.playNote))]

static void BeforeNote(GameController __instance)

{

if (Plugin.Enabled.Value)

{

var packs = Plugin.IncludeVanilla.Value? SoundpackManager.GetAllPacks(): SoundpackManager.GetCustomPacks();

SoundpackManager.ChangePack(__instance, packs.GetRandom());

}

}

}

Shuffle the notes of each soundpack (see NoteShuffle (TODO upload to github)):

public class Plugin: BaseUnityPlugin {...

private void Awake() {...

SoundpackManager.SoundpackChanged += OnSoundpackChanged;

}

private void OnSoundpackChanged(object sender, SoundpackChangedEventArgs e)

{

if (backup!= null)

{

for (int i = 0; i

Install & use Install: follow the bundled instructions

  1. Unzip the archive from playbuff and read the bundled readme / instructions first.
  2. Most mods rely on the game's mod loader — the usual route is a community mod manager (such as r2modman): pick this game, install, and it handles the loader and dependencies.
  3. For a manual install, put the mod files into the matching Mod / plugins folder inside the game directory.
  4. Launch the game to confirm it loaded; mods with listed dependencies need those installed as well.

Install locations vary a lot between mods — the bundled readme is the most reliable guide.

Dependencies

Install these first, or the mod will not work:

BepInEx-BepInExPack_TromboneChamp

File & checksum

Filename
SoundpackLoader-0.2.6.zip
File size
19.2 KiB