[PD-dev] Trying to understand how overlap works (was: Re: myfft~.c:2:10: fatal error: fftw3.h: No such file or directory)

Alexandros Drymonitis adrcki at gmail.com
Fri Oct 20 10:35:26 CEST 2023


I'm trying to implement overlap inside an external I'm writing, so that 
I can apply FFT to files I read from the disk (otherwise I would just 
let Pd do its magic with [block~] and [inlet~]).

To understand the underlying workings of [inlet~], I have created a 
subpatch with [block~ 256 2], and I'm connecting the [inlet~] of this 
subpatch to a [print~]. On the parent patch, I'm creating an integer 
ramp with [line~], by computing the duration of the ramp from 0 to 256 
like this: (1000 / sampling rate) * 256.

What confuses me is that the output of print is not identical every 
time. I'm banging the message [0, 256 $1( - where $1 is the output of 
the computation for the [line~] duration - and then I'm banging 
[print~], with [t b b]. Sometimes [print~] prints 256 for 128 times, and 
then it prints an integer ramp from 0 to 127, and other times it prints 
256 for 192 times, and then an integer ramp from 0 to 63.

What I want to do is simulate in C what is happening inside a subpatch 
with overlap and windowing (with a Hanning window), before a signal is 
sent to an [rfft~].

In the I03.resynthesis.pd patch, I read that the "block~ object 
specifies vector size of 512 and overlap four. This window now computes 
blocks of 512 samples at intervals of 128 samples computed on the parent 
patch."

And also that "The inlet~ now re-uses 3/4 of the previous block, along 
with the 128 new samples."

I can't get my head around this to even write some pseudo-code. Can 
someone help me out understand and code this?


On 10/18/23 13:51, Alexandros Drymonitis wrote:
> OK. Well, actually, that's what I'm doing, I'm using mayer_realfft(), 
> but I didn't realize it is declared in m_pd.h and that I can use it 
> straight away. I now removed the line that included d_fft_fftsg.c and 
> the object still works. Thanks for pointing it out. I would still be 
> grateful if someone can read the code in my previous message (just 
> ignore the third line: #include "pd_fft.h") and see if the analysis 
> and resynthesis is done as it should be.
>
> On 10/18/23 13:11, IOhannes m zmoelnig wrote:
>> On 10/18/23 08:41, Alexandros Drymonitis wrote:
>>> OK, it's using the d_fft_fftsg.c file instead, if not compiled with 
>>> the FFTW3 library then. Got that. I made this little external, and 
>>> it seems to work (with a fixed FFT size, but I don't really care for 
>>> now), still I'm including the code here. I'd be grateful if someone 
>>> can take a look and verify it's OK.
>>>
>>> I have copied the d_fft_fftsg.c file to the directory of my external 
>>> and renamed it to pd_fft.h, which I'm including in my file (I 
>>> commented out 
>>
>> do not do that.
>>
>> you are breeding symbol clashes and what not.
>>
>> otoh, 'mayer_fft()' and friends are exported by Pd anyhow (and are 
>> declared in m_pd.h), so you can just use them.
>>
>> dgfs,ma
>> IOhannes
>>
>> _______________________________________________
>> Pd-dev mailing list
>> Pd-dev at lists.iem.at
>> https://lists.puredata.info/listinfo/pd-dev





More information about the Pd-dev mailing list