As a final year Electronics with Music student at Glasgow University I have a strong interest in the application of modern technology for the production of music. Csound is one of the programming languages we are taught as part of a Software Synthesis and Composition Systems course (SS&CS). It can produce some amazing sounds and does not require a degree in electronics to use, although it can be helpful!
For this piece of electroacoustic music I decided to use some of the more recent synthesis techniques that we have been introduced to. These include Granular Synthesis, Waveguides and Frequency Modulation. In addition, I also wished to experiment with some of the ideas we have been shown concerning cellular automata and algorithmic composition. Five instruments were created to use during the piece and an explanation of each one is given below.
The first synthesis technique I experimented with was Granular Synthesis. I used five fof generators included in Csound to recreate the vowel sounds that are produced by the human voice. Once I had done this, I then altered some of the parameters to see how the sound could be granulated. I discovered a lot of interesting effects that could be made to the sound but the time consuming task of having to continually change large quantities of numbers meant that there was little time to actually hear the vast range of sounds the instrument could produce. For this reason I purposefully made an orchestra file with a huge amount of functionality built in. My idea was to have a score file that whilst having a lot of p-fields would allow the composer to quickly affect the nature of the sound by altering comparatively few numbers.
As part of this functionality the composer can choose to morph between 5 different vowel-like sounds simply by entering their order into the score file. The data for each of the five vowels is stored in a number of f-tables. A complex indexing system ensures that the data is placed into the correct parts of the envelope functions in the orchestra file at compilation-time.
The sound I produced for my piece seems at first like water being poured into a bottle but then human laughter appears from nowhere. This is caused by adding a vibrato element to the sound as the granulation becomes finer and the vowel sounds emerge as they are normally heard.
The second instrument in my piece is intended to sound like a bell. The Additive Synthesis technique could be used to produce a bell sound. The problem with this technique, however, is that it relies on the superposition of a large number of partials, each with its own oscillator, whose amplitudes decay with time. I felt that a more elegant method of creating the same effect would be to use the logistic equation.
Xnew=rXold(1-Xold)
This equation can be implemented in Csound by using a delay line and changing the value of the variable r (of the above equation) as time goes on. If the value of r steadily decreases from an initial value of 3.56 the output of the equation falls through a series of bifurcations where it oscillates firstly between 16 values then between 8, 4, 2 before finally settling on a steady value. By applying the output of the equation to the frequency parameter of an oscillator it is therefore possible to simulate the decaying away of the partials characteristic of a bell sound. The frequency content of the sound will be high to start with and then it will reduce with time. It is important to change the value of r in sync with the recursion of the logistic equation to prevent the numbers in the delay line from becoming distorted. Additional reverb helps to make the sound less dry.
As an experiment to determine the capabilities of Csound I used a cellular automata to drive the modulation indices, amplitudes and modulation frequencies of a set of foscil generators. I had no idea what the final sound would be like but I hoped the cellular automata algorithm would produce something interesting.
I initially wanted to implement the cellular automata rule-set shown below, for a row of eight cells, at the control rate, but I then realised that it would be much simpler to implement only the first few evolutions of a row of 8 cells by using i-rate variables.
The cellular automata rule-set:
111 = 0
110 = 1
101 = 0
100 = 1
011 = 1
010 = 0
001 = 1
000 = 0
The implemented procedure is as follows:
A row of 8 cells, each with the value 0 or 1, are set up as i-rate variables. Conceptually these can be thought of as being in a line as such:
0 1 1 0 1 1 1 0 (the first cell can be regarded as the leftmost in this line)
The state of each cell is dependent on its current value and the current values of its neighbours, with the 1st and 8th cells considered as being adjacent. Hence the value of the 1st cell is dependent on its current value and the current values of the 2nd and 8th cells, the value of the 2nd cell is dependent on its current value and the current values of the 1st and 3rd cells, etc. All of the cells are evaluated simultaneously and the next generation of 8 cells is produced. The equation to derive the next state of each cell is as follows:
cell(x) = 1-sqrt(abs(cell(x-1)+cell(x+1)-1))
This equation mathematically maps the current state of three neighbouring cells onto a new number, either a 1 or a 0, for the middle cell, cell(x), according to the rule-set shown above. In my program I have evaluated 4 generations of cells from the first set of 8 whose values are entered randomly into the score file.
Using the 5 sets of 8 cells thus produced I then created envelope functions which drove the modulation indices, amplitudes and modulation frequencies of a set of foscil generators.
The sounds produced by this technique are very similar but they evolve slightly differently due to the different initial values entered in the score file.
Here a quasi-cellular automata algorithm has been used to drive the parameters of foscil generators in a manner similar to that for the cellular.orc instrument (see above). By quasi-cellular I mean that the row of cells is not evaluated simultaneously but the evolution of each cell in calculated in turn. A definite pattern can be heard in the sound as the numbers go through a sequence of changes. By entering different initial values for the k-variables variations on the sound can be produced
To produce a wind-like sound I used the logistic equation as for the bell.orc instrument (see above) but I varied the value of the variable r at the control rate. By doing this the logistic equation is not being used as it should be. The values for Xold and Xnew are effectively `shuffled' in the delay line and distortion results. This technique could be regarded as a type of Waveguide synthesis as the numbers in the delay line are related by the logistic equation and are not simply random. To this sound I added stereo reverb and implemented random panning of the dry and reverberant sound about the left and right channels.