This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
JingleBox2 is a cross-platform audio pad launcher built with .NET 9 and Avalonia UI for radio, streaming, and live audio workflows. It features a USE tab for performance (triggering audio pads) and a CONFIG tab for setup, with MIDI controller support.
dotnet restore # Restore packages
dotnet build # Build project
dotnet run # Run locally
dotnet publish -c Release -r win-x64 # Publish for Windows
dotnet publish -c Release -r linux-x64 # Publish for Linux- Entry Point:
Program.cs→App.axaml.cs→MainWindow.axaml.cs - ViewModels: MVVM pattern using CommunityToolkit.Mvvm
- Services: Audio engine (BASS), MIDI service (managed-midi), Config store (JSON)
Audio/- Audio playback engine using ManagedBass (BASS library wrapper)Config/- Configuration models and JSON persistence to%APPDATA%/JingleBox2/config.jsonMidi/- MIDI input handling and routing to padsViewModels/- MainViewModel (orchestrator), PadViewModel (per-pad), MidiViewModelViews/- Avalonia user controls (UseView, ConfigView, MidiView, SettingsView)Themes/- XAML resource dictionaries (Dark, Light, Neon, Industrial)native/- BASS audio library binaries for win-x64, linux-x64, linux-arm64
- Playback: PadViewModel → BassAudioEngine → BASS library → PadPlaybackChanged event → UI update
- Config: PadViewModel property change → MainViewModel → ConfigStore.Save() → JSON file
- MIDI: MidiService.MessageReceived → MidiRouter → PadTriggerAdapter → PadViewModel.TogglePlayCommand
BassAudioEngine(Audio/): Manages pad audio playback, device selection, file/stream sources, dynamic resizeConfigStore(Config/): JSON persistence with profile migration supportMidiRouter(Midi/): Maps MIDI messages to pad triggers with toggle/start modesMainViewModel: Central orchestrator connecting audio, config, and MIDI subsystemsPadViewModel: Single pad state (name, source, volume, playback state)
- Configurable pad matrix size (rows x columns) via SETTINGS tab
- Minimum: 4 pads total (e.g., 2x2, 1x4, 4x1)
- Maximum: 16 pads total (e.g., 4x4, 2x8, 8x2)
- Default: 4 rows x 2 columns = 8 pads (backward compatible)
- Two source types per pad: local files (WAV/MP3/OGG/FLAC) or HTTP streams
- BASS library binaries are copied to output via build targets in csproj
- managed-midi API has obsolete warnings (suppressed via
<NoWarn>CS0618</NoWarn>) - Startup errors logged to
startup.logfor debugging