Paul Nasca is the creator of superstar timestretch tool, PaulStretch, which stretches audio up to a billion times its original length.
The Internet was abuzz last week with a PaulStretch version of pop puppet Justin Bieber’s song, ‘U Smile’. Musician Nick Pittsinger cheekily stretched the original 3:21 song into a 35 minute ambient monster, which has now had 1.8 million plays in just one week, and so casting PaulStretch and Paul Nasca into the limelight. On Monday we posted our own 38 minute PaulStretch version of ‘Microscopic’, originally a 9 minute track.
We spoke to Paul, who lives in Romania, about the rapid rise to fame of his free open-source PaulStretch tool, why he wrote it, how it performs its magic and he also shares a few tips for any musicians using it.
MAT JARVIS: How long have you been programming, what makes you create audio software and do you have any other software available?
PAUL NASCA: I am in programming since 1992 but I do audio software since 1996. My first software was a non-realtime software synthesizer “Paul’s Sound Designer” a DOS program which lets you synthesize sounds by adding many waveforms.
Since 2002 I am working on open-source realtime software: ZynAddSubFX which has many sound synthesis methods and effects (including a new sound synthesis algorithm designed by me: PADsynth ). ZynAddSubFX is included in many Linux distributions (or at least in default repositories) and (I believe) it is much more used than PaulStretch.
Also, I wrote some minor audio software (like Hypermmamut, unfinished software which converts audio to images and vice-versa) and I contributed to other open source projects (e.g: I wrote a few effects for Audacity).
Another open source project written by me, but unrelated to audio, is some software which enhances pictures: zynaddsubfx.sourceforge.net/other/tonemapping, and here are some videos processed with it: vimeo.com/user1194931/videos.
Regarding on what makes me create audio software is that I like to make beautiful sounds and I try to experiment a lot with audio. Some audio software (or part of them) was created because different reasons (more personal ;-) (MJ: intriguing! ) .
MAT: Do you make these audio tools to help with your own music making or for others?
PAUL: It depends: Paulstretchwas made for myself, but after hearing the results I decided to share it. On the other hand, ZynAddSubFX and the PADsynth algorithm was made with sharing in mind.
MJ: What was the original inspiration, why did you decide to create such an extreme timestretch program?
PN: A few years ago I heard about 9 beet stretch (MJ: A 24 hour streaming version of Beethoven’s 9th) and I thought that it would be nice if I made myself some stretches. I searched for a program to do it or at least for an algorithm. I couldn’t find anything useful, so I decided to think how I could make it by myself. After a few days I had the idea of Paulstretch and after another few weeks I made an improved version of this new algorithm.
MJ: The long stretches are remarkably smooth, how does it perform its magic?
PN: Before describing how it makes the sound smooth, I want to tell you about how do I model the sound. I described it here: zynaddsubfx.sourceforge.net/doc_0 in this discussion is important the first two points (MJ: a very interesting piece on the theories of producing quasiperiodic waveforms, as opposed to static periodic ones, to create sounds with life and variety, like real analog synthesizers as opposed to the static waveforms on most plugin synthesizers. A must read).
So basically I model the musical sound as a collection of “harmonics” and each “harmonic” is composed from many close frequencies with random phases (like you do a bandpass filter of a noise to get one “harmonic”). This idea models very closely the sound of ensembles (like large choirs, orchestras, etc) (MJ: Zynaddsubfx does create some remarkable choirs).
Paulstretch works in this way (for each step): take a buffer from the position x of the input audio, do the FFT of the windowed buffer, randomize the phases, do the IFFT and overlap-add to the output audio. The output audio amplitude is corrected by a small amount of tremollo (to avoid changing the overall amplitude caused by the overlapping). The value of x is incremented to a value which depends on the stretch amount (for very large steps the x position is incremented with a very small step and for huge stretches is incremented only once a while – which depends on the stretch amount). You can see an example where the input position of the buffers are shown in the image above.
The most important thing in each step is randomization of the phases (which is described in the point 2 of above, of how I model the sound). This makes the sound smooth and non-repetitive.
MJ: So is PaulStretch breaking the audio down into its component frequencies, modulating/ randomising their phases and reconstructing it back together again?
PN: Yes, the trick is to randomise the phases and to change slightly the position of the input buffer.
MJ: Interesting. So is that similar to how digital reverb works, with modulated and randomised impulses?
PN: Not exactly, I simply replace the original phases with random phases (more exactly, I discard the phase information for each buffer and I add random phases). You can see in the code at: Stretch.cpp in function FFT::freq2smp, where I make the phases random.
MJ: Do you have any tips for musicians?
PN: Yes I do:
1 Use very large window sizes (few seconds) and small amount of stretching to get the “essence” of the music (which keeps only the overall chords).
2 Play with the “Bandwidth/Spread” (from Process tab)
3 With the Arbitrary filter, remove a bit from the high pitched sounds
4 Right click on the Play button to hear the original sound
5 For the best results use PaulStretch for sounds which contains choirs/ensembles
MJ: It’s been out for a while, over four years now, so were you surprised when it suddenly became so talked about on the Internet? Have the number of downloads suddenly rocketed?
PN: Yes, I found last week that I received many emails and I didn’t know why. I did a search and I found the reason. Yes, the number of downloads skyrocketed.
This is the graph showing the downloads spike on the day the Bieber version was posted. Before the spike it was happily being downloaded at a respectable 20 copies a day, then overnight jumped up to 10000 a day at the peak, and has now settled to around 1000 downloads a day. This is just the Windows and Linux version, with the Mac version on another site I’m sure having a large spike too.
This really goes to show how much exposure counts in software as much as music. It was the same software that has been freely available for the past four years, the only thing that has changed is that people are now aware of it. Well deserved exposure too.
MJ: Do you have any future plans for new features or refinements?
PN: Yes, I hope that in the next days (or weeks) to release a new version. This new version will have some bugs fixed, parameter loading/saving and an experimental stretch mode which tries to preserve better the attacks (to stretch less on attacks).
MJ: Many thanks Paul, so what is next and what are you currently working on?
PN: In this period I am doing the master studies (in IT). Also, I am doing some small experiments regarding the audio software, I work a bit on ZynAddSubFX and PaulStretch (depends a lot of how much free time I have).
Many thanks to Paul for taking the time to answer our questions in the middle of his studies and creating remarkable software.