faust_min 0.5.7
faust_min: ^0.5.7 copied to clipboard
High-fidelity physical modeling music synthesis engine powered by Faust, featuring 50+ dynamic instruments, polyphonic support, and an advanced UML multi-notation sequencer.
0.5.7 #
- Bass gain recalibrated to 0.3: Re-ran fix_instrument_gain.py with --target 0.3 (drone/comping level instead of melody 0.5). Max gain 0.52 folded into DSP. Verified: 82Hz=0.329, 196Hz=0.298, 392Hz=0.329.
0.5.6 #
- Debug-log spam fix:
DEBUG_INSTRUMENTis no longer compiled in by CMake — it's now a#defineinFaustInstrument.cpp(default 0). The per-note[LUT]/[NOTEON]printf spam (100k+ lines per song) is gone from all release builds. Also fixed the corresponding pre-release check inpublish.md. - Snare pitch + gain calibration: Removed the stale
freq_nudge(±15% detune) fromsnare_calibration.csv— the snare's shell tone is a pureos.osc, so it needed no pitch correction. The nudge was also shifting LUT gain lookups off the CSV grid, which madef=100impossible to calibrate. Snare gain re-calibrated to the 0.5 target withmax_gainfolded into the DSP. - Bass / Cowbell gain calibration: Completed steps 5–7 of the gain-fix procedure (normalize CSV, fold
max_gaininto DSP, revert slider to 0–1). Bass calibrated to 0.5, cowbell to 0.3.
0.5.5 #
- Song-switch crash fix (Android/iOS): Sequences now use
std::shared_ptrlifetime shared between Dart and the audio thread, with an FFI-sideUMLSequence*registry holding the Dart-owned reference. Switching songs no longerdeletes a sequence while the audio thread is still rendering it (no morepthread_mutex_lock: abort/ destroyed-mutex crashes). - Singleton orchestrator API:
FaustEngine.getOrchestrator()andFaustEngine.getMixer()now expose the sequence orchestrator / mixer as true singletons. - Deprecated legacy endpoints:
SequenceOrchestrator()constructor anddispose(), and nativeorchestrator_create/orchestrator_destroy, are deprecated (still functional) — will be removed in a future build. PreferFaustEngine.getOrchestrator()/orchestrator_get_instance()andclearSequences(). - New native APIs:
orchestrator_get_instance(),orchestrator_clear_sequence(),orchestrator_clear_sequences(). - Memory leak fix:
loadSong()no longer leaks the sequence allocation.
0.5.4 #
- UML parser regex crash fix: The tokenizer regex used
\~,\_,\>escapes that LLVM libc++ (std::regex) rejects — this crashed any UML sequence parse (song load, inlineaddSequence, etc.) on Android and iOS. Escapes removed; parsing behavior unchanged.
0.5.3 #
- FaustEngine.init() Skip-Logic: Now skips re-extracting DSP assets when the target file's size and mtime already match the bundled source asset (byte-identical fallback), making init near-instant on repeat launches.
- Init in Examples & Tests:
FaustEngine.init()added to example apps and Flutter tests, and documented in READMEs. - Native Track Muting:
muteTrack/unmuteTrack/isTrackMutedmixer APIs. - ChurchBell Fix: Reduced hum subharmonic gain (modeGains(0) 1.0→0.4) so the prime/fundamental dominates pitch; fixed header capitalization so the generated DSP is
FaustChurchbellDSP.hpp(case-sensitive iOS build).
0.5.2 #
- Frequency Calibration for All Instruments: Per-instrument pitch calibration tables (bansuri, sitar, sarod, tanpura) with cents-model correction and
pitchcorrect.pyautomation for pitch drift. - Volume Calibration for All Instruments: Gain calibration to target levels across instruments, including bansuri gain calibration to 0.5 target and piano/sitar DSP gain tuning.
- Instrument Fixes: Fixed pitch drift (violin, flute), improved bansuri breath attack, tanpura DSP updates, snare hiss parameter, and general DSP physical-model refinements across all instruments.
0.5.1 #
- Packaging fix: Include vendored
deps/oboein published package for Android builds.
0.5.0 #
- 50+ Calibrated Instruments: All instruments tuned and calibrated across multiple frequencies with measured energy (RMS, peak, Goertzel) per-instrument measurement windows.
- Kick Drum Gain Recalibrated: 37.5→15 multiplier, E=0.32 P=0.84 target.
- Tibetan Percussion Balance: Chougong, LagNga, Ngachen gain tuning for balanced energy levels.
- InstrumentMapper Measurement Tables: Per-instrument
getMeasureStart()/getMeasureDuration()for accurate energy measurement windows. - Goertzel Energy in test_instruments:
--rendermode now reports Goertzel energy at fundamental frequency. - UML Sequencer & Mixer Updates: Envelope support for track volume control.
- cmake OBJECT_DEPENDS Fix:
FaustInstrument.cppdepends on all generated hpp headers for correct rebuild propagation. - computeRMS Stereo Fix: Corrected stereo energy division (numFrames*2).
0.4.0 #
- Ghatam Instrument (ID 50): Clay pot percussion with rich midrange resonance.
- Mridangam Instrument (ID 49): South Indian double-headed drum physical model.
- Dayan DSP Redesign: Dual-bank composite membrane model — Syahi (perfect harmonic 1×–5×) + Maidan (Bessel inharmonic 1.000, 1.593, 2.135, 2.295, 2.653), with per-stroke mix ratios.
- Violin Physical Model: Safety clamps removed for clean gate-off, gain multiplier 1.1, strike=2 bowVelocity 0.15 for ≥392 Hz.
- FAUST_DISABLE_INTERPRETER: New build macro; iOS (only) cannot use interpreter mode. Android guarded similarly. All other platforms support both StaticCompiled and InterpretedByte.
- Vendored FAUST Headers: Architecture headers copied to
src/faust_arch/for portable builds without FAUST SDK. - iOS/macOS Forwarders: Renamed from
.cto.mmfor Objective-C++ compilation; includes path fixed. - CMake Portability:
libfaustlinked viafind_libraryinstead of hardcoded path; system libfaust found automatically; test binaries use vendored headers. - Podspec Metadata: Proper homepage, author, description; iOS definines
FAUST_DISABLE_INTERPRETER. - Case-Sensitive HPP Fix: Removed duplicate
FaustChurchbellDSP.hpp/FaustMaster_reverbDSP.hppconflicting withFaustChurchBellDSP.hpp/FaustMasterReverbDSP.hpp. - analysis_options.yaml: Added to root for pub.dev compliance.
0.3.1 #
- Tibetan Bowl Instrument: Added
tibetanbowlphysical model (ID 47), assigned to idiophone → melody track. - Dual LagNga Rhythm: Interleaved 111 Hz and 222 Hz LagNga oscillators at BPM=60 for ~1 hit/second.
- UML Cell Count Fix: Standalone
~/^operators now create ContinuityDot tokens at current gridIndex, fixing inter-instrument desync. - Instrument Classification: Added
isMembraneophone()/isIdiophone()for track routing instead of flat percussion flag. - Mixer Weight Fix:
setInstrumentWeight()now properly updatesTrackInstrument::instrumentWeightin mixer track registry. - Amplitude Glide Rename:
velocityGlide→amplitudeGlide(correct naming for amplitude parameter). - Base Frequency API: Exposed
sequence_get_basefreq/sequence_set_basefreqin Dart FFI. - Dead Code Removal: Removed unused
mAssignedWeightfrom FaustInstrument. - Dartdoc Coverage: Added documentation comments to all public constructors, methods, and getters.
0.3.0 #
- Bansuri Breath Attack: Added post-waveguide pink noise burst with rising-edge detection and 80ms decaying envelope for realistic breath attacks at note start.
- Bansuri Glide Fix: Resolved pitch glitches during meend transitions using K=3 Inverse Distance Weighting (IDW) LUT blending and DSP
glideparameter synchronization. - Chak Click Fix: Implemented early noteOff (30ms lookahead) in UMLParser to prevent residual waveguide energy from causing pop artifacts on fast note transitions.
- Memory Leak Fixes: All test files now properly deallocate heap-allocated
UMLSequenceandFaustInstrumentobjects. Verified clean across all test suites with ASan. - DSP Stability: Added
si.smoosmoothing to bansuri gain parameter to prevent zipper noise during parameter updates. - Native Sequencer: Sample-accurate native C++ engine for layered audio patterns — refined timing and reduced drift.
- Improved Strike Realism: Enhanced noise-burst contact simulation for percussive instruments (Bell, Bowl, Dayan, Bayan).
0.2.0 #
- Added FaustBell: High-fidelity physical modeling synthesis of a tuned meditative bell.
- Added FaustBowl: High-fidelity Tibetan Singing Bowl with strike and sustain (rubbing) physics.
- Added Native Audio Sequencer: Sample-accurate native C++ engine for layered audio patterns.
- Implemented Duration-based decay: Precisely control ring length in seconds for Bell and Bowl.
- Improved Strike Realism: Added noise-burst contact simulation for percussive instruments.
- Expanded native bindings to include all percussion and melodic instruments (Dayan, Bayan, Kick, Snare, HiHat, Tom, Ride, Sitar).
0.1.0 #
- Initial release.
- High-fidelity Faust Flute physical model.
- Raw PCM data rendering interface via FFI.
- Support for Android, iOS, Linux, MacOS, and Windows.
- MIT License.