An implementation of the sines+noise model first described by Xavier Serra in his 1989 PhD thesis; an input sound is analysed in terms of sinusoidal components by a peak tracking phase vocoder. The error between the sinusoidal reconstruction and the original signal (the residual) is then modeled by a noise model of filtered white noise. The sines part and the noise part are separately resynthesised, allowing independent transformations.
For technical details see:
Xavier Serra and Julius O. Smith (1990) "Spectral Modeling Synthesis: A Sound Analysis/Synthesis System Based on a Deterministic plus Stochastic Decomposition". Computer Music Journal 14(4): 12--24
input |
Audio rate input to be analysed |
maxpeaks |
Absolute maximum number of allowed peaks to be detected in the spectrum |
currentpeaks |
Current number of allowed peaks to be detected in the spectrum |
tolerance |
Search area for matching peaks; within tolerance spectral bins |
noisefloor |
Minimum magnitude for a candidate peak (measured as spectral magnitude) |
freqmult |
Resynthesis parameter to change frequency; currently causes a gross multiplication of frequency of all sinusoidal components |
freqadd |
Resynthesis parameter to change frequency; currently causes a gross addition of a frequency to all sinusoidal components |
formantpreserve |
Even if changing the frequencies of sinusoidal partial tracks, re-impose the original magnitude spectrum so as to keep the formants (spectral envelope preservation). 0 is off, otherwise on (there is a small performance hit). |
useifft |
Use IFFT based resynthesis, which is lower quality, but substantially more efficient |
ampmult |
amplitude multiplier for internal compensation for window power loss within algorithm. Usually leave as default of 1.0. |
graphicsbufnum |
Will fill a user provided buffer with sines + noise data; the buffer must be size 1 + 513 + 5*(maxsines). The first entry will be the number of sines active for that polled frame. Default for this argument is -1, meaning do not write any status data. See the example with live plotting at the base of this help file. |