pvx Phasiness Implementation Plan
May 25, 2026 ยท View on GitHub

pvx Phasiness Implementation Plan
Why this paper matters
About this Phasiness Business isolates why classic phase-vocoder output sounds
"phasier" under stretch: weak cross-bin phase coherence, unstable peak-region
phase behavior, and frame-to-frame phase inconsistency in dense harmonic
material.
For pvx, this gives a quality-first roadmap:
- strengthen local phase locking around spectral peaks
- preserve vertical coherence (within a frame) and horizontal coherence (across frames)
- reduce phase random walk in low-energy bins
- make coherence strategy content-aware (speech/tonal/percussive)
Benefits we can extract for pvx
- Better harmonic solidity at moderate and high stretch ratios.
- Lower "swirl/smear" in sustained vocals and pads.
- More stable stereo image when coherence is enforced consistently across channels.
- Cleaner transient neighborhoods when hybrid transient handling and phase resets are coordinated.
- Stronger objective benchmark results on modulation- and coherence-sensitive metrics.
Phased implementation
Phase 1: Coherence-aware phase propagation in core
Files:
src/pvx/core/voc.pysrc/pvx/core/stereo.py
Work:
- Add explicit "peak-region phase-locking radius" control.
- Lock neighboring bins to anchor-bin phase increments near detected peaks.
- Add low-energy-bin damping to avoid unstable phase diffusion.
- Keep deterministic branch for central processing unit (CPU) mode.
CLI additions:
--phase-lock-radius <bins>--phase-lock-strength <0..1>--phase-noise-floor-db <dB>
Phase 2: Adaptive coherence policy
Files:
src/pvx/core/presets.pysrc/pvx/core/transients.pysrc/pvx/core/voc.py
Work:
- Auto-select coherence mode by frame class:
- tonal frames: stronger identity/peak lock
- noisy/percussive frames: relaxed lock + transient protection
- Fuse with transient-mode handling (
reset,hybrid,wsola).
CLI additions:
--phase-policy {static,adaptive}--phase-tonal-lock <0..1>--phase-noise-lock <0..1>
Phase 3: Stereo/multichannel coherence extension
Files:
src/pvx/core/stereo.pysrc/pvx/metrics/coherence.py
Work:
- Apply lock decisions in mid/side (M/S) domain for stereo-preserving stretch.
- Improve reference-channel lock to retain inter-channel phase deltas near peaks.
- Add diagnostics for per-band coherence drift.
CLI additions:
--coherence-report-json <path>
Phase 4: Benchmark and regression gates
Files:
benchmarks/metrics.pybenchmarks/run_bench.py.github/workflows/bench-regression.yml
Work:
- Add phasiness-focused metrics:
- inter-frame phase-deviation variance
- peak-region phase-consistency score
- modulation-spectrum stability score
- Add strict pass/fail thresholds for tonal and speech subsets.
Phase 5: UX and docs
Files:
Work:
- Add "phasiness reduction" intent preset.
- Add examples:
- vocal stretch quality profile
- ambient pad high-ratio profile
- stereo-coherent mix-bus profile
- Add troubleshooting matrix: artifact -> parameter moves.
Validation targets
- Lower modulation-spectrum distance on sustained harmonic tests.
- Lower stereo coherence drift on stereo test corpus.
- Audible A/B improvement on speech and vocal sustained vowels.
- No regression in
stretch=1.0identity reconstruction tolerance.
Source paper and cited references to track
- J. Laroche; M. Dolson (1997), About this Phasiness Business.
- M. Dolson (1986), The phase vocoder: A tutorial.
- D. W. Griffin; J. S. Lim (1984), Signal estimation from modified short-time Fourier transform.
- J. Laroche; M. Dolson (1997), Phase-vocoder: About this phasiness business (submitted manuscript citation in paper).
- E. Moulines; J. Laroche (1995), Non-parametric techniques for pitch-scale and time-scale modification of speech.
- M. S. Puckette (1995), Phase-locked vocoder.