[PD] sinesum inverse

Simon Iten itensimon at gmail.com
Fri Aug 5 00:14:25 CEST 2016


perfect thanks, that makes sense.


> On 05 Aug 2016, at 00:04, Claude Heiland-Allen <claude at mathr.co.uk> wrote:
> 
> Hi Simon, list,
> 
> On 04/08/16 22:51, Simon Iten wrote:
>> hi claude,
>> 
>> your bandlimited project works/sounds great! very nice sounds from handdrawn waves.
> 
> thanks!
> 
>> 
>> however i am having trouble getting your example to work. probably just 
>> stupidity from my side.
>> 
>> i suppose i don’t understand your:
>> 
>>> "set appropriate block size, turn off dsp, bang to execute 1 block”
>> 
>> message. if you find the time, can you have a look at it?
> 
> sure, just a [loadbang]--"0"--[switch~] - this turns off dsp for the
> canvas (so you might want to put it all in a subpatch unless you're
> using it as an abstraction).  see attached, works for me
> 
>> 
>> do i not need to run a bang into tabplay in this special one block send scenario?
>> 
>> with my patch i get “kind" of the right thing.
>> 
>> 1) the table “spectrum” only updates once i click into the table (after i hit 
>> the bang).
> 
> mm, seems to be a Pd bug or other infelicity.  the attached includes a
> workaround using [tabwrite] which updates the GUI
> 
>> 2) i get only 64 values, so i guess my blocksize is still 64?
> 
> no, it's that for real signals the second half of the rfft~ output is
> symmetric to the first, so Pd sets it to 0 and ignores it in rifft~ to
> avoid confusion.
> 
>> 3) if i send a bang to switch~ when dsp is off, i get an error on the console:
>> 
>> bang to block~ or on-state switch~ has no effect.
> 
> you have to switch it off with "0" first, and have global dsp on (afaik).
> 
>> 
>> 
>> 
>> cheers
> 
> hth,
> 
> 
> Claude
> -- 
> https://mathr.co.uk
> 
>> 
>> 
>> 
>> 
>> 
>>> On 04 Aug 2016, at 18:01, Claude Heiland-Allen <claude at mathr.co.uk 
>>> <mailto:claude at mathr.co.uk>> wrote:
>>> 
>>> Hi Simon,
>>> 
>>> On 04/08/16 09:54, Simon Iten wrote:
>>>> ah sorry, yes
>>>> 
>>>> i want to read a wavetable, say 128 steps and calculate the gain structure to 
>>>> aproximate this wavetable with sine waves.
>>>> the idea behind this is to get a different sound from wavetables, use low 
>>>> resolution wavetables to get nice sounds (waldorf microwave xt)
>>>> 
>>>> so for a saw wave i would want the following numbers.
>>>> 
>>>> 1 0.5 0.3333 0.25 0.2 and so on…
>>>> 
>>>> how to do this for an arbitrary input wavetable?
>>>> 
>>>> i looked at the fft examples but it is not clear to me how i would do this 
>>>> with a single wavetable (of known size)
>>> 
>>> You could do something like this with [rfft~], but you lose phase
>>> information which might be important depending on what you are doing
>>> (use fixed-width font to see diagram):
>>> 
>>> "set appropriate block size, turn off dsp, bang to execute 1 block"
>>> |
>>> [switch~]
>>> 
>>> [tabplay~ wavetable]
>>> |
>>> [rfft~ ]
>>> ^    ^
>>> [*~] [*~]
>>> \  /
>>> [+~]
>>>  |
>>> [sqrt~]
>>>  |
>>> [tabsend~ spectrum]
>>> 
>>>> or if there is a “simpler” (without fft) possibility that would be great.
>>> 
>>> I don't think you'll get simpler than FFT here.  As a bonus you can also
>>> get phase information (sinesum has all phases 0, cosinesum all phases
>>> pi/2, general wavetable can have arbitrary phases).
>>> 
>>> You could use [rifft~] instead of sinesum to generate your wavetable,
>>> too.  Note there may be some issues with normalization (fft->ifft has an
>>> amplitude gain equal to the blocksize, iirc).
>>> 
>>> For a more advanced use of oneshot FFT and IFFT for wave tables, see my
>>> bandlimited project:
>>> https://mathr.co.uk/blog/2015-02-12_bandlimited_wavetables.html
>>> 
>>> 
>>> Claude
>>> --
>>> https://mathr.co.uk <https://mathr.co.uk/>
>>> 
>>> 
>>> _______________________________________________
>>> Pd-list at lists.iem.at <mailto:Pd-list at lists.iem.at>mailing list
>>> UNSUBSCRIBE and account-management ->https://lists.puredata.info/listinfo/pd-list
>> 
> 
> <wavetablefft2.pd>




More information about the Pd-list mailing list