Epoch Street GuideBoardsNewsDev blog 日本語

← All guides

Sound Pack Creation Guide (English)

Re-voice the game with your own audio: scene BGM, event jingles, and sound effects. A sound pack is one .essnd file; packs can replace *everything* or just a single sound — every slot you don't include keeps its normal sound.

The sound-pack list, with previews
The sound-pack list, with previews

*(日本語版はこちら → SOUND_GUIDE.ja.md)*


1. How packs work

2. Quick start

  1. Create a folder user://sounds/dev/MyPack/. On Windows that is %APPDATA%\EpochStreet\sounds\dev\MyPack\.
  2. Put a manifest.json in it:
   { "format": 1, "name": "MyPack", "author": "you", "version": "1.0" }
  1. Add sounds using the paths from the table below (start with one — e.g. se/confirm.ogg).
  2. In-game: enable the pack in Settings → Music → Sound packs (Enter toggles,←→ moves priority). Press F5 any time to hear your latest saved edits. B / J / S on that screen audition a BGM, a jingle and an SE through the real playback chain.
  3. When happy, press P on your dev-folder row to package it into a shareable MyPack.essnd (written next to the installed packs in user://sounds/).

3. Sound paths (the full v1 list)

Formats: ogg (best for BGM — loops seamlessly) or wav. Every BGM loops (user, 2026-08-12): the whole file by default, so author seamless loops — or give the track an intro with the loop points below. Jingles and SEs play once.

Four SEs loop, thoughse/dice.ogg (dice rolling), se/slotSpin.ogg (slot reels), se/rouletteSpin.ogg (roulette wheel) and se/cannonFly.ogg (a piece flying from a cannon). Each sounds for as long as the thing is moving and ends the instant it stops (for the cannon, the instant it lands), so author them seamlessly, like a BGM. 0.5–2 s works well; avoid a one-directional rise or fall, which makes every wrap obvious.

Anything that repeats — every BGM and those four SEs — must be an ogg, because a wav wraps with an audible seam: both the game's settings and the board editor import ogg only for those slots (jingles and ordinary SEs still take wav).

Loop points (an attack that plays only once)

Loop positions written into an ogg's Vorbis comments are read and used as-is, for BGM and looping SEs alike. That is how you give a sound an attack at the head and have every wrap return past it.

TagMeaning
LOOPSTARTWhere a wrap returns to. A bare integer is samples (converted with the file's own sample rate); 1.5 or 0:01.500 is seconds
LOOPLENGTHLength of the loop region, measured from LOOPSTART
LOOPENDEnd of the loop region (wins over LOOPLENGTH)

LOOP_START / LOOP_BEGIN / LOOP_LENGTH / LOOP_END mean the same (keys are case-insensitive). A file with no tags loops as a whole, exactly as before.

Writing them (loop from 1.544 s in a 22050 Hz file):

ffmpeg -i in.wav -c:a libvorbis -metadata LOOPSTART=34048 out.ogg
vorbiscomment -a -t "LOOPSTART=34048" out.ogg

Three places show what was read: the message right after importing ("loops back to 1.54s"), the ⟲ 1.54s on the track's row on the slot page, and the Debug → Sound audit rows. On a REPEATING slot — every BGM since 2026-08-12, plus the looping SEs — S (audition) loops, so you can hear the wrap; press S again to stop. Jingles and ordinary SEs audition once.

⚠ When LOOPEND / LOOPLENGTH points BEFORE the end of the file, that early wrap is made at frame granularity (~1/60 s). For a sample-exact loop, trim the file after the loop region and write only LOOPSTART.

BGM (looping scene music)

Path in the packPlays
bgm/title.oggTitle / menu BGM
bgm/map.oggMap BGM (normal play)
bgm/reach.oggGoal-in-sight BGM (someone reached the target)
bgm/summon.oggSummon-active BGM (guest on the board; opt-in setting). Plays for any guest whose own file below is absent
bgm/summon/markAngel.oggSummon BGM: Mark Angel
bgm/summon/holidaymon.oggSummon BGM: Holidaymon
bgm/summon/maharaja.oggSummon BGM: Maharaja
bgm/summon/sabotender.oggSummon BGM: Cactuar (sphere 16)
bgm/summon/watabou.oggSummon BGM: Watabou (sphere 28)
bgm/summon/kingSlime.oggSummon BGM: King Slime (sphere 48)
bgm/summon/mandragora.oggSummon BGM: Mandragora (sphere 63)
bgm/summon/torneko.oggSummon BGM: Torneko (sphere 78)
bgm/summon/fatChocobo.oggSummon BGM: Fat Chocobo (sphere 93)
bgm/bank.oggStock-trading BGM
bgm/chance.oggChance-card BGM
bgm/auction.oggAuction BGM
bgm/casino/slot.oggCasino BGM: Slots
bgm/casino/hilow.oggCasino BGM: High & Low
bgm/casino/roulette.oggCasino BGM: Gappori Roulette
bgm/casino/scratch.oggCasino BGM: Double-Up Scratch
bgm/casino/panel.oggCasino BGM: Lucky Panel
bgm/casino/number9.oggCasino BGM: Number 9
bgm/casino/rope.oggCasino BGM: Wakuwaku Rope
bgm/casino/tarot.oggCasino BGM: Silver Tarot
bgm/casino/lraceBet.ogg / lraceRun.oggLegacy Race: prediction board / the race
bgm/casino/mraceBet.ogg / mraceRun.oggModern Race: prediction board / the race
bgm/results.oggMatch-end / results BGM

Jingles (one-shots that pause the BGM, which then resumes)

PathPlays on
jingle/casinoWin.oggcasino win
jingle/jackpot.oggcasino jackpot (slot 777 / max High-Low run)
jingle/levelup.ogglevel up (salary)
jingle/buyout5.ogg5× buyout
jingle/monopoly.oggarea monopoly completed
jingle/summonAppear.ogga summoned character arrives
jingle/summonLeave.ogga summoned character leaves
jingle/chance13.oggChance card #13 / #103
jingle/holiday.oggrest / shops-closed effect
jingle/bankrupt.oggbankruptcy
jingle/lraceStart.ogg / lraceFinish.oggLegacy Race start / first finisher
jingle/mraceStart.ogg / mraceFinish.oggModern Race start / first finisher
jingle/casinoEnter.oggentering the casino (the "this time it is..." plate)
jingle/jackpot/number9.oggNumber 9: jackpot (a total of 6, or 22-24)

Sound effects

PathPlays on
land.ogglanding — once per square the piece hops onto (board-authorable slot)
stateChange.oggboard change — the tiles moving (board-authorable slot)
stateFace.oggboard change — the tiles' looks changing: square type, event effect (board-authorable slot)
cannon.ogga cannon FIRES — the launch (board-authorable slot; the flight is se/cannonFly.ogg)
door.oggdoor (board-authorable slot)
vehicle.oggvehicle (board-authorable slot)
switch.oggswitch (board-authorable slot)
se/cursor.oggcursor move
se/confirm.oggconfirm
se/cancel.oggcancel
se/buzzer.ogginvalid action
se/dice.ogg / se/diceStop.oggdice rolling (loops until the stop sounds) / dice stop
se/toll.ogg, se/toll2.oggse/toll5.oggshopping fee paid, five size tiers: ≤10G / ≤99G / ≤999G / ≤4999G / 5000G+
se/buy.ogg / se/sell.oggshop bought or built / shop sold
se/zoushi.oggcapital increase (the 増資 amount is confirmed)
se/dealDone.ogga negotiation settles (a shop swap or sale is agreed — a CPU-to-CPU exchange sounds the same)
se/mark.oggmark collected
se/markComplete.oggthe mark that *completes* the set — played instead of se/mark.ogg when the pick-up leaves you able to take a salary
se/lucky.ogglucky-square family
se/superLucky.oggyour share rises to 50% or more (super-lucky square, Chance #26 / #118)
se/warp.oggwarp
se/stockUp.ogg / se/stockDown.oggstock price up / down (the walk screen)
se/priceUp.ogg / se/priceDown.oggshop price up / down
se/cardFlip.oggcard flip
se/chanceOpen.oggthe chance panel slides in from the top
se/chanceBonus.ogga flip completes 4+ in a row (row / column / diagonal) — that line spins twice and the bonus is announced
se/stairs.ogggoing up or down a staircase (one sound for both directions; a separate slot from the door's door.ogg)
se/slotLever.oggthe slot lever is pulled — the start of a spin (casino machine and the Chance cards' area slot alike)
se/slotSpin.ogg / se/rouletteSpin.oggslot reels (loops — on the casino machine until the third stop) / roulette wheel (loops until the pocket lands)
se/slotStop.ogga slot reel comes to rest (three times per casino spin, once for an area slot)
se/casinoLose.oggcasino loss / dud
se/raceStart.oggrace start signal
se/mraceOpen.ogg, se/mraceMoney.ogg, se/mraceBoost.ogg, se/mraceOut.oggModern Race: box open / box money / speed boost / eliminated
se/gateUp.oggtoll-gate fee rises
se/aucTick.ogg / se/aucEnd.oggauction countdown / auction closed
se/aucBid.ogga bid is placed (every raise, by anyone)
se/shopRankUp.ogg / se/shopRankDown.ogga shop's building looks better / worse
se/cannonFly.oggloops while a piece is in the air after a cannon fires, until it lands
se/cannonLand.oggthe far end of a cannon flight — the piece touches down (cannon.ogg is the launch)

Board gimmicks — these only sound on boards that use the mechanic. Since 2026-08-08 these eight are not listed in Music settings or the sound-pack screens: the mechanics are still in development, so the rows appear only while Settings → Other → Developer mode is on. You can still ship them in a pack, and they still play when a board uses the mechanic — only the listing is held back:

PathPlays on
se/gateOpen.ogga gate opens and the route beyond it becomes passable
se/freeze.ogg / se/melt.ogga square freezes over / the ice melts away
se/whirlpool.ogga piece is caught by a whirlpool (hazard)
se/bossShot.oggthe boss fires
se/bossStun.ogg / se/bossDown.oggthe boss flinches / the boss is defeated
se/floorDrop.ogga piece drops to another floor
se/win/number9.oggNumber 9: win
se/win/hilow.ogg / se/jackpot/hilow.ogg / se/lose/hilow.oggHigh&Low: win / jackpot / miss
se/win/roulette.ogg / se/lose/roulette.oggGappori Roulette: win / miss
se/win/scratch.ogg / se/lose/scratch.oggDouble-Up Scratch: win / miss
se/win/panel.ogg / se/lose/panel.oggLucky Panel: win / miss
se/win/rope.ogg / se/lose/rope.oggWakuwaku Rope: win / miss

A per-casino win / jackpot / miss you do not supply falls back to the shared casino win / jackpot / miss sound, so filling one changes that casino only. Number 9's jackpot is the one that is a jingle (table above).

(Every path also accepts .wav. Future game features add new paths to this table; unknown paths in your pack only produce a warning, so packs stay compatible in both directions.)

4. Finding a sound's name

With Debug Mode on, open その他 → デバッグ → サウンド監査 (Sound audit) during a match: it lists every slot the game has requested this session and which layer answered — the board, a Music-settings assignment, your pack (by name), or "default". Trigger a sound, check the list: it's the fastest way to see what's left to cover.

5. Making a pack out of what you already imported

You don't need the dev folder at all if you already imported music the normal way:

  1. Settings → Music → Music settings, import your files with I and assign them to slots with ←→ (BGM, jingles and sound effects alike).
  2. Press P. Every assigned imported file is bundled into user://sounds/My sounds.essnd — a normal pack, ready to enable or share. Pressing P again writes My sounds-2.essnd; nothing is ever overwritten.

5a. Loading a pack in, then fine-tuning it

On its own a pack is take-it-or-leave-it, and its levels are the author's. When you like a pack but want one of its sounds quieter, load it instead:

  1. Settings → Music → Music settings, press L.
  2. The pack list appears. Space ticks a pack (A all, N none). You can tick several.
  3. Enter → Yes. The ticked packs' sounds are copied into Music settings and assigned slot by slot.

Afterwards they are ordinary imported tracks, so each slot has its own volume ( / +), mute (M) and streaming decision (T) — on the list or on the slot's own page (Enter).

5c. Renaming a pack / seeing what is in it

In Settings → Music → Sound packs, select a pack, then:

5b. Music settings, slot by slot

Settings → Music → Music settings lists every slot. Press Enter (or click a row) to open that slot's own page, which holds everything about it: the tracks you imported for it, the assignment, the track's volume, whether it plays in Streamer Mode, mute, import, and audition. S auditions from either screen.

Music settings — a track per slot
Music settings — a track per slot

Imported files belong to the slot you imported them under: a file imported on Title / menu BGM is offered on that row only, so a big library never buries the few tracks meant for the slot you are editing. Import the same file again on another slot and it is offered on *both* — the list shows +N more — and nowhere else. Anything imported before this feature existed has no recorded slot and is offered everywhere.

The page also deletes an imported track — the *Delete this imported track* row, or the Delete key. It removes the file itself, so a shared track leaves every other slot as well; the confirm says so before you commit, and starts on *No*.

Both screens work fully by mouse: hover highlights, click does what Enter does.

5e. Per-sound volume

Some sources are simply louder than others. Instead of asking every listener to ride the master volume, a sound can carry its own level, 0–400 (100 = play it as recorded). Above 100 the sound is amplified — that is the fix for a source that was simply recorded too quietly (200 is about ×4 amplitude, +12 dB; the 400 ceiling is ×16, +24 dB).

One slot's page — volume, streaming, preview
One slot's page — volume, streaming, preview

Five ways to set it:

  { "format": 1, "name": "MyPack", "volume": { "bgm.map": 50, "se.confirm": 80 } }

A manifest entry beats the file name for the same slot — it is the more deliberate statement of the two.

The Sound packs screen shows ♪ N levelled on any pack that carries levels.

A slot you muted packs at volume 0 — silence is what you had, so silence is what a receiver gets; the sound is still bundled, so they can turn it back up.

The level belongs to the track, not to the slot, so it applies everywhere that track is assigned — and it is what P writes into the pack. Enable a pack you received and its sounds play at the levels its author chose; nobody has to be told "turn track 3 down". Packs made before this existed play exactly as they always did.

5f. Theme songs (yours, and your character's)

Settings → Music → Theme songs. Four moments can carry the music of whoever the moment is about:

MomentWhose music
Level up (salary)the seat that took the salary
Goal-in-sight BGMthe seat that reached the target
Match-end / results BGMthe winner
Bankruptcythe seat that went bankrupt

5d. Per-board music (playlists)

You can pick a handful of tracks for one board and have the game shuffle them — the gesture Smash Ultimate's "My Music" gives you before a stage. No board editing, and nothing about someone else's board is changed.

Three ways in, one screen

Using it

  1. ◀▶ switches scene (Map / Goal near / Summon)
  2. Enter on a track adds or removes it (S preview, I import — ogg only, Del clear all)
  3. The first row is Track changes (track-by-track / one per match) — the same setting the Music tab holds

Rules

6. Import, upload, download

7. Streamer Mode

If you stream, Settings → Display → Streamer-Mode assets decides, per asset, what may be heard on stream. Imported music and sound packs start as "off stream" — while Streamer Mode is ON they are replaced by the built-in sounds until you allow them (press T on the row, or A to allow a whole group). The Sound packs screen shows stream ok / off stream per pack.

The Music settings rows show it too (2026-08-02): a row with a track assigned carries stream ✓ (it plays in Streamer Mode) or stream ✗ (it is replaced by the built-in sound). That badge is visible whether or not Streamer Mode is on, so the whole list can be checked before you go live. While Streamer Mode IS on, a track actually being replaced right now upgrades to the stronger *default on stream*. T on the row flips the decision without leaving the screen.

8. Limits (checked on import/publish)

LimitValue
Pack file sizeup to 64 MB
Single sound fileup to 16 MB
Files per packup to 200
Formatsogg, wav
Nameup to 24 characters

A failed import lists exactly which rule was broken and for which file.

9. Tips