feat(douanier): /loudness, /spectrum (FFT-as-a-service), /naming (#41)
Three more torch-free, cached building blocks → 11 engines total. - POST /loudness → BS.1770 integrated LUFS (pyloudnorm) + sample/true-peak (4× oversample) + crest + the gain to hit each delivery target (-14 streaming, -9 club, reference_postprod_master). The mastering numbers PLN + hexa gate on. engines/loudness.py; pyloudnorm added to requirements-deploy (pure-python, tiny). - POST /spectrum → FFT-AS-A-SERVICE (PLN's ask): a downsampled, render-ready spectrogram bands×frames, 0..1 normalized; mel (perceptual, for visuals) or log-linear; frames=1 collapses to a single averaged FFT spectrum. Bounded payload so it caches cheaply. signal.spectrum(). - POST /naming → convention-compliant sample name (NN_role_character) from the MEASURED role + character, never the file name. naming.py vendored from the Foundry (drift-guarded); character_of() derives the adjective from features. Validated in the torch-free container (LUFS -19.1 w/ gain +5.1/+10.1; mel band centers; "07_melodic_warm" lint-clean). 58/58 tests (test_extra.py: engines + endpoints + naming drift guard + character_of). Image now serves emotion/features/ samples/grade/onsets/waveform/analyze/loudness/spectrum/naming + separate-503.
Showing
armada/api/engines/loudness.py
0 → 100644
armada/api/engines/naming.py
0 → 100644
armada/api/tests/test_extra.py
0 → 100644
Please
register
or
sign in
to comment