Tuesday, 28 October 2014

Voice 10 000 notes

Just creating, rendering or playing (what ever you want to call it) 10 000 notes in 3 minutes is one thing, making them sound together in a way that makes music sense and does not turn to mush is quite another.


In this piece there really are more than 10 000 notes in around 3 minutes. The resulting sound sometimes approaches a simultaneous poly note or vibrato but they are all separate notes. To get them to work together is not easy. A 'real' note is not just a tone but a complex sequence of tones and volumes. This is what makes individual notes stand out form one another. Consider playing the same note 10 times very quickly on a harpsichord compared to just playing it once letting it sustain.

Then there is the matter of different voices standing out form one another. A great composer like Vivaldi can help by making sure the different voices do not follow one another too closely. But, consider the main body of strings in this piece. We need to make something which sounds like an ensemble of strings playing together rather than just one. But then the lead which has to spiral about the rest must stand out in tone not volume. Just making it load would be a travesty.

Then we have the bass. Long slow notes with throbbing notes about and then middle pitches build on those. How to make that not turn into the sound of a ship's engine room? Well, here is the voicing code I used:

midi=midis[1]
doMidi(notesStart,notesEnd,notes,midi,orchestralOboe,
    vCorrect=1.0,
    pitchShift=1.000,
    qFactor=0.5,
    subBass=False,
    flatEnv=False,
    pure=False
)
postProcess()
doMidi(notesStart,notesEnd,notes,midi,upperAccent,
    vCorrect=0.3,
    pitchShift=2.000,
    qFactor=0.5,
    subBass=False,
    flatEnv=False,
    pure=False,
    pitchAdd=2.5
)
postProcess()

print "Channel 2"
midi=midis[1]
doMidi(notesStart,notesEnd,notes,midi,clarion,
    vCorrect=0.5,
    pitchShift=1.000,
    qFactor=1.0,
    subBass=False,
    flatEnv=False,
    pure=False,
    pan=0.6
)
postProcessTremolate(rate=4.5)

midi=delayMidi(midis[1],beat,64)
doMidi(notesStart,notesEnd,notes,midi,clarion,
    vCorrect=0.5,
    pitchShift=2.000,
    qFactor=1.0,
    subBass=False,
    flatEnv=False,
    pure=False,
    pan=0.4,
    pitchAdd=2.5
)
postProcessTremolate(rate=3.5)

for chan in range(3,10):
    print "Channel "+str(chan)
    midi=midis[chan]
    doMidi(notesStart,notesEnd,notes,midi,
        voice=viola,
        vCorrect=0.5,
        pitchShift=1.0,
        qFactor=0.5,
        subBass=False,
        flatEnv=True,
        pan=(float(12-chan)/9.0)
    )
    postProcess() 

print "Channel 10"
midi=midis[10]
midi=legatoMidi(midi,beat,128)
doMidi(notesStart,notesEnd,notes,midi,voice=orchestralOboe,  
    vCorrect=0.75,
    pitchShift=1.0,
    qFactor=0.5,
    subBass=False,
    flatEnv=False,
    pure=False,
    pitchAdd=0.0
)
postProcess()

print "Channel 11"
midi=midis[11]
midi=legatoMidi(midi,beat,128)
doMidi(notesStart,notesEnd,notes,midi,voice=clarion,  
    vCorrect=0.75,
    pitchShift=1.0,
    qFactor=0.5,
    subBass=False,
    flatEnv=True,
    pure=False,
    pitchAdd=3.5
)
postProcess()

print "Channel 12"
midi=midis[12]
doMidi(notesStart,notesEnd,notes,midi,voice=clarion,  
    vCorrect=1.0,
    pitchShift=1.0,
    qFactor=0.5,
    subBass=False,
    flatEnv=True,
    pure=False,
    pitchAdd=0.0
)
postProcess()

print "Channel 13"
midi=midis[13]
midi=legatoMidi(midis[13],beat,96)
doMidi(notesStart,notesEnd,notes,midi,voice=leadDiapason,  
    vCorrect=1.5,
    pitchShift=1.0,
    qFactor=1.0,
    subBass=False,
    flatEnv=True,
    pure=True,
    pitchAdd=0.0,
    pan=1.0
)
postProcess()
midi=delayMidi(midis[13],beat,128)
doMidi(notesStart,notesEnd,notes,midi,voice=trostPosaune,  
    vCorrect=2.0,
    pitchShift=0.5,
    qFactor=1.0,
    subBass=False,
    flatEnv=True,
    pure=True,
    pitchAdd=1.0,
    pan=0.0
)
postProcess()

Let us start with the bass (channel 13). This is where I started; bass notes are obscured by higher notes so it is important to work on these first, not last. Far from being the least important from a timbre standpoint, they are the most challenging because a low note has more overtones in the audible range.

So, my bottom notes are voiced using a 'trombone' sound. In this synthesiser I have used is actually a complex organ synth' so the sounds are based on organ pipes. Why Trost Posaune? It is names after a famous 18th century organ builder. One of his organs makes an amazing sound in the Posaune pipes which are rich and quite slow to start with a distinct inharmonic at the beginning. For the bass to have any chance of being detected with all those strings above, this sound was the obvious choice. I placed this one octave below the bass and then filled in the sound with a diapason at the the true bass pitch. This is one of the sounds from the principals of an organ. Here I call it leadDiapason as it is a bright and intense diapason. Doubling Posaunes would be too much, but this combination is the right mix of strength, power and purity for me.

Channels 11 and 12 pulse above the bass. To make this powerful and to give them enough colour to complete I use my 'clarion' voice. This is a trumpet like reed sound but with a bright unstable set of high overtones. When played low down, as here, it makes a warn but strong sound which blends with the lower posaune/diapason mix but does not disappear into it.

So far so easy. But how to make that rising tone which comes next in channel 10. It builds and build tension moving up in pitch and through harmonic sequences. This took a lot of experimentation. It has to really stick in the memory. I wanted a sound which is almost 'too much'; something which pushes the listener to the limit of acceptability and by so doing further enhances the tension which build inexorably during the early bars of this masterpiece. The pipe sound which does all these things for me is the orchestral oboe. I used it in this render of Bach's BWV 659 where the orchestral oboe is again sitting on the dividing line between overwhelmingly powerful and just crass.


OK, now we are into the main ensemble. This should be easy, but we need to be careful. Channels 3 to 10 are all string. They play largely the same notes. But just replicating them would be no good. Instead every instrument is played individually. I chose the viola stop from my pipe set. Then I placed the sounds across the stereo field. Note also that this organ synthesiser add some pitch shifting and tonal instability to every note so that we not only get 7 different stereo positions but the sound at each is unique and differs almost imperceptible form note to note.

Then there is that violin (in the original) which saws and swoops above everything else. What to do with this? Well - I chose a Clarion again for the shimmering intensity of its sound. But, this is an organ synth' not a string synth' and so simple pipes would be too brutal. Some tremulant to take the edge off helped a lot. But then it was too dull. A second Clarion one octave up and with a different tremulant helped. Nevertheless, this remains the least successful part of this render in my view. I would like to experiment with some alteration of the temperament in this voice to see it can make a more pure and sweet sound.

Finally we have the high accompanying channel 1. Here I used string pipe sounds. The strings on an organ are actually flue pipes which are very narrow. The viola sound I used the the mid channels is somewhere between a reed and a flue. I honestly find it more of a reed sound. But the 'string' voice is probably closer to a true organ string. Again, this voice was octave doubled.

Ah, but I have not given up all the tricks. Also, if you inspect the code, would will see that on the voices which are octave doubled there are non zero values for 'pitchAdd'. This is a detuning effect which is the basis of the organ's celeste sound. Each double voicing has a different celeste offset and each really helps liven and soften at the same time.  

No comments:

Post a Comment