On Monday 17 May 2004 07:47 pm, Frank Barknecht wrote:
Hallo,
Roman Haefeli hat gesagt: // Roman Haefeli wrote:
yeah, the problem is karplus-strong-synthesis. the sound is generated by feedbacks, so the length of the delay determines the frequency. if the grid of possible delay-values is 1 sample, you get very large spaces between the resulting frequencies. (f = srate / delayinsamples). it's not only about smaller than 1 sample, but more precise than a sample. have a look at the beginning of this discussion.
Yes. One problem is the highest possible frequency you can create with Karplus-Strong synthesis.
There you have:
frequency of tone = 1/delay length in seconds
If you create a 1-sample-delay, your delay length is exactly 1/samplerate and freq would become == samplerate, also according to your formula.
But as the sample theorem tells us, you cannot create a signal with a frequency that is larger than SR/2, so to actually make use of a Karplus-Strong delayline, you'd need to make the delay at least 2 samples long.
The other, more interesting problem is, can you and how could you get around the quantization of possible pluck frequencies according to above formula? Do you need to oversample to get delays with fractional samples length? Like when you want to synthesize a pluck with a frequency of 16000 Hz in CD quality, you'd need a delay length of 44100.0 / 16000.0 ~= 2.75 samples. Or is this possible with some kind of interpolation like in a wavetable oscillator or does it require oversampling? I think, it should be possible with interpolation, but I'd have to dig out those DSP books for that or search the music-dsp archive...
Ciao
It definitely seems to be possible to get around the quantization using interpolation. Here's a polyphonic stringed instrument I made which uses vd~. It can play any pitch up to midi note 77 (about the maximum with a 44100hz sample rate and blocksize=64).
http://home.gci.net/~pamsaylor/ben/polystr.inst.pd http://home.gci.net/~pamsaylor/ben/polystr.voice.pd http://home.gci.net/~pamsaylor/ben/polystr.string.pd
Ben