this point has been confusing to me, as well. and, like pix, i've been avoiding it because i am lazy :P
what if:
ie:
[phasor~] | | [arraysize] | | | [- 1] | | [*~] | [+~ 1] | [tabread4~]
wouldn't this give you your read from 1 to size-2? or is my math wrong? or do you really need to provide wrap-around points (guard points) for cleanly looping samples?
i'm going to have to look at the docs more when i get the chance.
also, Soeren: if it's small, could you send me a copy of the soundfile that's causing clicks?
--eric
pix wrote:
more than likely it's your sample data.
try a sample that is completely silent. if the click goes away, it is likely your data.
also, try filling your array using the "sinesum" message from 2.control.examples/15.arrays.pd if this doesn't click, it is definitely your data.
note on the tabread4~ help page that tabread4~ requires guard points (although it doesn't say that explicitly). valid reads are from 1 to size-2. you are reading from 0 to (size-1) if you are just multiplying a phasor.
not thinking too hard about it (eg, i could easily be wrong), i think the guard points situation is that the sample at 0 should be a copy of the sample at size-2 and the sample at size-1 should be a copy of the sample at 1.
i guess to build a table like this from a normal non-guard-pointed sample, you could grow (suing a resize message) the given table by 2 samples, then set the sample at newsize-2 to the sample at 0, and the sample at newsize-1 to the sample at 1.
now if you index the table using (phasor*newsize-2)+1 you should get a clean loop, but unfortunately the sample will be offset by one sample. you could wither fix this in the indexing ( something like ((phasor*newsize-2)-1 mod (newsize-2))+1 ) or copy all of the samples over by one when you are fixing the table.
making some things to do this guard point generation and indexing would be a nice pair of abstractions to make available.
okay.. i think i just thought about that way too much.
you will be able to explain any huge errors in my reasoning, by knowing that i didn't test any of this. i've never noticed clicking when just using tabread4~ without doing all of this jiggery-pokery, as my samples are normally kind of noisy... but i always new i was being lazy.
by the way, instead of using a modified phasor~ to do one-shot, you could send a line~ object a "0, 1 <period>" message.
pix.
On Fri, 08 Aug 2003 10:05:17 +0200 Søren Bovbjerg sb@cvmt.dk wrote:
Hi
I am searching for a PD object (external/native) that can play samples from an array in both loop and "single shot" mode while being able to change playback speed.
So far I have been using a phasor~ (modified to create 1 or unlimited ramps) + tabread4~ but I am experiencing a very small click when the sound loops. The click is only noticable when the sample is a pure looping tone. The problem exists with both wav and aiff files so I don't
thing it is a "header" problem.
I have attached the sampler (without modified phasor~) I have been using
so far. It should run on any newer PD version.
Any ideas are welcome.
TIA
Soeren
(ascii pseudo-patch)!!! yazaaahhh!!
------ http://USFamily.Net/info - Unlimited Internet - From $8.99/mo! ------