![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Realistic Strings Bowing |
David McClain Member |
![]() ![]() ![]() Hi, While my studio is in a state of flux, I can't transmit any SoundFiles for demonstrating this, but this is so easy that all you need to do is enter what I show below in the parameter fields of MIDIOutputEvent Sounds.... I have a very good solo string sound library developed by Dan Dean. But as with any sampler playback the use of consistently repeated samples produces a dead giveaway that you are using a sampler. There are a number of effects that can be introduced by having Kyma regenerate the MIDI controls on the way to the sampler. Use your sequencer to send the MIDI data to Kyma, and use Kyma to regenerate these events for the sampler. First, since strings have no frets, it is very unlikely that any human player can hit the same pitch repeatably to better than a few cents variation. (This is true for just about every human played instrument except keyboards!). On a stringed instrument the pitch is inversely proportional to the length of the bowed portion of the string between the finger position on the fingerboard and the bridge. The error committed in pitch is proportional to the RELATIVE length error. The absolute length error is likely fixed by the size of the player's fingers. But the RELATIVE error depends inversely on the length of the bowed portion of the string. So this means that the amount of pitch error will grow as the pitches extend higher and higher (shorter and shorter bowed strings). Since no error is likely when the player bows an open string, there is a lower limit to where pitch variations ought to be employed. I chose the approximate mid pitch of all 4 open strings as that lower limit, e.g., MIDI note number 60 for a Violin, and NN 40 for a Cello. [Cello's open strings are tuned an octave and a fifth below those of a Violin.] Next, I specify a likely random maximum pitch error at one octave above the open string pitches. This maximum error will be scaled by the distance of the actual played pitch above the lower limit, in octaves. So for example, if I am willing to entertain a random error limited to +/-6 cents at fingerings an octave above the open strings, the error applied by Kyma will be (!Warp / 100 * !KeyDown nextRandom * ((!KeyNumber vmax: 60) - 60)/12) nn !Warp is the maximum error that I allow per octave, expressed in Cents, so (!Warp/100) is the error in Note Number units. The expression (!KeyDown nextRandom) generates a random number between +/-1 every time a NoteOn event is received. The octave variation of this error is expressed by the scaling ((!KeyNumber vmax: 60) - 60)/12). For the Violin, this produces zero error at NN 60 and below, while for an octave higher it produces values near 1. Two octaves higher produces values around 2, and so on. For the Cello I substitute the value 40 for 60 in this expression. Next, it is well known that string players tend to play Forte notes slightly sharp. They have to learn to overcome this tendency, which can be difficult. This happens because loud sounds produce changes in the inner ear (cochlea) that tend to make these pitches sound flatter than they really are. If a string player were to play a forte note at the "correct" pitch for his hearing, all of us in the audience would hear that note as sharp. This effect is by no means small! I have measured here in the studio, using a Kyma testbed, that the pitch detuning can be as much as a full semitone flat at the loudest tolerable sound levels. That is quite a bit for a string player to overcome. Remember he/she cannot hear the correct pitch, and so they have to learn how much to detune their playing by practicing over and over again for many years. They are applying an "open-loop" correction. They have no reference pitch toward which to move. So to simulate an imperfect player correction, I also add in the pitch error given by (!Sharp / 100 * !KeyVelocity) nn where !Sharp is the amount of correction error in Cents, when the instrument is played as maximum loudness. Here it is assumed that !KeyVelocity is related to output sound levels. This may or may not be true with your sampler. In my case, I settled on a maximum sharping pitch error of 5 cents for both the Cello and the Violin. This ought to be independent of pitch. But ideally, you can't have a sharping error for open bowed strings, so this is not a perfect solution. Refinements could be incorporated to allow this only for notes above the open string octave. Since we can't control the fingering of the individual notes, this will all be uncertain. For example a G above middle C could be played either by octave fingering of the lowest string on a Violin, or by other finger position on other strings. So we have to accept some crudeness in our approach. As long as you keep the pitch variations small, you won't be too obviously wrong. Your samples probably already have some of these effects in them. But sample library editors routinely retune their note sample pitches to make them fit into concert pitch scales. The individual notes will exhibit minor pitch variations over the duration of the sample. That will show a slighly wrong pitch in the attack, followed by a quick adjustment by the player to a more correct pitch for the sustain portion. But to get the sample to concert pitch, the estimated frequency of the sample most likely considers the sustain portion, and so these parts will not be flat or sharp.... but they need to be, on some random basis. But finally, in consideration of the listener to a recording... if a portion of the music extends to forte levels, that listener will also begin to hear the pitches as flatter than they really are. So should we intentionally play our notes sharper so that the listener can perceive them at more correct pitches? This is especially relevant for headphone listening. I don't have a good answer to this question just yet, but experiments continue along this line here in my studio. So in summary, here is the recipe for a bowed MIDI Note regeneration in Kyma... Channel = input channel of the MIDI events (e.g., 2) 60 nn for the violin, and 40 nn for the cello. Cheers, - DM [PS: Since a Cello is larger, has longer strings, than a Violin, shouldn't the maximum random detuning on a Cello be smaller than for a Violin? Good question... In order for a Cello to play G4 the bowed length of string has to be the exact same length as for the violin. So in this respect, the answer is that both Cello and Violin need the same kind of pitch random detuning. However, my random detuning shown above takes account of how far above the open string pitches the bowed pitch resides. Since the Cello has its lower limit about an octave and a fifth below that of the Violin, the scale factor for the same pitch on each instrument will be about 2-3 times larger than for the violin. Hence, the maximum variation per octave, above the open string pitches, needs to be about 1/3rd-1/2 of those for the violin. So the answer is that !Warp for a Cello ought to be about 1/3rd-1/2 the value of !Warp for the violin. On my samples, the Violin sounds pretty good with a !Warp of around 6.0 cents. My Cello sounds about right with a !Warp of 3.0. Variations are invited. Detuning with loudness is independent of pitch, and so this !Sharp value ought to be the same for both instruments.] [This message has been edited by David McClain (edited 20 July 2003).] IP: Logged |
pete Member |
![]() ![]() ![]() Hi David I assume that the sample player you would use would be within Kyma itself and not an external sample player. In standard midi the note number is limited to 7 bits and cannot transmit non integer note numbers. To achieve the same thing with an external sample player you would need to set up the pitch bend range in the external sample player and transmit the error as pitch bend info, or do some clever stuff with poly aftertouch if the sample player had that ability. Any way I agree that the regularity of sampled sounds is a big part of what makes us know we are not listening to a real violinist and anything that can move away from that regularity is a good thing. But I believe that the fact that every note played by a real violinist will have a different vibrato, a different bow speed, weight and position on the string and that all these factors will change over the duration of the note is far more telling than any minor pitch errors. I suspect that if we took a recording of a solo violin playing a phrase and randomly very sped every note by less than 1/8 of a semitone, most listeners would not even know that it had been affected and would think they were listening to a normal recording of a real violinist. A good few years ago I had to compose a part for a cello player. When I gave her the part I said that I had made life easy for her as there were a lot of open string notes. The first thing she did was play all those open notes one string down so that they were not open any more. I said why have you done that and she said that open notes sound horrible and should be avoided where possible. I realized that with an open note she couldn't do vibrato or dampen the string and would have lost all form of expression in her playing. I've just done an experiment. As I'm not a violinist I tried this with a piano. I closed my eyes and got a friend to put my right thumb on middle C. I then played the two Cs below that with my left hand. I got it right every time. Now I know that I had quite a large target but I suspect that a good violinist can hit a note spot on without having to compensate and that they could play a phrase perfectly in tune even if they couldn't hear the violin at all. I think adding randomness to the pitch is a good thing but I don't think that biasing that randomness will make it sound any closer to the real thing. Pete. IP: Logged |
David McClain Member |
![]() ![]() ![]() Hi Pete, No the sampler in mind here is GigaStudio. And it behaves pretty much as you say, for any other external sampler. But the key to the technique shown here is that Kyma automatically converts non-integer note numbers to a combination of a NoteOn event and a PitchBend. In fact, as Kurt recently suggested, you can transmit arbitrarily many PitchBend events from the MIDIOutputEvent Sound. This happens whenever the NoteNumber of the frequency parameter changes. NoteOn events, and the velocity parameter, are only transmitted when the gate goes positive, but PitchBend events are generated whenever the frequency changes. Kyma does expect that your external keyboard or sampler will have its pitchbend range set to +/-1 octave for this to work correctly. You may well be correct about the biasing of the pitch, in the hands of virtuosos... I'm remembering the admonitions of my old Violin teacher when I put that part in. I'm not a virtuoso on any instrument, let alone a violin, and I do know that I consistently played sharp. But I think I can even detect this in the hands of a Pinchas Zuckerman or an Isaac Stern, in some pieces of music, especially where very high pitches are bowed very rapidly. Cheers, - DM [BTW... that was very interesting about the Cellist's dislike of open strings. It makes sense, what you say, about not being able to add any expressiveness with vibrato or string damping.] [This message has been edited by David McClain (edited 23 July 2003).] 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.