
sPEAKer
Some guy had it aboard. Does it still work?Details
Sophisticated Pulse-Eloquent Acoustic Kymatologic Eidolon Reverberator
🎶 ...or just sPEAKer
This is sPEAKer, my first ever mod!
Unlike the bugle, sPEAKer is an independent audio source. You can just press play and enjoy your music. Drop it, toss it around, audio will just not stop!
sPEAKer at the PEAK.
The main feature of this mod is that it works as a true portable speaker. Instead of playing 2D music for everyone, it leverages spatial audio to make it part of the immersive experience of PEAK.
It won't stop playing if you drop it.
Additionally, it supports MP3 and WAV out-of-the-box on top of your regular OGG files.
You can also download mixtapes from the Thunderstore or put together your own and share with friends, or even upload them too!
🎮 Controls
Playback control uses your regular interaction buttons, whatever they are.
-
Primary: Play/Pause toggle
-
Secondary: Next Song
-
Scroll: Volume Up/Down
Controller compatible.
Manual Installation
- Install BepInEx for PEAK
- Install required dependencies:
- PEAKLib.Items
- PEAKLib.Core
- SoftDependencyFix
- MonoDetour_BepInEx_5
- MonoDetour
- Place the mod files in your BepInEx plugins folder
- Launch PEAK
Adding Music
After launching PEAK, your main music folder will be created:
.../plugins/onlystar-sPEAKer Music
You can place audio files directly in it, or you can use mixtapes.
📀 Introducing: Mixtapes
A mixtape is simply a folder containing your collection of audio files.
Just create a new folder inside your main music folder (onlystar-sPEAKer Music
) and drop your songs in it. The name of the folder will be used as the mixtape's name by default.
Optionally, you can also include a mixtape.json
file inside your mixtape folder:
{
"name": "Undertale Bosses",
"author": "onlystar"
}
This takes priority over default naming, and will be shown in-game when a song from your mixtape starts playing.
Yes, it's "Mixtape Name - Song Name"
The idea behind mixtapes is that they are easy to share and organize.
Further updates will support extended metadata. Probably.
Bundling a mixtape for Thunderstore
If you want to upload your own mixtape as a standalone mod, just put an empty sPEAKer.json
file in the same folder as your mixtape folder
.
You can follow the instructions in Manual Packaging as described here.
Your package should include manifest.json
, README.md
, /plugins
folder and (hopefully) a 256x256 icon.png
.
The plugins
folder of your package should look something like this:
plugins/
├── sPEAKer.json
└── boss music/
├── a true hero.ogg
├── omega flowey.mp3
├── ...
└── mixtape.json
sPEAKer.json
is the way of telling sPEAKer "this folder contains music".
Once your package is ready, ZIP it and upload it to Thunderstore.
💡 TIP: Keep your original package for updates!
Updating your Thunderstore mixtape
If you wanna add songs to an already published mixtape, add your songs to the original (uncompressed) package and bump the version up in your manifest.json
:
{
"name": "sPEAKer_Undertale_Boss_Music",
"author": "onlystar",
"description": "It fills you with determination.",
"version_number": "1.0.1", // <--- previously "1.0.0"!
"website_url": "",
"dependencies": []
}
ZIP it once again, and reupload it.
Disclaimer: Make sure you have permission to upload the audio files your mixtape contains to Thunderstore.
Config. Options 🪚
These are options you can change before starting your game.
You can find them in BepInEx/config/onlystar.sPEAKer.cfg
Key | Description | Default Value |
---|---|---|
ExternalAudioFolderPath | Folder path where sPEAKer will mainly load mixtapes and external audio from. It's recommended to leave unchanged. | "..\onlystar-sPEAKer Music" |
DemoSong | Include a demo song in your track list. | true |
ExtendedFormatSupport | Enables loading of MP3 and WAV files. May impact performance. | true |
SpawnAtGameStart | Automatically spawn a sPEAKer around the crash site when a game starts. | true |
SpawnWithF4 | Allows the host to spawn a sPEAKer in their hands when pressing F4. Only one sPEAKer may exist at a time (for now). |
true |
RecallEnabled | Enables recalling existing sPEAKer when pressing F4. Only works if SpawnWithF4 is also enabled. Also, a sPEAKer can only be recalled if it's in the ground (not in a slot). |
true |
DebugMode | Enables custom verbose logging. If you want to report a bug, please include your BepInEx/LogOutput.log ! |
false |
🎛️ Technical Notes
- For the best experience, everyone in the room should have the same tracks and mixtapes.
- In the current version, the host owns the tracklist canon, which means everyone must play the host's catalogue.
- If you are missing a song your host has, don't worry! Every song is hashed by its contents on load. Playback will resume as soon as they start playing something you do have.
- Large files and mp3/wav files can cause significant lag spikes when reading them. Because of this, loading was placed as soon as game awakes, so the lag spike happens at the logos fusing thingy and not during gameplay. Until I further optimize audio loading, this big lag spike is the best solution I thought of. If you have a mod that skips the logos, you will probably experience it as soon as your game is available (untested).
Coming up next... 🔮
- More playback controls (shuffle, loop, etc.)
- Recalling ability for non-host players
- Better mixtape metadata
- Multiple sPEAKer support
- More things that I will not disclose to avoid expectations that may not come true :D
Created by onlystar - Bringing music to the PEAK experience!