CRYSTAL FOCUS X
Beginner Guide Series
SOUND FONT STRUCTURE
SD card layout · WAV naming · Font organization

Sound Font Structure & File Naming

A practical guide to how sound fonts are organized on the SD card, how files should be named, which sounds are optional or required, and where each type of audio belongs.

What you will learn
  • How font folders are structured on the SD card
  • Which file names the firmware expects
  • The difference between monophonic and polyphonic fonts
  • Which sounds are required, optional, or have fallbacks
Main locations
Font folders
SD root
Global tracks
/tracks/
UI sounds
/extra/UI/
Per-font config
font_config.txt
Best used for
  • Building a new sound font from scratch
  • Checking file names and folder layout
  • Understanding fallbacks and optional sounds
  • Organizing mono and poly fonts correctly

What Is a Sound Font?

A sound font is the collection of WAV files that defines the complete sonic identity of your saber. Ignition, hum, swings, clashes, lockup, power off, and more all come from the active font folder.

The Crystal Focus X supports multiple fonts on a single SD card, so you can switch between completely different sound styles without changing hardware.

SD Card Layout

Font Folders

Sound fonts live in numbered folders on the root of the SD card. Each folder name must begin with a number, followed by either a dash or an underscore, and then a descriptive name.

/
├── 1-Skywalker/
│   ├── boot.wav
│   ├── poweron.wav
│   ├── hum.wav
│   ├── clash1.wav
│   ├── ...
│   └── font_config.txt
├── 2-DarkSide/
│   ├── boot.wav
│   ├── poweron.wav
│   ├── humM1.wav
│   ├── ...
│   └── font_config.txt
├── 3_ElectricBlade/
│   └── ...
├── tracks/
│   ├── track1.wav
│   └── track2.wav
├── extra/
│   └── UI/
│       ├── beep.wav
│       ├── ok.wav
│       └── ...
└── config.txt

Global Folders

FolderPurpose
/tracks/Music tracks shared across all fonts.
/extra/UI/UI feedback sounds such as beeps, confirmations, and warnings.
/extra/GRAFX/GraFX bitmap artwork files.
/extra/ACCENTS/Accent LED sequence files.
/extra/PIXIES/Pixel accent strip animation files.

Per-Font Tracks

A font can also contain its own local tracks/ folder for font-specific music and ambient off-state tracks.

/2-DarkSide/
├── tracks/
│   ├── track1.wav
│   ├── idle1.wav
│   └── idle2.wav
├── poweron.wav
└── ...

Local tracks take priority over the shared global /tracks/ folder when that font is active.

Audio Format

Tip: Keeping everything at 44.1 kHz, 16-bit PCM, mono is the safest and cleanest approach.

Monophonic vs. Polyphonic Fonts

Monophonic

A monophonic font uses a single hum.wav file. Effects interrupt the hum and the hum resumes after the effect is done.

hum.wav

Polyphonic

A polyphonic font uses numbered hum files such as humM1.wav, humM2.wav, and so on. The hum keeps playing on its own channel while other sounds layer on top of it.

humM1.wav
humM2.wav
humM3.wav

Sound File Categories

Naming Convention

Most sound types use a base name plus a number. Some use a legacy first file with no number, followed by numbered variants.

blaster.wav
blaster2.wav
blaster3.wav

Other types always start at 1:

clash1.wav
clash2.wav
clash3.wav

Core Sounds

Base NameNumberingTriggerNotes
poweronLegacy firstIgnitionpoweron.wav, poweron2.wav, ...
poweroffLegacy firstRetractionpoweroff.wav, poweroff2.wav, ...
humSingleBlade hum for mono fontshum.wav
humMNumberedBlade hum for poly fontshumM1.wav, humM2.wav, ...

Examples:

poweron.wav           ← first power-on sound
poweron2.wav          ← second power-on sound
poweron3.wav          ← third power-on sound

poweroff.wav          ← first power-off sound
poweroff2.wav         ← second power-off sound
poweroff3.wav         ← third power-off sound

hum.wav               ← monophonic hum (single file)

humM1.wav             ← first polyphonic hum
humM2.wav             ← second polyphonic hum
humM3.wav             ← third polyphonic hum

Combat Sounds

Base NameNumberingTriggerFallback
clashNumberedImpact detected
swingNumberedSwing motion
slashNumberedHard directional swingswing
spinNumberedSpinning motionswing
stabNumberedStab motionclash

Examples:

clash1.wav            ← first clash sound
clash2.wav            ← second clash sound
clash3.wav            ← third clash sound

swing1.wav            ← first swing sound
swing2.wav            ← second swing sound
swing3.wav            ← third swing sound

slash1.wav            ← first slash sound
slash2.wav            ← second slash sound
slash3.wav            ← third slash sound

spin1.wav             ← first spin sound
spin2.wav             ← second spin sound
spin3.wav             ← third spin sound

stab1.wav             ← first stab sound
stab2.wav             ← second stab sound
stab3.wav             ← third stab sound

Lockup & Drag Sounds

Base NameNumberingTriggerNotes
lockupLegacy firstLockup activeLoops while active
startlockNumberedLockup beginsPoly only
endlockNumberedLockup endsPlays once
dragLegacy firstDrag activeFalls back to lockup if absent
startdragNumberedDrag beginsPoly only
enddragNumberedDrag endsPlays once

Examples:

lockup.wav            ← first lockup loop
lockup2.wav           ← second lockup loop
lockup3.wav           ← third lockup loop

startlock1.wav        ← first lockup start
startlock2.wav        ← second lockup start
startlock3.wav        ← third lockup start

endlock1.wav          ← first lockup end
endlock2.wav          ← second lockup end
endlock3.wav          ← third lockup end

drag.wav              ← first drag loop
drag2.wav             ← second drag loop
drag3.wav             ← third drag loop

startdrag1.wav        ← first drag start
startdrag2.wav        ← second drag start
startdrag3.wav        ← third drag start

enddrag1.wav          ← first drag end
enddrag2.wav          ← second drag end
enddrag3.wav          ← third drag end

Blaster Sounds

blaster.wav, blaster2.wav, and so on are used for blaster deflect effects.

Examples:

blaster.wav           ← first blaster deflect
blaster2.wav          ← second blaster deflect
blaster3.wav          ← third blaster deflect

Force Sounds

Force sounds support both a legacy and a modern naming scheme.

Legacy scheme: force.wav is the regular force effect and force2.wav is the force-clash sound.

Modern scheme: force.wav, force2.wav, force3.wav, and so on are all force sounds, while fclash1.wav, fclash2.wav, and so on are force-clash sounds.

Legacy examples:

force.wav             ← force effect sound
force2.wav            ← force-clash sound

Modern examples:

force.wav             ← first force effect
force2.wav            ← second force effect
force3.wav            ← third force effect

fclash1.wav           ← first force-clash
fclash2.wav           ← second force-clash
fclash3.wav           ← third force-clash

Pre-On & Post-Off Sounds

preon1.wav, preon2.wav, ... play before ignition, while pstoff1.wav, pstoff2.wav, ... play after retraction is complete.

Examples:

preon1.wav            ← first pre-on sound
preon2.wav            ← second pre-on sound
preon3.wav            ← third pre-on sound

pstoff1.wav           ← first post-off sound
pstoff2.wav           ← second post-off sound
pstoff3.wav           ← third post-off sound

Special Power Sounds

poweronf.wav is a special power-on sound for gesture-based ignition. pwroff2.wav is an alternate retraction sound when the saber is moving during power-off.

Examples:

poweronf.wav          ← motion ignition sound (single file)
pwroff2.wav           ← moving power-off sound (single file)

Boot Sound

Boot sounds use boot.wav, boot2.wav, and so on.

Examples:

boot.wav              ← first boot sound
boot2.wav             ← second boot sound
boot3.wav             ← third boot sound

Smoothswing Sounds

Smoothswing uses paired high and low swing files instead of simple one-shot swing clips:

hswing1.wav           ← high swing pair 1
lswing1.wav           ← low swing pair 1

hswing2.wav           ← high swing pair 2
lswing2.wav           ← low swing pair 2

hswing3.wav           ← high swing pair 3
lswing3.wav           ← low swing pair 3

Music Tracks

track1.wav, track2.wav, and so on can live in the global /tracks/ folder or in a font's own tracks/ subfolder. idle1.wav, idle2.wav, and so on are font-local ambient tracks for when the saber is off.

Examples:

tracks/track1.wav     ← first music track
tracks/track2.wav     ← second music track
tracks/track3.wav     ← third music track

tracks/idle1.wav      ← first idle ambient track (in font folder)
tracks/idle2.wav      ← second idle ambient track
tracks/idle3.wav      ← third idle ambient track

tracks/cantina.wav    ← easter egg track (single file)

Transition Sound

color.wav plays during a blade color profile change. If it is missing, the firmware falls back to swing1.wav.

Examples:

color.wav             ← color change sound (single file)

Combo Sounds

combo1.wav, combo2.wav, and so on are reserved for future combo gesture support.

Examples:

combo1.wav            ← first combo sound
combo2.wav            ← second combo sound
combo3.wav            ← third combo sound

UI Sound Files

UI sounds live in /extra/UI/ rather than in the font folders.

File NamePurpose
beep.wavGeneric beep
ok.wavConfirmation
cancel.wavCancellation
plus.wavIncrement or next
minus.wavDecrement or previous
neutral.wavNeutral feedback
menu.wavMenu intro
menubgnd.wavMenu background loop
lowbattery.wavLow battery warning
deadbattery.wavDead battery alert
temperature.wavHigh temperature warning
nostart.wavBlocked ignition warning
bladein.wavBlade inserted
bladeout.wavBlade removed
configsaved.wavConfig saved
fontconfigsaved.wavFont config saved
colorsconfigsaved.wavColors config saved
prefsconfigsaved.wavPreferences saved
calibratemag.wavMagnetometer calibration
colors.wavColor selection mode
profiles.wavProfile selection mode
spectrum.wavSpectrum mode
colordial.wavHue dial mode
dim.wavDimming mode
mute.wavMute toggle
deepsleep.wavDeep sleep activation
startdfu.wavFirmware update starting
dfudone.wavFirmware update complete
themeswitch.wavTheme switching

Per-Font Configuration

Each font folder can include a font_config.txt file for settings that belong specifically to that font, such as smoothswing tuning, hum tuning, skip options, and Accubolt timings.

Random Sound Selection

ValueModeBehavior
0RandomTrue random selection, including possible repeats.
1SequentialPlays files in order and loops back to the start.
2Random No RepeatRandom selection without immediately repeating the same file.
3ExpressiveEnhanced random mode for more natural variation.
random=2
randb=0

Sound Fallbacks

Missing SoundFalls Back To
slashswing
spinswing
stabclash
draglockup
color.wavswing1.wav

Minimum Font Checklist

Recommended Additions

Quick Reference

SoundBase NameFirst FileAdditional FilesLocation
Bootbootboot.wavboot2.wav, ...Font folder
Pre-Onpreonpreon1.wavpreon2.wav, ...Font folder
Power Onpoweronpoweron.wavpoweron2.wav, ...Font folder
Power On (Force)poweronfpoweronf.wavFont folder
Power Offpoweroffpoweroff.wavpoweroff2.wav, ...Font folder
Power Off (Motion)pwroff2pwroff2.wavFont folder
Post-Offpstoffpstoff1.wavpstoff2.wav, ...Font folder
Hum (Mono)humhum.wavFont folder
Hum (Poly)humMhumM1.wavhumM2.wav, ...Font folder
Clashclashclash1.wavclash2.wav, ...Font folder
Swingswingswing1.wavswing2.wav, ...Font folder
Slashslashslash1.wavslash2.wav, ...Font folder
Spinspinspin1.wavspin2.wav, ...Font folder
Stabstabstab1.wavstab2.wav, ...Font folder
Blasterblasterblaster.wavblaster2.wav, ...Font folder
Lockuplockuplockup.wavlockup2.wav, ...Font folder
Start Lockupstartlockstartlock1.wavstartlock2.wav, ...Font folder
End Lockupendlockendlock1.wavendlock2.wav, ...Font folder
Dragdragdrag.wavdrag2.wav, ...Font folder
Start Dragstartdragstartdrag1.wavstartdrag2.wav, ...Font folder
End Dragenddragenddrag1.wavenddrag2.wav, ...Font folder
Forceforceforce.wavforce2.wav, force3.wav, ...Font folder
Force Clashfclashfclash1.wavfclash2.wav, ...Font folder
Combocombocombo1.wavcombo2.wav, ...Font folder
Smoothswing Highhswinghswing1.wavhswing2.wav, ...Font folder
Smoothswing Lowlswinglswing1.wavlswing2.wav, ...Font folder
Color Changecolorcolor.wavFont folder
Track (Global)tracktrack1.wavtrack2.wav, .../tracks/
Track (Local)tracktrack1.wavtrack2.wav, ...Font /tracks/
Idle Trackidleidle1.wavidle2.wav, ...Font /tracks/
Cantinacantinacantina.wav/tracks/