Bungo-MithrixChimeraMusic icon

MithrixChimeraMusic

Plays the Monty Python and the Holy Grail intermission music during the lunar chimera intermission of the Mithrix fight.

By Bungo

CHANGELOG

Changelog

1.2.2

  • README fix: corrected misleading phase wording.

1.2.1

  • Simplified config descriptions and READMEs.

1.2.0

  • Bypassed Unity's audio system entirely. Audio now plays via System.Media.SoundPlayer (managed .NET, wraps winmm.dll under the hood). Loops via PlayLooping, stops via Stop. The Wwise pause/resume on phase enter/exit still mutes the game music while the song plays.
  • Switched target framework from netstandard2.1 to net472 to access System.Media.
  • Volume is now applied by scaling 16-bit PCM samples in-place at load time. Changing the volume requires a game restart (SoundPlayer has no live volume API).
  • Stale BundleBuilder/ folder is no longer needed; safe to delete.

1.1.0

  • Switched audio loading to AssetBundle (AssetBundle.LoadFromMemoryLoadAllAssets<AudioClip>). Unity's runtime audio APIs (AudioClip.Create, UnityWebRequestMultimedia.GetAudioClip) all returned 0-property placeholder clips in the RoR2/BepInEx environment. Bundles bake the clip at editor time, so the loader gets a real Unity audio asset.
  • Added BundleBuilder/ with an Editor script and step-by-step README for producing the bundle from a small Unity 2019.4 project.
  • Removed all the prior workarounds (manual WAV parser, PCMReaderCallback streaming, audio-config diagnostics).

1.0.10

  • Diagnostic: log Unity's full AudioSettings config and try AudioSettings.Reset to recover from a stuck audio state.

1.0.9

  • Diagnostic build: creates a 1-second synthetic sine-wave clip on load to determine whether AudioClip.Create works at all in this environment.

1.0.8

  • Defer audio load by one frame past Awake — AudioClip.Create was returning placeholder clips with all zero metadata (length/samples/channels/frequency all 0) when called too early in the Unity lifecycle.
  • Soften clip validation (don't bail on samples=0) and log full clip state for diagnostics.

1.0.7

  • Streaming AudioClip via PCMReaderCallback. The non-streaming AudioClip.Create couldn't allocate the ~58 MB float buffer (SetData failed; AudioClip contains no data); streaming mode pulls samples on demand from the in-memory PCM array.
  • Added WAV header logging so any future parse mismatch is visible.

1.0.6

  • Bypassed Unity's audio decoder entirely. Even WAV via UnityWebRequestMultimedia was returning AudioClips stuck in Unloaded state in this RoR2/BepInEx environment. Now parses the embedded WAV manually (16-bit PCM) and feeds float samples into AudioClip.Create + SetData. No file URI, no decoder, no async load.

1.0.5

  • Switched embedded audio from OGG to WAV — Unity's OGG decoder in this RoR2/BepInEx environment was returning AudioClips stuck in Unloaded state with zero samples. WAV (PCM) skips the codec path entirely and loads reliably.

1.0.4

  • Wait for AudioClip decode to finish (loadState polling) — Unity's OGG decode can be async
  • Re-encoded embedded audio at 44.1kHz with clean start timestamp (some Unity 2019 builds choke on 48kHz / nonzero start_pts)

1.0.3

  • Use BepInEx cache path for the OGG temp file (avoids file URI breakage from special chars in Application.temporaryCachePath)
  • Switched debug trigger to Run.BeginStage (the previous Stage.Start hook didn't exist and crashed Awake)
  • More verbose request diagnostics

1.0.2

  • Added Debug.PlayOnStageStart config to play the song at every stage start (for verifying audio without grinding to Mithrix)
  • Fixed silent OGG load failure on Windows (proper file URI conversion)
  • More diagnostic logging during clip load and song start

1.0.0

  • Initial release
  • Plays the Monty Python and the Holy Grail intermission music during the chimera intermission of the Mithrix fight
  • Configurable phase + volume; mutes game music during the phase