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.
/tracks//extra/UI/font_config.txtA 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.
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
- and _ are valid separators.| Folder | Purpose |
|---|---|
/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. |
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.
Tip: Keeping everything at 44.1 kHz, 16-bit PCM, mono is the safest and cleanest approach.
A monophonic font uses a single hum.wav file. Effects interrupt the hum and the hum resumes after the effect is done.
hum.wav
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
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
| Base Name | Numbering | Trigger | Notes |
|---|---|---|---|
poweron | Legacy first | Ignition | poweron.wav, poweron2.wav, ... |
poweroff | Legacy first | Retraction | poweroff.wav, poweroff2.wav, ... |
hum | Single | Blade hum for mono fonts | hum.wav |
humM | Numbered | Blade hum for poly fonts | humM1.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
| Base Name | Numbering | Trigger | Fallback |
|---|---|---|---|
clash | Numbered | Impact detected | — |
swing | Numbered | Swing motion | — |
slash | Numbered | Hard directional swing | swing |
spin | Numbered | Spinning motion | swing |
stab | Numbered | Stab motion | clash |
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
| Base Name | Numbering | Trigger | Notes |
|---|---|---|---|
lockup | Legacy first | Lockup active | Loops while active |
startlock | Numbered | Lockup begins | Poly only |
endlock | Numbered | Lockup ends | Plays once |
drag | Legacy first | Drag active | Falls back to lockup if absent |
startdrag | Numbered | Drag begins | Poly only |
enddrag | Numbered | Drag ends | Plays 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.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 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
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
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 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 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
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)
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)
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 sounds live in /extra/UI/ rather than in the font folders.
| File Name | Purpose |
|---|---|
beep.wav | Generic beep |
ok.wav | Confirmation |
cancel.wav | Cancellation |
plus.wav | Increment or next |
minus.wav | Decrement or previous |
neutral.wav | Neutral feedback |
menu.wav | Menu intro |
menubgnd.wav | Menu background loop |
lowbattery.wav | Low battery warning |
deadbattery.wav | Dead battery alert |
temperature.wav | High temperature warning |
nostart.wav | Blocked ignition warning |
bladein.wav | Blade inserted |
bladeout.wav | Blade removed |
configsaved.wav | Config saved |
fontconfigsaved.wav | Font config saved |
colorsconfigsaved.wav | Colors config saved |
prefsconfigsaved.wav | Preferences saved |
calibratemag.wav | Magnetometer calibration |
colors.wav | Color selection mode |
profiles.wav | Profile selection mode |
spectrum.wav | Spectrum mode |
colordial.wav | Hue dial mode |
dim.wav | Dimming mode |
mute.wav | Mute toggle |
deepsleep.wav | Deep sleep activation |
startdfu.wav | Firmware update starting |
dfudone.wav | Firmware update complete |
themeswitch.wav | Theme switching |
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.
| Value | Mode | Behavior |
|---|---|---|
| 0 | Random | True random selection, including possible repeats. |
| 1 | Sequential | Plays files in order and loops back to the start. |
| 2 | Random No Repeat | Random selection without immediately repeating the same file. |
| 3 | Expressive | Enhanced random mode for more natural variation. |
random=2
randb=0
| Missing Sound | Falls Back To |
|---|---|
slash | swing |
spin | swing |
stab | clash |
drag | lockup |
color.wav | swing1.wav |
poweron.wavpoweroff.wavhum.wav or humM1.wavclash1.wavswing1.wavboot.wavfont_config.txtfont.bmp for the OLED displaycolor.wavlockup.wav and endlock1.wavblaster.wavforce.wavpreon1.wav and pstoff1.wavhswing1.wav and lswing1.wavstab1.wav and drag.wav| Sound | Base Name | First File | Additional Files | Location |
|---|---|---|---|---|
| Boot | boot | boot.wav | boot2.wav, ... | Font folder |
| Pre-On | preon | preon1.wav | preon2.wav, ... | Font folder |
| Power On | poweron | poweron.wav | poweron2.wav, ... | Font folder |
| Power On (Force) | poweronf | poweronf.wav | — | Font folder |
| Power Off | poweroff | poweroff.wav | poweroff2.wav, ... | Font folder |
| Power Off (Motion) | pwroff2 | pwroff2.wav | — | Font folder |
| Post-Off | pstoff | pstoff1.wav | pstoff2.wav, ... | Font folder |
| Hum (Mono) | hum | hum.wav | — | Font folder |
| Hum (Poly) | humM | humM1.wav | humM2.wav, ... | Font folder |
| Clash | clash | clash1.wav | clash2.wav, ... | Font folder |
| Swing | swing | swing1.wav | swing2.wav, ... | Font folder |
| Slash | slash | slash1.wav | slash2.wav, ... | Font folder |
| Spin | spin | spin1.wav | spin2.wav, ... | Font folder |
| Stab | stab | stab1.wav | stab2.wav, ... | Font folder |
| Blaster | blaster | blaster.wav | blaster2.wav, ... | Font folder |
| Lockup | lockup | lockup.wav | lockup2.wav, ... | Font folder |
| Start Lockup | startlock | startlock1.wav | startlock2.wav, ... | Font folder |
| End Lockup | endlock | endlock1.wav | endlock2.wav, ... | Font folder |
| Drag | drag | drag.wav | drag2.wav, ... | Font folder |
| Start Drag | startdrag | startdrag1.wav | startdrag2.wav, ... | Font folder |
| End Drag | enddrag | enddrag1.wav | enddrag2.wav, ... | Font folder |
| Force | force | force.wav | force2.wav, force3.wav, ... | Font folder |
| Force Clash | fclash | fclash1.wav | fclash2.wav, ... | Font folder |
| Combo | combo | combo1.wav | combo2.wav, ... | Font folder |
| Smoothswing High | hswing | hswing1.wav | hswing2.wav, ... | Font folder |
| Smoothswing Low | lswing | lswing1.wav | lswing2.wav, ... | Font folder |
| Color Change | color | color.wav | — | Font folder |
| Track (Global) | track | track1.wav | track2.wav, ... | /tracks/ |
| Track (Local) | track | track1.wav | track2.wav, ... | Font /tracks/ |
| Idle Track | idle | idle1.wav | idle2.wav, ... | Font /tracks/ |
| Cantina | cantina | cantina.wav | — | /tracks/ |