How ck2739046/bpm-measurer works
BPM-Measurer is a desktop audio tool for inspecting audio and editing beat timing. The main workflow loads audio, prepares waveform and spectrogram data for synchronized visualization, and lets users edit timing points with undo/redo and metronome playback. Timing configurations can be imported or exported; command-line modes also support headless parsing and host notification. The graph reflects README capabilities and indexed references; some UI wiring is documented by the index rather than shown in excerpts, so only directly supported relationships are drawn.
Main entry points: App.xaml.cs App startup · MainWindow.Timing.cs Timing editor UI · MainWindow.Playback.cs Playback controls · App.HeadlessExport.cs Headless export
Components 30
Startup and export
- App startup
App.xaml.cs - Headless export
App.HeadlessExport.cs - Config parser
TimingConfigParser.cs - Notify JSON file
Audio visualization
- Audio input
BpmAudioLoader.cs - Audio precompute
PrecomputedAudioData.cs - FFTW native bridge
FftwNative.cs - Waveform tiles
TileRendering/WaveformTileSet.cs - Spectrogram tiles
TileRendering/SpectrogramTileSet.cs - Tile transforms
TileRendering/TileSet.cs - Waveform renderer
WaveformBitmapRenderer.cs - Spectrogram renderer
SpectrogramBitmapRenderer.cs - Spectrogram colormaps
WaveSpectrogramColormap.cs - Playback controls
MainWindow.Playback.cs - Plot coordination
MainWindow.Plots.cs
Timing editor
- Timing editor UI
MainWindow.Timing.cs - Timing calculations
TimingEngine.cs - Timing points
Models/TimingPoint.cs - Beat grid math
BeatGridMath.cs - Undo and redo
Undo/TimingUndo.cs - Metronome controls
MainWindow.Metronome.cs - Metronome audio
MetronomeClick.cs - Config UI
MainWindow.Config.cs - Config serializer
TimingConfigSerializer.cs - Segment row factory
SegmentRowFactory.cs
Shared services
- Localization resources
Langs/Langs.resx - Crash logging
DebugLog.cs - Load timing log
LoadTimingLogger.cs
Other components
- User
- HachimiDX host
Connections 31
- User → App startup: launches
README.md - HachimiDX host → App startup: supplies options
README.md - App startup → Headless export: dispatches
App.xaml.cs - Headless export → Config parser: parses with
App.HeadlessExport.cs - Headless export → Notify JSON file: writes JSON
App.HeadlessExport.cs - App startup → Playback controls: opens GUI
README.md - Playback controls → Audio input: loads audio
MainWindow.Playback.cs - Playback controls → Audio precompute: precomputes audio
MainWindow.Playback.cs - Audio precompute → FFTW native bridge: uses FFTW
PrecomputedAudioData.cs - Plot coordination → Waveform tiles: creates tiles
MainWindow.Plots.cs - Plot coordination → Spectrogram tiles: creates tiles
MainWindow.Plots.cs - Waveform tiles → Waveform renderer: renders with
TileRendering/WaveformTileSet.cs - Spectrogram tiles → Spectrogram renderer: renders with
TileRendering/SpectrogramTileSet.cs - Spectrogram renderer → Spectrogram colormaps: uses palette
SpectrogramBitmapRenderer.cs - Waveform tiles → Tile transforms: inherits transforms
TileRendering/WaveformTileSet.cs - Spectrogram tiles → Tile transforms: inherits transforms
TileRendering/SpectrogramTileSet.cs - User → Timing editor UI: edits timing
README.md - Timing editor UI → Timing calculations: recalculates
MainWindow.Timing.cs - Timing editor UI → Timing points: maintains points
MainWindow.Timing.cs - Timing editor UI → Segment row factory: builds rows
MainWindow.Timing.cs - Timing editor UI → Beat grid math: uses grid math
- User → Undo and redo: undoes edits
README.md - User → Metronome controls: checks timing
README.md - Metronome controls → Timing calculations: queries timing
MainWindow.Metronome.cs - Metronome controls → Metronome audio: plays clicks
MainWindow.Metronome.cs - Config UI → Config parser: imports config
MainWindow.Config.cs - Config UI → Config serializer: exports config
MainWindow.Config.cs - User → Config UI: imports or exports
README.md - App startup → Localization resources: sets language
App.xaml.cs - App startup → Crash logging: logs crashes
App.xaml.cs - Playback controls → Load timing log: records load timing
MainWindow.Playback.cs