Well, this is for the phase vocoder patch, which is based on miller's I07 example.
There's a counter that reads over the table, and I expanded the thing allowing it to loop and other convenient sampling controls. I never needed a perfect loop, cause I never loaded real perfectly looped files in it, so I just check when the counter grows bigger than the table size and restart it. As for recording on the tables, I do fade-in and fade-out, because it would click anyway. Now, for the ring buffer, it needs to be in perfect sync, so I can have tables that are multiples of the block size and use [bang~], it's not that much of a big restrain at all. You won't be able to specify an exact table size, but the resolution is 64 samples, and that is like 1.45 miliseconds (about nothing). So I got over it, did it, and it works!!! I can adapt the thing for loaded samples, and have it the table size rounded up to multiples of the block + 1. This is not a perfect loop, but they weren't perfect before anyhow... But why stop there? How to make it loop perfectly? This is the issue now. *Checking Miller's Phase Vocoder example. If you load a sample, how to make it loop perfectly?* I know one could use phasor~ and other stuff to read the table. But for the Phase Vocoder patch, we need that structure with the counter and everything. Well, I'll keep thinking. Thanks 2012/1/8 Charles Henry <[email protected]> > On 1/8/12, Alexandre Torres Porres <[email protected]> wrote: > > Hi folks, I'm trying to implement a ring buffer with a table for a > sampler > > patch based on an array. > > > > But I'm having the hardest time cause it always "clicks" when I start > > writing back on the beginning of the array. > > > > I made this simple test attached below using metro. But I'm figuring the > > flaw is because is not trivial at all to keep control data in sync with > > audio blocks > > > > any hints or ideas? > > I think you might be better able to keep the data in sync with a > vline~/metro/tabread4~ construction, because it preserves the timing > information in the messages. Instead of vline~/metro, you could also > use phasor~ which makes the looping implicit. > > To work around clicks, crossfading is what I hear about the most on > list. I'm not sure how it's implemented. > > When I think about coding in C, I always want to have N contiguous > samples to avoid having to check against the end of the array. To do > that, you make the buffer 2*N-1 in length. Then, on each write, you > write to two locations (0,N), (1,N+1), (2,N+2)... That ensures there > is always N samples in a row to read from, and you just move the read > pointer by 1 each time you get a vector of N samples long. (my > personal method...nothing more). >
_______________________________________________ [email protected] mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
