Sinusoidal re-synthesis – manipulating lists question
I’ve been working on some sinusoidal re-synthesis of a live signal for a while now – mostly I do this using Puckette’s sigmund~ to output 50 peaks, and re-synthesise them using CNMAT’s sinusoids~ object. I have this working quite well for the moment, and am able to dynamically vary the amplitude profile of my captured models using zl scramble and also by sending the model through sweeping format filters using resonators~ (also from CNMAT). Here’s are a couple of demos of the patch using saxophone input: here – with screenshot and here – with more detailed description
I like the list-interpolate object from CNMAT as it allows me to interpolate smoothly between the original timbre and the scrambled version without having to split the list up. I would however like to be able to add an option to vary the individual frequencies in my captured list. What I’m after is the possibility of adding a frequency deviation range – that I can then use to interpolate to and from in a similar way to my amplitude scrambler – moving from harmonic to slightly inharmonic timbres. Adding a random range above or below the captured frequency would require me to do something other than just scramble the list – but I would like to find a solution that doesn’t require me to split the list and use 50 line objects!!
I have been looking into the ftm objects – so powerful – but I am still a novice with these right now so would love it if anyone had any advice on dealing with lists in this way?
Thanks in advance!!
Hey Ben, thats some very cool stuff you got going on.
As far as suggestions for how to improve your list processing.
You could always create a secondary list that contains some
range of random numbers and then use vexpr to add that to your
But if you really want to get crazy with your lists, I would
suggest converting the list into a jit.matrix (1 x 50 matrix).
From there you can do some pretty amazing things with jit.op
and jit.bfg. The cool thing is you can chain matrix operations
together and play with the order in which things are combined.
You could very easily scale sinusoidal values, then deform them,
add noise, then animate them.
Hi Anthony, thanks for the reply and for taking a look and having a listen to those links.
Yes I have been looking into the FTM&Co. externals as I think I will be needing to treat my lists in the form of a matrix – thanks for your advice on the jitter objects – I have never really gotten into jitter and now see that it might be useful for my purposes. In the short term however – your suggestion of vexpr looks like it could be a cheap and effective way of doing this – I can’t believe I’d totally forgotten about this object so thanks for the reminder!!
Have you used the FTM externals yourself by the way?
Update – thanks to your advice Anthony, for the time being vexpr works wonders for what I was after:
Example: vexpr $f1*(random($f2,$f3)/1000.) @scalarmode 1 – where $f1 is the input list and ($f2,$f3)/1000. is the variable input for random range around these frequencies – think it will work a charm..
Thanks once more.
Thanks mzed I’ll look into that also
Very interesting topic !
I’m doing similar things, except the sinusoids source comes from SDIF files. So i find myself with huge lists in (quite) the same form as in sigmund~ : index, frequency, amplitude.
So i tried different librairies to treat these lists, in order to alter / morph / slightly change them.
- FTM is tough for me ! Succeeded in a few things by plundering here and there only, so i can’t help at all.
- Emmanuel Jourdan’s ejies is very helpful : ej.lchange, ej.linterp … and the ej.ldrunk !!! (check also the ‘zsa.decriptors’)
- as a friend suggested, started to use jitter matrix at last (i wasn’t using it until now). So many new prospects :)
But then i’m kind of stuck here, because all this is new to me. Especially, i’m using the jit.slide object but, as the frequency list i have is ordered by biggest amplitude to lowest, sliding between different values makes frequency sweeps.
What i’d like to achieve would rather be : when new list, make the frequencies disappear in n time, and make the new ones appear in n time.
Spent much time using the coll object, and don’t know yet how to treat parts of the values in jitter …
I have not used FTM much. To me it seems overly complicated. I don’t
have time to learn it.
If you are interested in learning more about how to utilize jitter
matrices for list processing, check out the tutorial 11jListsAndMatrcies.
I’ll see if I can’t come up with an example too.
Thanks for the tips Anthony – and yes the FTM are really complex – I know at some point soon I’ll begin to dig into them as they are really useful. The spectral tutorials from CNMAT are good too – especially for manipulating SDIF models… although I’m more interested in analysing the models in real-time the manipulating them – haven’t found a way to dynamically write an SDIF file yet, though I think it’s possible in FTM – having said that I’m not even sure if writing an SDIF file on the fly would be more useful than treating these lists as matrices directly???
I don’t think you’re going to get much out of writing an SDIF file, unless you want to save it and use it later. I don’t know of any tools for real-time manipulation of SDIF.
Iana~ (*) makes a good front end for realtime analysis-resynthesis.
Hi Mike – yes that’s what I thought. Iana~ does look good – unfortunately I am not a member of the IRCAM forum yet – it is quite expensive – though am looking into this for the new year. I use sigmund~ for extracting 50 peaks – is there much difference between these two objects? I imagine that Iana~ takes periodicity into account as per the yin~ algorithm?
I haven’t got anything to add technically, I just wanted to say how much I enjoyed the various audio samples on your site. They’re reminiscent of Evan Parker’s/AMM’s electro-acoustic improvisations. Very interesting, progressive work, and beautiful at times. Keep it up.
Cheers thanks for the comments… :)