Following a previous discussion < https://forum.pdpatchrepo.info/topic/12905/bang-bangs-before-the-end-of-a-dsp-block-at-startup > i'll post there a series of examples to explain what's going on under the hood with reblocked subpatches. It is based on experiments i done with my fork, but AFAIK it is exactly the same in Pure Data (there are minor differences but IIRC it doesn't change global behaviour). Please correct me if you thing something is wrong in order to avoid to make things more impenetrable in the future that it is already now.
- Up: [block~256]
- Down: [block~ 32]
- Downsample: [block~ 32 1 0.5]
- Upsample: [block~ 128 1 2]
- Overlap: [block~ 128 2]
- Overlap: [block~ 512 4]
I do that because i always forget how it is done, and must bang my head again and again.
Thus: first reblocking up (i.e. [block~ 256])!
[---a] ! [---A] #0 ^ ^ [b---] [---A] #1 ^ ^ [bc-a] [---A] #2 ^ ^ [bcda] [---A] #3 ^ ^ [bcde] ! [BCDE] #4 ^ ^ [fcde] [-CDE] ^ ^ [fgde] [--DE] ^ ^ [fghe] [---E] ^ ^ [fghi] ! [FGHI] ^ ^
a b c d e f g h i / - - - A B C D E F
// [block~ 256] BLOCK FREQUENCY+1 BLOCK PERIOD+4 INLET SIZE+256 INLET WRITE+192 INLET HOP+256 OUTLET SIZE+256 OUTLET HOP+256 #+0# // First tick. P+192/+64 // Prologue: write 64 samples at 192 of the buffer in. R+0/+256 // Read 256 samples from the buffer in to be processed. W+0/+256 // Write the result in the buffer out. E+0/+64 // Epilogue: read 64 samples at start from the buffer out. #+1# P+0/+64 // Prologue: write 64 samples at start of the buffer in. E+64/+64 // Epilogue: read 64 samples at 64 from the buffer out. #+2# P+64/+64 E+128/+64 #+3# P+128/+64 E+192/+64 #+4# P+192/+64 R+0/+256 W+0/+256 E+0/+64 #+5# ...