[PD] RE: [offlist] Pre Loading a Delay Line

Michael Garrett mgarrett at garrett-tech.com
Fri Dec 8 16:50:25 CET 2006


Derek,

Thanks for the great exchange of ideas!!!

There was a lot of postings last night that I need to weed through. 

One thing I realized last night is that I am getting my terminology
confused. A basic KS block, the one that I have labeled waveguide, is not
really a waveguide in the true sense. So the synth that I have posted really
is a KS synth.

One thing about pre loading the delay line, is getting the true sound of the
recalculating line itself, without the noise pulse at the beginning. You can
output the delayed signal, but it appears 20 msec or so 'late' for bass
notes.

I picture it similar to pulling a bass string with your finger, you are
adding energy to the string, but there is no sound from adding this energy.
So the string, in cross section looks like a single cycle of a saw tooth.
The pickup is located someplace on the string, and start producing sound the
instant the string is released, not 20 msec later, the timbre of the sound
based on the energy stored by the finger being released.

The synth that I posted, does a pretty good pvc implementation. You can do
what you suggest just by playing octaves on the thing...

I am going to get a little more theoretical, and possibly implement an
external. I got the examples to compile, but have some kind of boneheaded
error that I need to fix. 

All in all, I think that I am reinventing waveguide synthesis which was
patented 12 years ago.... I read the patents last night...

mcg





-----Original Message-----
From: derek holzer [mailto:derek at x-i.net] 
Sent: Thursday, December 07, 2006 8:30 PM
To: Michael Garrett
Cc: pd-list at iem.at
Subject: Re: [offlist] Pre Loading a Delay Line

Hi Michael,

thanks for the verbose answers! When I get a free moment I will check 
all this stuff out at length. I'm not one for "classic textbook" stuff 
either, so I figured there was a method to your madness ;-)

One way I've been dealing with this low frequency issue is by taking 
some inspiration from the Trautonium. The Doepfer synthesizer 
manufacturer recently started to make modules for reproducing this 
sound, but the basic idea is very simple. Take a note, and make a few 
octave or partial octave subdivisions. So for each note you could have 
two or three subharmonics of that octave which would fill in the low 
frequencies.

In practice, this would mean setting up several KS delay lines for each 
excitation, but pitching them at subharmonics of the highest note. 
Octave divisions are the "cleanest" and most natural sounding, but three 
or four octaves below some notes means you have a slightly pitched echo 
rather than a tone. So half, three quarter or other divisions are worth 
experimenting with. Normal, "musical" divisions with a slight detune 
just high or low of the target note give very nice, rich, deep sounds. 
 From here, you can easily side-track into Just Intonation theory and 
all other kinds of stuff. I just like it when it sounds heavy!

good luck,
d.

Michael Garrett wrote:
> 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:mgarrett at garrett-tech.com] 
> Sent: Thursday, December 07, 2006 1:58 PM
> To: 'Michael Garrett'; 'derek holzer'
> Cc: 'pd-list at iem.at'
> 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:mgarrett at garrett-tech.com] 
> Sent: Thursday, December 07, 2006 1:41 PM
> To: 'derek holzer'
> Cc: 'pd-list at iem.at'
> 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:derek at x-i.net] 
> Sent: Thursday, December 07, 2006 12:26 PM
> To: Michael Garrett
> Cc: pd-list at iem.at
> 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:derek at x-i.net] 
>> Sent: Thursday, December 07, 2006 10:16 AM
>> To: Michael Garrett
>> Cc: pd-list at iem.at
>> 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:derek at x-i.net] 
>>> Sent: Wednesday, November 29, 2006 8:01 PM
>>> To: Michael Garrett
>>> Cc: pd-list at iem.at
>>> 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.
>>>
>>>
>>
> 
> 


-- 
derek holzer ::: http://www.umatic.nl
---Oblique Strategy # 47:
"Discover the recipes you are using and abandon them"





More information about the Pd-list mailing list