On Thu, September 30, 2010 3:47 am, Robin Gareus wrote: > On 09/30/10 09:40, Patrick Shirkey wrote: >> >> On Thu, September 30, 2010 12:01 am, Louigi Verona wrote: >>> Hey guys! >>> >>> I have two questions. >>> >>> 1. How does Sound Stretch work? It is incredible the way it can produce >>> a >>> tone which has no noticeable vibrations, just a wall of sound. How is >>> that >>> accomplished, in layman terms if possible :) >> >> It grabs a section of the audio and copies/multiplies it then appears to >> apply some pretty neat math to smooth it all out funnily enough using a >> selection of windows to get the best result. > > Are you sure? Where did you get that info from? > > Just skimming over Stretch.cpp gives me the impression that it's based > on Fourier analysis and re-sythesis. > http://en.wikipedia.org/wiki/Fourier_analysis > > The process() loop looks like: > { > apply_window(); > smp2freq(); // Fourier Analysis > process_spectrum(); > freq2smp(); // Fourier Synth > } > > In layman terms: > > There's a smart French guy by the name of Joseph F. sitting inside it: > If you play him some audio: He thinks: "Hey, this is actually just a few > simple sine-waves added together (superpositioned)", he quickly > calculates their frequencies and amplitudes and asks "Now, you want to > change the duration?" easy: "I'll generate some new sine-waves with > these frequencies and amplitudes, how long did you say you want?" > > (The smart thing about this French guy is that he actually speaks fluent > English - Sorry I could not resist :)
I suppose you missed the various windows he has added. Maybe they are just there for show? > >> >>> 2. Can this program be jackified and is that a lot of work? >>> >> >> It uses portaudio. Doesn't that have a jack output? > > Yes, but its implementation is not very well done. > >> Otherwise yes, he has designed it so that adding jack support would be >> fairly trivial. >> > > Indeed, to change the integrated player to output to JACK would be > trivial. It currently uses the PortAudio's StreamCallback which is very > similar to JACK's process callback. > > Using it to do "live" timestreching with JACK (jack-in -> jack-out) is > AFAICT impossible because: > > <details> > If you feed it N samples (or seconds) of audio you end up with M samples > (or seconds) with M > N. > > One could do a kludge: > eg. for a 1:10 time stretch with continuous output: > - read 1 sec of audio from the input > - ignore 9 secs of the input > but I don't think this will be useful. > </details> > But nothing wrong with having it jackified for ease of use. Especially if the portaudio code is as you suggest. No doubt someone will take the time if it is a good piece of software otherwise. -- Patrick Shirkey Boost Hardware Ltd. _______________________________________________ Linux-audio-dev mailing list [email protected] http://lists.linuxaudio.org/listinfo/linux-audio-dev
