Here is a link to the simple synth I am starting with. It simulates the
sound of a PVC type xylophone. It adjusts the delay length based on the
requested note.
It is this synth that got me thinking about pre-exiting the delay line
in order to get low frequency sounds.
http://www.garrett-technologies.com/Music/pvc_synth.zip
mcg
-----Original Message-----
From: Michael Garrett [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 07, 2006 1:58 PM
To: 'Michael Garrett'; 'derek holzer'
Cc: '[email protected]'
Subject: RE: [PD] Pre Loading a Delay Line
Forgot to mention, the last synth is a standard KS synth, it does not use a
pre loaded delay line!!
mcg
-----Original Message-----
From: Michael Garrett [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 07, 2006 1:41 PM
To: 'derek holzer'
Cc: '[email protected]'
Subject: RE: [PD] Pre Loading a Delay Line
Attached is the base KS synth that I am using. It sounds like a PVC pipe
Being hit which was my goal. The delay is excited with a cosine enveloped
bandlimited noise pulse. If you add some spikes to the table, you can change
the excitation sound.
Preloading the table, gets more low frequency energy into the table faster,
allowing better generation of low frequency sounds. (I am a bass player!!)
mcg
-----Original Message-----
From: derek holzer [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 07, 2006 12:26 PM
To: Michael Garrett
Cc: [email protected]
Subject: Re: [PD] Pre Loading a Delay Line
I was wondering how you arrived at this idea of "preloading" the delay
line. From reading this I would say definitely trigger your waveforms as
samples into a delay line with feedback. The waveform should be the same
length as your delay line. By setting your feedback and playback
readpoints to the same, you can change the functional length of delay
without changing it's actual (or theoretical maximum) length. So you'll
need to be able to call up the length of the waveform (unless they are
all the same in your implementation) in miliseconds and send that to the
[vd~] used for playback and for feedback as a starting point, from which
you would adjust to change pitch. The first thing you would hear then is
the sampled waveform, and then after that iterations of that waveform
decreasing in volume. Classic KS.
Or am I missing something? It seems you're taking a more complex
approach to this than basic KS, and I wonder what the aim is in terms of
sound...
best,
d.
Michael Garrett wrote:
A little better explanation:
The idea is to read from the table, and feedback with and attenuated
delay,
back into the table, thereby modifying the table, the table at any given
time, being the KS 'waveform' at that instant. So, reading attenuating and
feeding Back the signal at varying rates, is equivalent to modifying the
'speed of sound' inside the 'waveguide'.
So something like this: Read out from the table at the current (or
delayed)
index, send that to the output, take that sample attenuate it, and write
it
back to the using the delay index, increment the indices (with modulo)
thereby replacing the original table with the time modified data at each
time (or sample index). The read .. modify.. feedback rate, is equivalent
to
the 'propagation' of waves in the 'waveguide' (or the KS 'delay' unit).
So of you were watching the table in real time, you would see the internal
guts of the KS algorithm, modifying the wave (table)in real time.
Once the energy in the table has decayed to zero, silence would be
output...
Another note would be triggered, by copying the table back into the
'waveguide' (or table or delay line depending on the implementation).
mcg
-----Original Message-----
From: derek holzer [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 07, 2006 10:16 AM
To: Michael Garrett
Cc: [email protected]
Subject: Re: [PD] Pre Loading a Delay Line
Hi Michael,
technically, reading from a table and changing the playback speed isn't
really KS. That's more like wavetable synthesis with en envelope. I
always thought KS was dependent on attenuated feedback. But if it works
do it!
I don't have a handy example of tabread/tabwrite as a delay,
unfortunately. Frank Barknecht has a [pluck~] abstraction in CVS:
"/abstractions/footils/foo/pluck~.pd"
But I'm sure it uses [vd~]. Might be interesting to have a look at. And
this abstraction from Orm Finnendahl adapted by João Miguel Pais:
http://lists.puredata.info/pipermail/pd-list/attachments/20060412/75593d59/k
s.obj
(textfile...save as "ks.pd")
Another idea, why not preload the delay line in realtime by triggering a
sample when you need the note? That seems much more like "textbook" KS,
which is usually triggered by a burst of noise (though I prefer a mic
input).
best,
d.
Michael Garrett wrote:
Thanks or the feedback!! I have a good KS synthesizer patched up
That gives me good results, with the block size for the waveguide set
At blocksize one as you suggested.
The table is a good idea, instead of time dialating the excitation
waveform
or changing the delay time to get different pitches, I can just read /
write
the table (delay line) at different rates (in modeling terms, changing
the
speed of sound). Easier, and only requires a constant length table copy
for
each note.
I have been peaking into the source with the intent of creating an
external
which performs the same function as the current delay object (with vd~)
but
has an input to preload the delay line from a table.
Is there an example that you know of that uses tabread and write as a
delay
line??
Thanks!!
Michael
-----Original Message-----
From: derek holzer [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 29, 2006 8:01 PM
To: Michael Garrett
Cc: [email protected]
Subject: Re: [PD] Pre Loading a Delay Line
Hi Michael,
Michael Garrett wrote:
I need to pre fill a delay line, in a Karplus Strong oscillator. That
data will then be overwritten during the duration
Of the 'note'. Is there a 'built in mechanism for accomplishing this, or
do I need to construct something using a table.
I need the delay line to be interpolating. I am setting the delay based
on the incoming note, and ideally would fill the
line with the same waveform, time dilated to fit the required length.
Short answer: no, there is no way to "pre fill" the delay that is native
to the [delwrite~] object.
You're on the right track to use a table, however. You could also go a
step further and build your own delay line using two tables, which
transfer back and forth to each other with [tabwrite~], and could be
preloaded with whatever you need. The [tabread4~] object should read
your tables with enough interpolation for Karplus Strong synthesis.
Otherwise, [delwrite~] and [vd~] are normally used for this, and [vd~ ]
seems to interpolate well enough. You'll have to set a very low
blocksize with the [block~] object to synthesize high frequencies in any
case.
In the past, there's been quite a bit of discussion about KS synthesis
on the list. And it sounds like you have a rather complicated approach
to it (or at least more so than standard KS synthesis). If you're
interested, it might be worth checking some of these threads for more
tips.
best,
d.