![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Karplus-Strong Revisited | |
David McClain Member |
![]() ![]() ![]()
The all-pass-filter is used to provide fractional sample delays making the total delay line the necessary number of (fractional) sample periods for any given pitch. This Sound should function properly for any chosen Capy sample rate. This Sound is controlled by the !Pitch parameter from a keyboard, and accepts either a recording or a sonic input on channels 3&4. (Change this as needed). The delay is computed for varying degrees of feedback, both positive and negative. When feedback is positive, you have the equivalent of a quarter-wave resonator (tube closed at one end), and when negative you have a half-wave resonator (tube open or closed at both ends). The quarter-wave (positive feedback) system resonates at half the frequency of (1 octave lower than) the half-wave system. There is a 1-pole low-pass-filter inline with the delayed feedback, and the cutoff frequency is adjustable on the VCS. This filter simulates the gradual attenuation of the higher harmonics of realistic instruments. While it has been customary to excite the Karplus-Strong waveguide model with spurts of white noise (and go ahead and try this -- it makes a stringed instrument sound), I have chosen to excite it with more complex spectra. In effect, the input spectrum is multiplied by a comb-filter that decays with frequency according to the low-pass filter inserted into the delay line. The resulting blend is very entertaining. The sounds get really interesting when fed a complex spectrum containing many differing harmonics that evolve over time. In this case different harmonics from the excitation signal will contribute harmonies with the fundamental as they excite various system overtones. These harmonies are often in contrapointal (??) relationships with the fundamental -- meaning that they actually harmonize in a more complex way than simply doubling the fundamental harmony. (Sorry for sounding like a musical lamer here...) Enjoy! - DM IP: Logged | |
earcon Member |
![]() ![]() ![]() hey dave, thanks 4 the sounds! u r amazing! i made a plucked string with yr patch but i guess i did something wrong. can you help? for input i used a functiongenerator on a random table triggered by !keydown and duration= !keynumber nn hz . try it! sounds like a bell! but the pitch is 1/2 step flat. what did i do wrong? why does the harmonicresonator filter sound different from yr patch? IP: Logged | |
David McClain Member |
![]() ![]() ![]() Hi Earcon, I'm not clear on your function generation. Did you use a FunctionGenerator Sound block? and if so, did you feed it with waveform from Wave/Control/random.aif? - DM [I just tried this, a FunctionGenerator fed with /Kyma/waves/control/random.aif, and triggered as you stated with !Keydown and duration !Keynumber nn hz. It sounds fine to me, except for key A2 which has a bit of a swoop to it and sounds a bit flat. Perhaps we are being bitten by computer arithmetic roundoff errors in the delay computation. I'm running Capy at 48 KHz here. That may make a bit of a difference to the arithmetic too. We can't actually dynamically specify a number of samples to delay with VariableDelay blocks. So instead, I allocate enough delay line to accommodate about 25 Hz and then I have to specify what fraction of that I actually want, depending on the !Pitch. But Capy can only provide whole sample delays, and so there is some kind of truncation or rounding going on in that delay fraction calculation. Maybe that, plus a different sample rate in the Capy, accounts for the half-step flatness?] [Also... using !Keynumber nn hz for the duration is somewhat suspect here. For the same reasons as stated about VariableDelay's we can't run a FunctionGenerator for any but whole numbers of samples. So no matter what your !Keynumber nn hz turns into, depending on the Capy sample rate, you will have a rounded or truncated number of whole samples duration. I think what you really want to do here is simply feed a white noise source, maybe through a short spurty Envelope. Let the tuning happen in the Karplus-Strong synthesis, not in the pitch of a source as you do when you use a FunctionGenerator block.] [YIKES! I just tried using a WhiteNoise block and boy you are correct about the tuning being off... I'll have to think about that one. It was perfectly good with my recorded and live sources, but now that it has to stand on its own, it really is sorry... ] [This message has been edited by David McClain (edited 19 July 2002).] IP: Logged | |
David McClain Member |
![]() ![]() ![]()
- DM [The All-Pass filter now has the transfer function H(z) = (alpha + 1/z) / (1 + alpha/z) and I had previously incorrectly counted 2 or more delays through the lowpass filter, when it should not have been counted as any. There is a fixed delay of 1 sample with the memory writer, and then the coarse delay block takes up the rest of them. The APF handles the fractional portion of the needed delay.] [This message has been edited by David McClain (edited 19 July 2002).] IP: Logged |
All times are CT (US) | next newest topic | next oldest topic |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.