![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: The "Human" Synth... | |
David McClain Member |
![]() ![]() ![]()
The goodies are user tunable 2nd order bandpass filters, and low and high shelving filters. All of these allow user settable Q in addition to center frequencies. They are implemented using a leading script to compute the various IIR coefficients. Simply edit the head of these scripts and put in your own hot variable names. Each filter also uses a memory writer buffer, and if you use more than one of these goodies in one sound, each instance must have its own name. These are labeled 'fdbk' by default. All of these filters are build from gain blocks, mixers (adders), and delays from the bare definitions of their IIR forms. Now on to the "Human Synth". This synth works by acting sort of like the human brain at recognizing sound pitches and controlling one's whistling to harmonize with the detected pitch. A pair of slow roll-off shelving filters helps to localize the pitch over a 4 and half octave range starting around middle C and on up past the end of the keyboard range. Once crudely localized, these two shelving filters define a frequency !Fc1 that is used to tune a pair of bandpass filters slightly above and below that frequency (1.5 * f1 and 0.67 * f1). Then the energy falling in these two narrow (Q = 10) BPF's is used to compute a better estimate of the incoming pitch, called !Fc2. That new pitch is used to control an oscillator. This is a monophonic synth, sort of sounds like a human whistling while doubling with a piano keyboard (external piano keyboard... not in this synth sound). What makes it sound more human are the following items: 1. Pitch perception is imperfect (just slightly) and so the tuning of the sound generator differs at random (more or less) from the true pitch. 2. There is a natural portamento (very short) as the filters adjust to the new incoming pilot signal and attempt to determine its frequency. 3. A pink noise generator (user controllable) adds to the uncertainty in the pitch determination, leading to a natural sounding vibrato. The pitch wavers ever so slighly. Drop this noise level and you get more steady pitches. 4. A second harmonic can be turned on in the pilot tone, and this pulls the pitch determination upward a touch, leading to a slight tuning stretch. That corresponds to our own sense of pitch flattening in the presence of nearby loud sounds. (e.g., A violinist has to learn to play flatter than one might like at first, because the sounds are naturally flattened to the players ears, while sounding normal to listeners. If a violinist played according to his actual perceptions of pitch, he/she would play sharp.) This synth requires only about 4 DSP's to compute all this stuff. A human hearing mechanism is a bit more involved than this, but this is a very good model for a start. We cheaped out by using the pair of shelving filters instead of a whole bank of 1/3 octave BPF's. Why 2 shelving filters? Because I needed to cancel the effects of additive pink noise. Noise affects both shelving filters approximately equally, and by subtracting them you cancel the noise contribution to first order. The Q in these shelving filters is only 0.34, which (I was helped by Mathematica) gives a nearly linear rolloff with log frequency. The droop is small enough that noise does not dominate either filter when the signal is at one extreme or the other of the tuning range, roughly 240 Hz - 4800 Hz (upper half of the keyboard). These two shelving filters help us get within less than 30% of the correct frequency, at which point the pair of BPF at 3/2 and 2/3 frequency help narrow down to around 1% or less error. Zero error would sound boring, but this 1% or so error sound quite natural. So -- using an accurate synthesized frequency as a pilot to a bunch of human-like filters to redetermine the incoming pitch, to drive an output oscillator. I'd say that's bending a few DSP's, wouldn't you? - DM 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.