You are viewing a potentially older version of this package. View all versions.
onlystar-sPEAKer-1.5.0 icon

sPEAKer

Now with Shuffle! — Some guy had it aboard. Does it still work?

Date uploaded 3 days ago
Version 1.5.0
Download link onlystar-sPEAKer-1.5.0.zip
Downloads 2151
Dependency string onlystar-sPEAKer-1.5.0

This mod requires the following mods to function

PEAKModding-PEAKLib_Items-1.4.2 icon
PEAKModding-PEAKLib_Items

Items module of the PEAKLib community API.

Preferred version: 1.4.2

README

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
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.

Plays its own sound
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

  • Ctrl + Secondary: Toggle Shuffle

Note: Shuffle is not Controller compatible yet.

Manual Installation

  1. Install BepInEx for PEAK
  2. Install required dependencies:
    • PEAKLib.Items
    • PEAKLib.Core
    • SoftDependencyFix
    • MonoDetour_BepInEx_5
    • MonoDetour
  3. Place the mod files in your BepInEx plugins folder
  4. 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.

Your manifest.json should list sPEAKer as its dependency:

  {
    "name": "Demo_Mixtape",
    "author": "onlystar",
    "version_number": "1.0.0",
    "website_url": "",
    "description": "",
    "dependencies": [
      "onlystar-sPEAKer-1.4.0" // add this line
    ]
  }

This way, you can point your friends to your mixtape and their mod manager will install sPEAKer along with it.

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: Don't delete your original package!

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": "Demo_Mixtape",
    "author": "onlystar",
    "version_number": "1.0.1", // previously "1.0.0"
    "website_url": "",
    "description": "",
    "dependencies": [
      "onlystar-sPEAKer-1.4.0"
    ]
  }

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 Category Description Default Value
ExternalAudioFolderPath 💾 Audio Loading Folder path where sPEAKer will mainly load mixtapes and external audio from. It's recommended to leave unchanged. "..\onlystar-sPEAKer Music"
LoadDemoSong 💾 Audio Loading Include a demo song in your track list. true
ExtendedFormatSupport 💾 Audio Loading Enables loading of MP3 and WAV files. May impact performance. true
ShowTrackDuration 🔊 Playback Shows every song's current time and length. true
ShuffleOnStart 🔊 Playback Start with Shuffle enabled by default. Saves you a toggle if you only want shuffled playback. false
TurnOnAndPlay 🔊 Playback Make sPEAKer start playing immediately after turning it on. false
SpawnAtGameStart 📻 Spawning Automatically spawn a sPEAKer around the crash site when a game starts. true
SpawnWithF4 📻 Spawning Allows the host to spawn a sPEAKer in their hands when pressing F4.
Only one sPEAKer may exist at a time.
true
RecallEnabled 📻 Spawning 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 📜 Logging 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 and not during gameplay.
  • Shuffle randomizes your list every time you toggle it on, so you might get repeated songs if you toggle it more than once.
  • Be aware of ExternalAudioFolderPath when moving your game to another folder, as it is generated only the first time the mod loads. If you're having trouble, delete config/onlystar.sPEAKer.cfg and it will find the correct path again (albeit losing your configs, if you changed any).

Coming up next... 🔮

  • Youtube Radio mode
  • Local volume control
  • Audio ducking (lowering volume in favour of voices)
  • Recalling ability for non-host players
  • More playback controls (loop, different shuffle modes, etc.)
  • Extended 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!

CHANGELOG

Changelog

[1.7.1]

  • Added Sound Effect when reaching max Volume
  • Added Sound Effect when entering [REDACTED]
  • Fixed UI state issues when entering [REDACTED]

[1.7.0]

  • NEW: Loop modes! Toggle with Alt + Secondary
  • NEW: Previous song! Use with Shift + Secondary
  • Netcode now correctly broadcasts most changes to playback state
  • Updated README (it's updated every patch but just in case you only read the changelog :P)

[1.6.0]

  • NEW CONFIG: StartupLoadingIndicator, enabled by default, to show an audio loading indicator at game boot. It lasts as long as the initial lag spike does.
  • NEW CONFIG: DisplayMixtapeAuthor, enabled by default, to show the mixtape author during playback.
  • Fixed an issue where audio loading would break when sPEAKer had been installed through a Thunderstore profile code.
  • Fixed an issue where sPEAKer would sometimes spawn below ground level at the Shore.

[1.5.0]

  • Added mixtape author below stamina bar.
  • Added indicator when songs and mixtapes are loading.
  • Fixed issue where in-game font would sometimes not load.
  • Changed song hashing method. This should fix song-syncing issues some people were still having, but will introduce more lag while songs are loading.
  • Optimized audio loading, albeit unnoticeable given the previous point.

[1.4.0]

  • Added Local Volume control to pause menu

[1.3.1]

  • Optimized netcode handling
  • Fixed state inconsistencies when getting back to the airport or main-menuing
  • Fixed next song not starting automatically when sPEAKer is pocketed (I refactored an entire class for this 💀)

[1.3.0]

  • Added Track Duration (enabled by default)
  • Added new configs: ShuffleOnStart, TurnOnAndPlay, ShowTrackDuration.

[1.2.1]

  • Disabled unfinished feature

[1.2.0]

  • Added Shuffle
  • Added clarification to add sPEAKer as a dependency to uploaded mixtapes
  • Fixed an issue where downloaded mixtapes sometimes would not load for non-hosts
  • Fixed an issue where netcode would sometimes generate a duplicate photon ID
  • Fixed volume step being too aggressive when using a controller
  • Fixed some localization texts for Spanish, Korean and Japanese
  • Removed Herobrine

[1.1.5]

  • Many optimizations for upcoming 1.2.0
  • Removed Herobrine

[1.1.4]

  • Now sPEAKer looks for music on its own folder too (onlystar-sPEAKer), just in case.

[1.1.3]

  • Minor optimizations and code cleaning.
  • Added instructions to update an existing Thunderstore mixtape in README.

[1.1.2]

  • Bundle optimization for MESA update.
  • Some groundwork for upcoming feature.

[1.1.1]

  • Changed recalling with F4 to be enabled by default (host only).
  • Fixed a desync when dropped while paused.
  • Fixed files not loading if containing special characters.

[1.1.0]

  • Added MP3 and WAV support.
  • Removed ZIP format requirement for mixtapes.
  • Updated README.

[1.0.0]

  • Initial release, with mixtapes.