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 <[email protected] 
>> <mailto:[email protected]>> 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/>
>>
>>
>> _______________________________________________
>> [email protected] <mailto:[email protected]>mailing list
>> UNSUBSCRIBE and account-management 
>> ->https://lists.puredata.info/listinfo/pd-list
> 

#N canvas 19 83 686 620 10;
#X obj 142 176 tabplay~ wavetable;
#N canvas 0 50 450 278 (subpatch) 0;
#X array wavetable 131 float 2;
#X coords 0 1 131 -1 128 100 1 0 0;
#X restore 317 214 graph;
#X obj 143 220 rfft~;
#X obj 136 254 *~;
#X obj 162 254 *~;
#X obj 143 287 +~;
#X obj 143 310 sqrt~;
#N canvas 0 50 450 278 (subpatch) 0;
#X array spectrum 128 float 2;
#X coords 0 1 128 -1 128 100 1 0 0;
#X restore 315 343 graph;
#X obj 143 334 tabsend~ spectrum;
#X obj 57 60 switch~ 128 1 1;
#X obj 25 9 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 102 37 0;
#X obj 102 15 loadbang;
#X obj 25 29 t b b;
#X obj 26 393 tabread spectrum;
#X obj 26 415 tabwrite spectrum;
#X msg 25 345 0;
#X obj 25 367 t f f;
#X connect 0 0 2 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 1;
#X connect 5 0 6 0;
#X connect 6 0 8 0;
#X connect 10 0 13 0;
#X connect 11 0 9 0;
#X connect 12 0 11 0;
#X connect 13 0 16 0;
#X connect 13 1 0 0;
#X connect 13 1 9 0;
#X connect 14 0 15 0;
#X connect 16 0 17 0;
#X connect 17 0 14 0;
#X connect 17 1 15 1;
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management -> 
https://lists.puredata.info/listinfo/pd-list

Reply via email to