@audio/shift-sms
v1.0.2
Published
Spectral Modeling Synthesis (Serra/Smith) sinusoidal+residual pitch shift
Downloads
521
Readme
@audio/shift-sms

Spectral Modeling Synthesis (Serra/Smith) sinusoidal+residual pitch shift
npm install @audio/shift-smsimport sms from '@audio/shift-sms'Spectral Modeling Synthesis. Parabolic-interpolated peak picking builds sinusoidal tracks (freq, mag, phase); each peak's lobe is copied intact to round(f·ratio). Stochastic residual shifts to ratio-scaled bins with analysis phase.
sms(audio, { ratio: 2 })
sms(audio, { ratio: 1.5, maxTracks: 40 })| Param | Default | |
|---|---|---|
| maxTracks | Infinity | Max simultaneous sinusoidal tracks |
| minMag | 1e-4 | Peak detection threshold (linear) |
Preserves formant envelope (lobes scale freely with peaks), harmonic structure, tonal clarity.
Destroys transients, noise-like textures (absorbed into residual), polyphony beyond maxTracks.
| f0 err | THD% | alias | attack corr | formant dist | phase coh | shift | |-------:|-----:|------:|------------:|-------------:|----------:|------:| | 0.00 | 0.0 | 0.002 | 0.963 | 1.845 | 0.929 | 1.701 |
Lower attack corr (0.963) because sinusoidal modeling smooths onset transients into the residual.
Use when: Sustained tonal / harmonic instruments, vowels. Not for: Percussion, noise-heavy material.
Stream
let write = sms({ ratio: 1.5 })
let out = write(inputBlock)
let tail = write() // flushsms streams per-frame: each write(chunk) call renormalizes and emits audio as soon as a frame completes, and re-chunking the same input differently reproduces the batch output byte for byte.
Data
Input is a Float32Array (mono) or an array of Float32Array channels ([left, right, ...]) — anything else throws TypeError. ratio also accepts a function t => ratio (seconds from stream start) or a Float32Array breakpoint envelope (resampled across the input via ratioDuration, default the input's own duration) for time-varying pitch.
Part of @audio/shift — the shift family umbrella. This README is generated from the umbrella docs.
MIT © audiojs
