![]() |
![]() ![]() ![]() ![]() ![]()
|
This topic is 2 pages long: 1 2 |
next newest topic | next oldest topic |
Author | Topic: Smooth Spectral Signal w/ Delay | |
gustl Member |
![]() ![]() ![]() Hi there, After watching "The Piece of Wire between" by Pete (KISS2011) I immediately wanted to try the part where he smoothes the spectral signal with a delay. I did an Analysis for 256 partials and used a delay with 256 samp delay time but all I get is low end crap.. I tried different delay times (allthough it makes no sense?) with the same result.. Any advice? Or is it possible to send me your files, Pete? Thanks, IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Gustl First it is important to split the left and right spectral signals apart and delay each leg separately before channel joining them together. Also make sure that all interpolation is turned off in the delay lines and that it is set to type comb, and make sure the delay scale is set to 1 so that the 256 samp is kept true. Then it is important that the delay acts as a smoother only and doesn't change the amplitude or the offset of the signals. To do this the relationship between the feedback value and the input scale is important, such that the total gain is unity. So in the feedback field put !Smooth and in the scale field put 1-!Smooth. !Smooth should be between zero and one and it won't start to smooth until you get very close to 1 i.e. approx 0.999. Value 1 is completely no change at all and is hold or freeze. If you start in a frozen state you will never get any sound as nothing will get through. If you want to request all the files and Power point related to the talk follow the details on this link but change the request to "KISS 2011" to avoid confusion. Please let me know how you get on. Pete IP: Logged | |
gustl Member |
![]() ![]() ![]() Thank you so much for your quick, nice and detailed answer (as always ![]() I'll let you know about further experiments! IP: Logged | |
SSC Administrator |
![]() ![]() ![]() Suspect I am not alone in looking forward to the sequel to The Wire Between ![]() IP: Logged | |
gustl Member |
![]() ![]() ![]() "Wire you not doing spectral processing?" Lovely [This message has been edited by gustl (edited 03 February 2014).] IP: Logged | |
ChristianSchloesser Member |
![]() ![]() ![]() I would love to see a second part! It was very inspiring and made me think in a different way about spectral processing in general. It made me love the Kyma system even more then i did before. Cristian V. and i experimented with some other smoothing and "bending" techniques which involved other modules and capytalk expressions "between" the wires;-) There are endless possibilities you can do once you split up the signal into its tracks. Here comes a direct question: All the best IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Chris The 2013 talk "Tone Tone Semitone" was intended as a sort of a Wire 2 as it went into deeper techniques of playing with the wire, although it is not easy to simply do a follow up, as the people you are talking to may not have seen the first talk and it would make no sense at all on it's own. I'm not sure I understand your DSP saving idea. Are you asking if you could have a quantity of analysis data streams (The Wire) and merge them in some way before feeding it into a single oscillator bank so that that one bank outputs a polyphonic sound, sounding the same as if you had merged the signals from a quantity of oscillator banks? If this is what you are asking I don't think there is a way of doing this, although there might be a way if you were using FFTs. But I'm not so sure about this either. Is this what you meant? Thanks Pete IP: Logged | |
gustl Member |
![]() ![]() ![]() Maybe it's not possible to sum spectral data but what about getting access to the single partials? My idea was to chop the spectral "frame" into its samples to rejoin them later. Sadly it seems the chopper module is too slow. Now I'm thinking about a 256 samples (or whatever partials there are) waveform with a 1 at sample 1 and 0s for the other 255. Playing that at Samplerate and multiplying it with the spectral signal should get you the first partial. If you delay the waveform for e.g. 1 sample you get the next partial and so on. More instances of this could give you access to the different partials in the wire and lets you rejoin them later with a simple mixer. At least if you use no time related stuff on it because everything has to stay in sync to work. Is there probably an easier way to do this? Would it even work? Do I even need this? I have the feeling that I'm thinking too complicated.. I should go to sleep and try it tommorow ![]() IP: Logged | |
ChristianSchloesser Member |
![]() ![]() ![]() quote: The easies way to select a single "Track" or Partial from a spectrum is the SpectrumTrackSelector. Best IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Gustl You're thinking on the right lines. What you need is a sample and hold (at sample rate) to fill in the gaps between each frame. Guess what, the sample and hold module has a hold time which can equate to the frame rate. It has a built in pulse generator which you can line up with frame rate i.e.256 samp. But it also has an offset time 0 samp for the first partial 1 samp for the second etc. If you're feel lazy you can use the SpectrumTrackSelector module which does the same thing but works out the frame rate itself and also give access to the left or right or both values without having to split the L and R. Putting them back together is a bit more tricky but the pulse train will generate a pulse at 256 samp and the variable duty cycle (x/256) will make the downward change at different points in the frame. You can use a scale and offset module to turn it upside down i.e. 1 becomes 0 and 0 becomes 1 and a product module could act like an AND gate. So using two pulse trains with the same rate but different widths we can line up a pulse with any selected sample (or bunch of samples). Now you can make holes in a spectrum by using a product module and a tuned pulse and a mixer to fill in the holes with your processed partial gated (using similar techniques) into the correct time slot. This can get a bit hairy but once you've got your head around the logic it can be powerful. Hope this makes sense Pete IP: Logged | |
SeanFlannery Member |
![]() ![]() ![]() Mind blown ![]() IP: Logged | |
gustl Member |
![]() ![]() ![]()
Thanks, Pete! @Sean: I'll definitely do a tutorial on my blog about this - stay tuned [This message has been edited by gustl (edited 06 February 2014).] IP: Logged | |
gustl Member |
![]() ![]() ![]()
IP: Logged | |
ChristianSchloesser Member |
![]() ![]() ![]() Hi Pete, quote: I know this is a bit different approach but it makes it easily possible to extract many partials. Anyway.. Do you think it is possible to re-join theses "Tracks" back into one "wire" after "manipulating" them to use with a single OscillatorBank? From your previous post i guess it might work with a PulseTrain for every single partial to rebuild the stream.. (Which is of course not really more efficient then using single oscillators) I thought it might be possible to somehow "cycle" through the singletracks(Partials), pick a sample and rebuild the stream. But i did not found an clever method for that the last night... All the best from Berlin IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Gustl I can't open The Wire between but it may be that i haven't got the latest version of Kyma yet (I'm on 6.87f4), but I've opened SmoothingSelection and you've got it spot on. In this case there is no need to sample and hold, but if you wanted one partial to effect another or juggle them around or do processes like my and Andrea's Vowel detector that does logic decisions on comparative levels of selected partials, you would need the sample and holds. This is the same techneque used to transform the voice in my 2013 talk where selected bunches (in my case three bunches) were pulled out, formant shifted, level adjusted and reinserted. You can make a formant shifter by using a SpectrumFrequencyScale module but only putting it in the left leg (adding a one frame delay in the right leg to match). As the right leg is bypassed, the module doesn't change the pitch (just the formant). Hi Chris So to answer your question The only thing is that we are not separating out every partial, just the interesting ones. Other tricks you can do here is make use of the SynthecitSpectrumFromArray module to generate a repeating fixed frame of partials that can be used to manipulate the stream. For example mixing a frame that starts with nothing and goes up in level as the partials get higher added to the pitches will detune the harmonics. Or another trick is extract the fundamental pitch with sample and hold then through the rest of the pitches away. You then add or multiply the fundamental to a fixed harmonically perfect array and use that as the pitch stream. This can improve on a bad harmonic analysis. You can try amplifying the amp patials with a gain module so that they clip at +1 then attenuate them back down again so that on loud sounds the higher harmonics ring through more. Careful use of smoothed and un-smoothed with addition and subtraction can make extra sharp sounds where the values over shoot then recover when they change in pitch and/or amplitude. But I always keep to the rule that any added effect can be faded back to the original so that you can hear what's going on and wind it out where it's not needed. I hope this makes sense Pete [This message has been edited by pete (edited 06 February 2014).] IP: Logged | |
ChristianSchloesser Member |
![]() ![]() ![]() Hey Pete and Gustl. Thank you so much! I think i came up with an idea to combine both methods and will check on the weekend if my theory works. quote: You use pre- analysed spectra then right?.. or how do i know upfront which ones are "interesting" ;-) ? have a nice day [This message has been edited by ChristianSchloesser (edited 07 February 2014).] IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Chris You may note that the pulse wide is controlled by a hot parameter, so you can select the range of partials while playing. It doesn't have to be pre analyzed you can use a live analysis if you wish. Pete IP: Logged | |
gustl Member |
![]() ![]() ![]() Hi Pete, I don't know why you can't open it, but SmoothingSelection contains everything TheWireBetween is about so it doesn't matter. Thank you for the feedback concerning the one frame delay I will change that. Also I will check out your KISS13 talk again - allthough I was there I was using Kyma for one month back then and had some difficulties following you ![]() Seems that there's lots of experimentation possible here and due to your tips I know some points to start - thank you so much! Hi Chris, All the best, [This message has been edited by gustl (edited 07 February 2014).] IP: Logged | |
gustl Member |
![]() ![]() ![]() Just made a tutorial about this: http://www.kymaguy.com/the-wire-between/ Enjoy! IP: Logged | |
sacher Member |
![]() ![]() ![]() great! thank you! s IP: Logged | |
johannes Member |
![]() ![]() ![]() hey gustl, great stuff. i specially like your "smooth selection" patch.
right now all of the selected partials are averaged by the same amount, so the transitions between the selected and not-selected partials are quite obvious. anyway, i have no idea how to manage that with kyma. maybe by using a duplicator with the delayWithFeedback sound plus write a capytalk script, that creates the feedback values? greetings to vienna. IP: Logged | |
pete Member |
![]() ![]() ![]() Hi johannes The problem is that the controls that adjust the smoothing (feedback and level) work at capytalk rate i.e. get updated only once every 1ms, but you want adjacent partials to have different values and these are passing through at sample rate. So we need to think about it using a different approach. What if the frames instead of being switched between different paths with logic variable pulse width square waves, you instead crossfaded between them as you run through the partials. One path could be smoothed while another path could have no smoothing. Or we could have a few different smoothers at different rates and cross fade between them at different points along the spectrum. All the smoothers can be fed with the whole frame (i.e. the same L/R split signals from the spectrum in ram or live spectrum) but it's only the outputs of the of the smoothers that need to go through the VCAs or multipliers (same thing) before they get mixed back together to feed the osc bank. But bear in mind that if you take 90% of one path you need to take 10% of another etc. The switchers used square shaped control signals clipped to zero but this new type of sound would need trapezium shaped signals (also clipped to zero and one). The slope of the trapezium determines the cross fade width through the spectrum. To create these trapeziums we need to start with a master full ramp oscillator whose period is exactly 256 samp (or what ever frame rate you are using). This goes into a scale and offset module followed by a Gain module. The signals will naturally clip at -1 to +1 when we bump up the gain and the offest will determine where the centre of the crossover will be (i.e. which partial number). The gain will determine how many partials the cross fade will spread over. The higher the gain the less partials. You then need to go through another scale and offset module to squash the -1 to +1 signal up to a 0 to +1 signal. This gives you your basic fuzzy logic 0 to +1 transition. You now need a second similar string of modules (different values set higher up the spectrum) fed from the same full ramp oscillator, but with the last scale and offset set to form a matching +1 to 0 transition instead. By multiplying these two together you get your trapezium waveform which will feed one of the paths VCA, but at the same time you feed the trapezium through yet another scale and offset to invert it so that 0 to +1 becomes +1 to 0, to feed the other paths VCA. This is the basic idea but you can go on to make more fuzzy bands if you wish, but I'll leave you to work that one out. Sorry it couldn't be made simpler but you are now getting into deep spectral control and it can get a bit hairy I hope this makes sense Pete IP: Logged | |
gustl Member |
![]() ![]() ![]() excellent idea, johannes! excellent implementation, pete! With more fuzzy bands this can get indeed a bit hairy but I'll try to work it out today. ![]() IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Johannes I've just had another think about this and there is a way to go back to your original idea and make that work. The new method described above will cross fade between pre set smoothers but this is not quite the same as making each partial (in a range) have a different rate of smoothing as per your first idea. The problem was that the delay with feedback has feedback and level controls that don't work at sample rate, but if we make our own delay with feedback we could do it in such a way that we do have sample rate control. So what we do is have a fixed delay of scale 1 with no feedback and add our own feedback with FeedbackIn and FeedbackOut modules This adds a one sample delay (on the Paca) so we just make our delay one less than it should be. It adds more samples delay on the Capybara but we can just adjust the delay to compensate. Now we put a product module on the input so we have sample rate control over the input level and another in the feedback path so we have sample rate control over the feed back as well and mix the two together. As we know the amount of feedback and the amount of input level must add up to one (ie if feedback is 0.9 then the input must be 0.1 etc) so if we have our sample rate control signal going into the feedback product module, then the same signal can go through a scale and offset and feed the input level product module. This gives us just one signal to control the smoothing and as the effect is more pronounced as you approach 1 you could insert an InputOutputCharacteristic module to deform the spread and make it more even. You still need to generate sample rate control signals to control it and thats where the trapezoidal generator described above would work ( So Gustl your work is not in vain if you've started working on the last one). You also have the benefit that you could put the delay on the feedback path only (which is not like the Kyma delay with feedback where the delay is always in the signal path even when feedback is zero) and this way you would not need to compensate for a one frame delay as with the normal spectrum smoother. The live version would have less latency as well. Hope this makes sense Pete IP: Logged | |
johannes Member |
![]() ![]() ![]() thanks for taking the time, pete. iam not sure if i understand the whole implementation but i will give it a try and report back. ciao, johannes IP: Logged | |
gustl Member |
![]() ![]() ![]()
![]() ![]() IP: Logged | |
gustl Member |
![]() ![]() ![]()
![]() Attached is a 2 and a 4 Band WireSplitter based on XenOscs with adjustable XOvers and Steepness. I've got a working 8 Band Version as well (and I could do 16 or 32 Bands too) but I really want to encapsulate these. Anybody know how to do that? I need a way to have 8 outputs (4 Bands with amps and freq each) which you can process independently and sum up in a mixer feeding an OscillatorBank. The only possibility to encapsulate with 8 outputs is the matrix-8 sound but there's no way to split the channels afterwards when I use the encapsulated class. And is there a way to encapsulate a class with 16 outputs (8 Bands with amps and freqs each) or even more? Thanks, IP: Logged | |
gustl Member |
![]() ![]() ![]()
![]() ![]() IP: Logged | |
johannes Member |
![]() ![]() ![]() sounds awesome, gustl. exactly my type of ... hope iŽll find time to look into the patches in detail on weekend. cioa, Johannes IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Gustl This sounds really amassing. But I think you would have got the same sound using the traditional kyma delay line. The reason to use the external feedback and product modules was so that you had sample rate control, and each harmonics smoothing rate could be controlled independently. But you put the control through a constant module which has put it straight back to 1khz capytalk rate. Hense you've lost independent control and replacing the feedback stuff with an ordinary kyma delay will sound just the same. I hope this makes sense Pete IP: Logged | |
gustl Member |
![]() ![]() ![]()
![]() Thanks Pete, I didn't know that! Is there a rule of thumb on which sounds work at sample rate and which don't? I've attached v2 with Pete's correction and made the speed in bpm. So much possibilities here by only smoothing the spectral signal! Kyma is just great ![]() Also I made another tutorial on my blog: kymaguy.com [This message has been edited by gustl (edited 27 March 2014).] IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Gustl I think there is more than just smoothing going on here. The feedback control has not been shifted to the range 0 to 1 so sometimes it has negative feed back. Also when this value goes below 0 the matching input level clips at +1 so the feedback input relationship gets lost and the level and the pitches then get shifted. It's a good sound but I don't think it's simply smoothing that's doing it. re the rule of thumb. Hot parameters work at control rate (1khz) so if you paste a sound into a hot param it becomes control rate. There are about 6 exceptions in Kyma with special hot parameter fields, but in these cases you have to remove the L or R after the pasted sound and you must not use any formula in the field to make it work at sample rate. Pete IP: Logged | |
gustl Member |
![]() ![]() ![]() This is on purpose ![]() Ok, so if I remove the L after the pasted sound and I don't get an error then it will work at samplerate? Then the constant would be such an exception for example. Right? Thanks! IP: Logged | |
johannes Member |
![]() ![]() ![]() hey gustl, i have a question regarding your wiresplitter2Band patch. just try to understand the logic behind... when i put a oscilloscope right behind the mixer the display shows a signal clipped to 1. thanks, jo IP: Logged | |
gustl Member |
![]() ![]() ![]() hi johannes, this is the way it should work! if they wouldn't sum up to 1 you wouldn't get the original signal back when summing up the split signals. IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Gustl I like the trick with using the inputoutputcharacteristic to double up as a 0 to 1 squasher. Regarding the hot param fields, I believe that virtually all the hot param fields in all that sounds in Kyma only ever work at control rate. There are just a few (not many) that have a special feature of being two types of field merged into one. That is it is a hot parameter field if you put anything in the field (formula sound with L or R after it or combinations of these), other than just a single pasted sound with the L or R removed and nothing else. In this case it turns into a normal sound input field. I don't think that just because you don't get an error when the L or R is removed from a pasted sound, it means that it is a sample rate type field. I think it's just that, sometimes you get an error and sometimes you don't. You will find these special field such as the level field in the oscillator module and there are a few are fields in the VCF module but that's about it. But saying that, Kyma is evolving all the time, so may be SSC could confirm if this has changed. I am hoping that SSC will have some distinguishing mark to differentiate such fields (maybe a very pail violet background instead of cyan) but we will have to wait and see. IP: Logged | |
gustl Member |
![]() ![]() ![]() Hi pete, Thanks for the insight. Me too I hope SSC will mark those special fields somehow All the best, IP: Logged | |
cristian_vogel Member |
![]() ![]() ![]() Gustl, If you past a sound and remove the L downsampler, then it is at Sample Rate. Of course, if you try to do a calculation on it, using Capytalk, then it needs to come down to Control Rate, this is why Kyma doesnt let you compile a field that tries to combine a pasted sound at sample rate (ie. with no L) with Capytalk IP: Logged | |
pete Member |
![]() ![]() ![]()
I don't think this is the case, but the best way is to suck it and see. So I tried it with a constant modules attached and it sure don't look like sample rate. I think the confusion is that somewhere it explains how to get sample rate into the envelope field of and oscillator module and it is assumed that this will happen for every hot parameter field in Kyma. Your not the first that has said this as I heard the same thing said many times. Pete [This message has been edited by pete (edited 07 April 2014).] IP: Logged | |
gustl Member |
![]() ![]() ![]() Thanks Christian but it seems like Pete is right. Can we have a list of sample rate parameter fields, SSC? IP: Logged |
This topic is 2 pages long: 1 2 All times are CT (US) | next newest topic | next oldest topic |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.