Skip to content

Global input calibration, mic cal files, and calibrated frequency displays#420

Open
Skeyelab wants to merge 25 commits into
tlecomte:masterfrom
ericdahl-dev:feature/global-calibration
Open

Global input calibration, mic cal files, and calibrated frequency displays#420
Skeyelab wants to merge 25 commits into
tlecomte:masterfrom
ericdahl-dev:feature/global-calibration

Conversation

@Skeyelab

Copy link
Copy Markdown

Summary

  • Add app-wide calibration service (offset, unit, reference note) in Settings, with one-click RMS calibration from live input.
  • Support microphone .txt / REW .cal frequency correction files (Import microphone calibration files (.cal / factory .txt) #419) and apply scalar + frequency adjustments to FFT, spectrogram, and octave widgets.
  • Per-dock override mixin for dB levels and long-term levels; sidebar meters always follow global cal with SPL/dBu linear bar ranges vs IEC dBFS.
  • Fix calibrated display ranges so analysis traces stay visible when offset shifts axis limits.

Test plan

  • export QT_QPA_PLATFORM=offscreen QT_QUICK_CONTROLS_STYLE=Fusion && .venv/bin/python friture/test/runner.py (117 tests)
  • Calibrate with a 94 dB SPL reference tone; confirm RMS reads target and peak ~3 dB higher
  • Verify FFT, spectrogram, and octave show traces after calibration (not blank/black)
  • Load a mic cal file and confirm high-frequency spectrum shift matches file

Made with Cursor

Skeyelab and others added 25 commits June 12, 2026 14:53
Introduce unit tests for ring buffer, IEC metering, pitch tracker widget behavior, and splash settings; run them in GitHub Actions with coverage. Also adds dark palette fallback, configurable splash screen, dock settings Close buttons, and agent skills configuration for fork development.

Co-authored-by: Cursor <cursoragent@cursor.com>
sounddevice fails to import without libportaudio2 on Ubuntu runners.

Co-authored-by: Cursor <cursoragent@cursor.com>
Non-editable pip install runs site-packages code while coverage
measures the checkout, reporting ~3% instead of ~15%.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep test-linux on push and pull_request; Windows, Linux AppImage,
macOS, and release jobs are skipped until re-enabled.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add test suite, CI, and Linux UX improvements
Cover audioproc FFT sizing, level meter IEC mapping, ballistic peak
hold behavior, and silent pitch input; raise CI coverage floor to 16%.

Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce AudioHarness for pushing frames through AudioBuffer like production,
cover levels/spectrum/octave widgets and settings bootstrap, exclude helpers
from discovery, and raise CI coverage floor to 22%.

Co-authored-by: Cursor <cursoragent@cursor.com>
Expand test suite with widget integration and core audio tests
Split PortAudio into portaudio_ingest adapter, add TestAudioIngest for
tests, wire Analyzer and Settings through get_audio_ingest(), and keep
AudioBackend() as a backward-compatible alias.

Closes #2

Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce injectable audio ingest seam
Add DockAnalysisWidget protocol, RingBufferFrameReader for FFT docks,
migrate spectrum and levels helpers, wire dock typing without ignores,
and document test harness conventions.

Closes #3

Co-authored-by: Cursor <cursoragent@cursor.com>
Formalize dock analysis widget protocol
Move smoothing state and spectrum math out of Spectrum_Widget into a
pure numpy module with unit tests; widget becomes a thin QML adapter.

Closes #4

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Inject InputDeviceCatalog into Settings_Dialog, move fatal no-device policy
to Analyzer, and apply saved device selection on the ingest layer at startup.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Run Windows, Linux, and macOS builds plus artifact upload when a v* tag
is pushed; keep PR and master pushes on test-linux only.

Co-authored-by: Cursor <cursoragent@cursor.com>
Split settings from input device catalog
Introduces a live peak/RMS dock widget, moves calibration onto Long-time levels, and darkens the default UI palette for low-light use.

Co-authored-by: Cursor <cursoragent@cursor.com>
dB levels dock, calibration, and 0.56 release
App-wide offset and unit flow through sidebar meters, dB levels dock, long-term levels, and frequency widgets; calibration anchors RMS to a reference while peak stays ~3 dB higher on sine tones.

Co-authored-by: Cursor <cursoragent@cursor.com>
Use a three-column grid with per-channel sizing so dual readouts fit without clipping.

Co-authored-by: Cursor <cursoragent@cursor.com>
@Skeyelab

Copy link
Copy Markdown
Author

Released as v0.57 on ericdahl-dev/friture. Unable to merge here (no maintainer permissions on tlecomte/friture).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant