GitHub

Fox Red Labs / Builds / Audio

Jack-o'-Lantern Jukebox

Halloween music and color-changing light from an MSPM33 C321A LaunchPad, the BOOSTXL-AUDIO and a power bank. No wiring.

MediumNo wiring

The LaunchPad and the Audio BoosterPack inside a carved pumpkin on a power bank, the light moving from orange to purple with the music. 10 seconds; the sound is removed from this clip. To hear the show without a board, run portability/boosterpacks/audio/host/run_halloween.sh <folder> on a Mac: it writes a 165 s preview with sound.

Parts and steps

You need

  1. Build the show.TERMINAL

    Build the 16 kHz show image with the five recordings from portability/boosterpacks/audio/tracks/. The script uses TI's SDK makefile and only builds; it never flashes.

    OUT=build/halloween bash portability/boosterpacks/audio/boards/mspm33c321a/build.sh halloween

    You should see: The last lines are built build/halloween/gpio_toggle_output/ticlang/gpio_toggle_output.out and the flash use from the map, about 913 kB of 1 MB.

  2. Check the image, then flash it.TERMINAL

    Plug the LaunchPad into the Mac by USB-C with no BoosterPack on it. Check the image never puts the chip to sleep, then flash it with DSLite. Copy mspm33c321a/MSPM33C321A_<probe serial>.ccxml to mspm33c321a/MSPM33C321A_<serial>.ccxml and put your probe serial in place of <probe serial>. The flash line is assembled from the board's flash command and this build's output path.

    Replace <serial> before you run this.

    python3 tools/preflight_image.py mspm33c321a build/halloween/gpio_toggle_output/ticlang/gpio_toggle_output.out /Applications/ti/ccs2101/ccs/ccs_base/DebugServer/bin/DSLite flash -c mspm33c321a/MSPM33C321A_<serial>.ccxml -e -f -v build/halloween/gpio_toggle_output/ticlang/gpio_toggle_output.out

    You should see: The check prints SAFE, DSLite finishes with the verify passing, and a serial terminal at 115200 shows HALLOWEEN SHOW, BOOSTXL-AUDIO app, ... sample rate 16000 Hz, recorded tracks 5.

  3. Unplug, then stack the Audio BoosterPack.BENCH

    Unplug the USB cable first: the swap happens with the board unpowered. Pull off any other BoosterPack. Plug the BOOSTXL-AUDIO onto the same rows, its pin 1 on J1 pin 1 (3V3). Check jumper J5 on the pack sits on SPI DAC, as shipped, and push the pack's volume slider to the top.

    You should see: The pack sits flat on J1 to J4 with its speaker facing up.

  4. Plug in the power bank.BENCH

    Plug the power bank into the LaunchPad's USB-C socket. Nothing else is connected.

    You should see: The Mountain King recording opens the show and the RGB LED swaps orange and purple on the beat. Songs shuffle and loop, with a scare sound between them.

  5. Use the two buttons.BENCH

    S2 short: next song. S1 short: next light theme (pumpkin, fire, lightning, ghost, heartbeat, witch, music). S2 held 0.7 s: next sound mode (clean, haunted, graveyard, mad lab). S1 held 0.7 s: volume step. Both together, released within 2 s: shuffle on or off. Both held 2 to 5 s: speaker EQ on or off, to compare.

    You should see: Every action beeps, blinks the LED and prints a line on the serial console at 115200. Settings start fresh at each power-up.

Or hand it to a coding assistant

Paste this in a terminal. It hands off to an AI assistant.

git clone --depth 1 --filter=blob:none https://github.com/Fox-Red-Labs/fox-red-labs.git && cd fox-red-labs ./start.sh mspm33c321a jack-o-lantern-jukebox --assistant claude

It runs the steps above and reports what it saw.

Not Claude Code? Copy this prompt instead.
Clone https://github.com/Fox-Red-Labs/fox-red-labs and read portability/boosterpacks/audio/AGENTS.md first. Then run Jack-o'-Lantern Jukebox on my LP-MSPM33C321A, following docs/builds/jack-o-lantern-jukebox.md. Tell me when to plug in a board and what you saw at each step.

Make it yours

By hand

Install ffmpeg first (brew install ffmpeg). The tool cuts, filters and encodes any audio file into the show; then run steps 1 and 2 again. The five shipped recordings use 174 s and leave room for about 22 s more: to add a longer song, delete one of them from portability/boosterpacks/audio/tracks/ first.

Replace <any audio file> before you run this.

python3 portability/boosterpacks/audio/tools/add_track.py "<any audio file>" --start 30 --length 35 --title "My spooky song" --no-build

You should see: The tool prints the track it wrote; after steps 1 and 2, your song joins the shuffle.

If something goes wrong

It stops at once with exit code 2The script did not find the MSPM33 SDK or TI Arm Clang: install them in the default /Applications/ti folders.
DSLite reports Device Connection Error ... low power modeReset the probe with xds110reset -s <serial> -a toggle -d 200 (it sits beside xdsdfu) and flash again.
The pack does not seatCheck both header rows line up; it goes on one way only, pin 1 to 3V3.
You hear nothingCheck J5 sits on SPI DAC and the slider is up.
Nothing happens at allThe bank switched off at low load: use one with an always-on or low-current mode.
More troubleshooting
The board does not start after you held S1 while plugging inThat button starts the chip's bootloader: unplug and plug in again without touching it.
The build reports the flash is fullShorten the new track with --length or drop another one from the folder.

Every fix for this board: the FAQ.

What to build next

Every build. The code for all of them is in the GitHub repository.

Evidence and limitsThe MSPM33 C321A plays five public-domain orchestra and organ recordings and four synth songs through the BOOSTXL-AUDIO from a power bank, with its RGB LED following the music. Ran on 1 board. Results, sources, timing and limits.

Expected result: After flashing and stacking the pack, the LaunchPad plays the show from a power bank with no computer: recordings and synth songs on shuffle, scare sounds between them, and the RGB LED following the music.

What this shows

  • One LaunchPad with 1 MB of flash plays recorded orchestra and organ music: five 30 to 40 s cuts at 10 kHz in IMA ADPCM, 849.6 kB together, played back at 16 kHz.
  • The sample interrupt keeps time with room to spare: 15,999 frames a second, 0 late, with the worst interrupt at 5.8k of its 10k-cycle budget.
  • A speaker EQ fitted from a measured tone sweep: 300 Hz high-pass, five peaking filters and a bass enhancer for a speaker whose response spreads 15.5 dB from 500 Hz to 4 kHz.
What this does not establish, and limits

What this does not establish

  • The power bank's current draw and run time were not measured.

Limits to keep in mind

  • The pack's microphone gets no power on this LaunchPad (BoosterPack pin 5 is not wired to the chip), so the clap and knock listener is off here.
  • Loudness stops rising above about volume step 10 of 16: a 1 kHz tone through a laptop microphone rose 8.6 dB from step 4 to 10 and 0.7 dB from 10 to 16. Whether the amplifier, the speaker or the microphone limits it was not separated.
  • Some power banks switch off under about 50 to 100 mA; the show has no low-power mode, so pick a bank that stays on.
  • The speaker EQ was fitted from a laptop's built-in microphone, taken as flat.

Sources

Versions, sizes and timing

DAC frames a second15,999, 0 late ticks over 480 s
Worst sample interrupt5.8k of 10k cycles at 160 MHz
Speaker EQ300 Hz high-pass, five peaking filters and a bass enhancer, fitted to a stepped tone sweep heard by a laptop microphone; the measured spread from 500 Hz to 4 kHz is 15.5 dB, the fit predicts 6.4 dB with the EQ
Image size913.0 kB of 1 MB flash; 19.3 kB RAM
SoftwareMSPM33 SDK 1.04.00.00, TI Arm Clang 5.1.1.LTS -O2, SysConfig 1.28.0, Intel Mac, macOS 15.7README notes

Evidence

  • On 2026-10-25 the show played from a USB power bank inside a carved pumpkin, heard and filmed. The clip on this page is from that night. README notes
  • The firmware counted 15,999 DAC frames a second (one frame is one 16-bit write to the DAC) against the cycle counter, with 0 late sample ticks over 480 s and 7.68M frames.
  • Six of six button actions, injected from the serial console, did what the control card says.
  • All five recordings are public domain: Gounod, Grieg, Mussorgsky, Saint-Saens and Bach. Each track's file keeps its source page, license and cut. the tracks folder

Other boards

What the status words mean

Works ran here and did what it shouldCould work some of it ran; real porting effort is left; hover for whatNot for this chip the chip or its vendor software cannot; hover for why

Result grid

Project
LP-MSPM0G3507MSPM0G3507 chip
LP-MSPM0L1306MSPM0L1306 chip
LP-EM-CC2340R5CC2340R52 chip
LAUNCHXL-F2800137TMS320F2800137 chip
Jack-o'-Lantern Jukebox
LP-MSPM0G3507
LP-MSPM0L1306
LP-EM-CC2340R5
LAUNCHXL-F2800137

Works ran here and did what it shouldShould work it builds; only naming, packaging or build glue is in the way; hover for whichCould work some of it ran; real porting effort is left; hover for whatNot for this chip the chip or its vendor software cannot; hover for why

Source files

Get the code and tell us how it wentThe clone command, the board folder with its AGENTS.md, reports from others, and the three report forms.

Get the code

Clone the repository and open the board's folder below. AGENTS.md is a plain text file of notes for AI coding assistants, and llms.txt at the root indexes the site for one.

git clone https://github.com/Fox-Red-Labs/fox-red-labs.git

Code is BSD-3-Clause, writing is CC BY 4.0; third-party folders keep their own licenses.

Built it? Tell us

Built this, or got stuck? Report it on GitHub with a few short answers. Your report shows here in your words, marked as yours. A failure that repeats on the bench gets its fix here.