Skip to content

v0.4.0

Latest

Choose a tag to compare

@PhotonicVelocity PhotonicVelocity released this 03 Sep 01:43

Highlights

  • tracks.analyze() starts Lexicon's audio analyzer on explicit track IDs through the Local API's control endpoint
  • API spec updated to Lexicon 1.11.13, with the control-endpoint findings recorded in docs/api-issues.md
  • Integration harness hardened: waits for the Lexicon process to exit, moves the SQLite sidecars with the database, and fails loudly on a bad launch; its lifecycle unit tests now run in CI

Breaking change

  • Lexicon() probes the API on construction and raises LexiconConnectionError when Lexicon is not running. Pass verify_connection=False to build a client without a running Lexicon.

New Features

  • tracks.analyze(track_ids, *, analyze_key, analyze_beatgrid, analyze_waveform, analyze_energy, do_not_overwrite, tempo_range); options left as None use Lexicon's own settings. TempoRange and TEMPO_RANGES (the eight tempo-range presets) are exported from the package root.
  • tracks.update_tempogrid(track_id, tempomarkers) replaces the beatgrid while keeping each cuepoint on the same beat
  • color_rgb(name) returns the RGB tuple for a Lexicon color name
  • TempoMarkerUpdate and CuePointUpdate re-exported from the package root
  • tracks.search() no longer requires a sort

Notes on tracks.analyze()

  • Tested against Lexicon 1.11.13. It sends the internal action id AudioAnalyzer_Analyze because that release rejects the documented TrackBrowser_AnalyzeStart.
  • Analysis runs in the background and the API has no completion signal; poll tracks.get().
  • tempo_range is written to Lexicon's stored analysis setting and persists after the call. It must be one of the analyze dialog's presets.

Internal

  • Lifecycle helpers moved to tests/integration/lifecycle.py with 21 unit tests that run on Linux CI
  • Local lint guards: pre-commit hook and editor hook running ruff

Full Changelog: v0.3.0...v0.4.0