TC Synth Tutorial Technical Essay
Completed as part of Music Technology and Computer Music Masters at Leeds University Submitted 2 September 2009
Synthesis Feature Set Synthesiser Building Software
5 6 7 9 9 10 11 11 19
Research and Development
Sybil Definition of Terms Audio Problems in MaxMSP Solutions to Audio Problems Lookup Tables v Generative Oscillators
Final Project Implementation
Main Screen Tab 1. Introduction Tab 2. Adding Tones Tab 3. Envelopes Tab 4. Ring Modulation Tab 5. Amplitude Modulation Tab 6. Subtractive Synthesis 1: Waveforms Tab 7. Subtractive Synthesis 2: Filters Tab 8. Frequency Modulation 23 28 30 34 40 43 45 46 48 51 53 2
Project Evaluation Bibliography
Journals and Online Publications
Appendix A e-Learning in Music and Music Technology Appendix B Pros and Cons of Various High Level, Object Oriented Audio Programming Environments for this Project Appendix C Glossary of Terms Describing the Timbre of a Monophonic Synth Tone Appendix D Links to Posts on the Max Forum Appendix E Images Modified for pictctrl Objects Modified Images for the Tutorial 66 65 63 61 59 55
This technical essay details my work on creating the TC Synth Tutorial, an accessible, appealing and interactive guide to musical synthesis.
The reason and perspective for this project is mainly due to my position as a Music and Music Technology Lecturer at Barnsley College, a 16+ (First Diploma, National Diploma, Diploma and A-Level) post-compulsory education provider. I am also a performing musician, songwriter and producer, with a growing interest in synthesis.
This project was developed with a solid background awareness of the different types of e-learning: that is, learning using computer systems. As a technology, e-learning is still rapidly evolving into its own distinct concept, in a way that seems similar to how email was regarded about fifteen years ago. e-Learning can be separated into four areas: offline applications; free online applications; commercial online applications; and online networks. An understanding of these areas makes it clearer to see how the huge potential and variety of e-learning approaches link together. (A detailed discussion of these four areas can be seen in Appendix A.)
It is evident that the widespread growth of music technology/computer music as an educational subject has been almost entirely due to the development of cheap and powerful computers. Despite this, there are precious few e-learning resources for music technology apart from the programs used to teach it, for example ProTools and MaxMSP.
With this in mind, I decided to program an application to serve two main functions: 5
to teach the basics of music synthesis, as a foundation to undergraduate study and general resource to promote enthusiasm in learning synthesis; to offer a user-friendly and accessible, basic synthesis engine that looks and sounds immediately appealing to the technologist and layperson.
I will initially develop this as an offline application, so that I can concentrate on the synthesis and tutorial elements. (See Appendix A for a more detailed explanation, and for examples of online and offline applications, as relevant to music e-learning.) However, I hope to be able to transfer the program online, at some point, as a free online application to be fully accessible by anyone.
Synthesis Feature Set
The idea for synthesis types and method of teaching is to use a historical approach to teaching basic synthesis. The topics are as follows: • • • • • • Basic Introduction to Sound: the Time and Frequency Domain; Before Synths: Organs and Adding Tones; Envelopes; Amplitude Modulation and Ring Modulation; Subtractive Synthesis: Basic Waveform Types and Filters; FM Synthesis.
As a synth basics tutorial, these topics would serve to interest students in the subject and its fundamentals, but if possible I would like to expand the project to cover: • • • Lookup Tables and Waveshaping; Granular Synthesis; FOF Synthesis.
Synth Building Software The first technical consideration in realising this project was, which software I will use for programming the synths. The Table in Appendix B covers the pros and cons of the various options available.
Out of all of these programming environments, MaxMSP was the best suited because one of the most important parts of this project is to be able to create a GUI (Graphical User Interface), that is immediately appealing. Arguably, in terms of synthesis as opposed to interactive music, the strongest feature of MaxMSP v.5 is the ease with which one can program an immediately appealing GUI.
It is worth noting that Reaktor has the reputation of being able to produce much better sounding synths than MaxMSP, but I think that the limitations in GUI development in Reaktor outweighs it’s sonic advantages. It is clear that with its quality of support and widespread use in education, MaxMSP will be the most practical option.
Because of this, one of the biggest challenges of the project, was to make synths tones that ‘sound good’ in MaxMSP. It is clearly necessary to define what makes a synth tone ‘sound good’ in hard scientific terms. I plan to do this in two steps: 1. Define the problems apparent with basic MaxMSP patches (a program in MaxMSP is referred to as a patch), in contrast to clearly defined ‘good sounding’ attributes of synths known for their sound quality. 2. Develop ways to implement solutions to these problems: define and engineer these ‘good sounding’ attributes into the patches making the tutorial.
Research and Development
A good example of an existing synthesis tutorial developed with MaxMSP is Sybil (Synthesis by interactive learning), created by Michael Clarke, Ashley Watkins, Mathew Adkins and Mark Bokowiec at Huddersfield University. This was completed in 2004 using MaxMSP v.4 and is available (at the time of writing), as a downloadable OSX application at http://www.hud.ac.uk/mh/music/sybil/index.htm.
Sybil is a comprehensive synth tutorial with an Introduction Module (covering Oscillators, Envelopes, Additive Synthesis, Amplitude and Ring Modulation and Simple Frequency Modulation), a module covering FOF and Granular Synthesis, and a module with an analysis of the 1980 Jonathan Harvey piece ‘Mortuos Plango Vivos Voco’.
A screenshot of the Introduction Module of Sybil is shown in Figure 1.
The instructional element of Sybil is very good; the text is able to be far more concise than a standard textbook due to the interactive audio examples forming the main part of the tutorial. Its GUI has a very standard ‘MaxMSP v.4’ look and feel except for its spectrum analyser, which is much clearer than the stock MaxMSP Spectroscope. (It is a scope~ object fed with a set of windowed fft~ objects). However, its sound is a good example of the poor synthesis sound achieved with basic MaxMSP programming. Sybil, therefore, is a useful case study for the audio drawbacks inherent in basic MaxMSP programming. 9
Figure 1 Screenshot of Sybil (Introduction Module)
Definition of Terms
In developing a definition of both ‘good’ and ‘bad’ sounding synth attributes it is clear that there are a host of other, potentially subjective, terms and their antonyms used to describe sound, for example: warm/cold, clear/muddy, smooth/harsh, lush/thin. While the use of these terms as ‘good’ or ‘bad’ can be dependent on context, it is possible to group words generally used for ‘good’ and ‘bad’ (as above, respectively). These are used in many audio environments (particularly sound recording) but in this report I will be discussing their use specific to monophonic synthesis tones. The glossary of terms describing the timbre of a monophonic synth tone can be seen in Appendix C.
Audio Problems in MaxMSP
As stated in the introduction, I needed to define the problems apparent with basic MaxMSP patches, in contrast to clearly defined ‘good sounding’ attributes of synths known for their sound quality. There seem to be two main areas of problems common in basic MaxMSP patches:
1. High frequency glitches in turning audio on and off, switching between oscillators, and fast variations of frequency and amplitude. 2. Basic oscillators and filters have a ‘harsh’ sound compared with Reaktor or SuperCollider.
Solutions 1. High frequency glitches in turning audio on and off, switching between oscillators, and fast variations of frequency and amplitude. The solution to the glitching of transitions in MaxMSP is relatively simple: using a combination of linear and logarithmic/exponential ramps (line~ and curve~ respectively) it is possible to smooth out the transitions. Figure 2 shows my initial patch of this idea, which successfully smoothes out all transitions.
Figure 2 Patch to Smooth Transitions of a Simple Saw / Sine Synth (inc. Subpatches)
2. Basic oscillators and filters have a ‘harsh’ sound compared with Reaktor or SuperCollider.
I was unable to discover a conclusive solution to the harsh oscillators or filter sound of MaxMSP, as this is a quite massive undertaking, one that could easily form a project in its own right. However, I did manage to discover some interesting alternative methods to creating better sounding oscillators and I hope to both build on this research and do the same with filters.
I started by looking at the basic core oscillators in Reaktor and it was immediately clear that the programming paradigm of Reaktor is totally different to MaxMSP. Reaktor, particularly v5 with its lower level ‘core’ functionality, takes more of a Digital Signal Processing engineering approach and tends to not suffer with the irregular timing like MaxMSP does. On the other hand MaxMSP has more of a programming language feel, which allows it to be far more flexible.
I went through the core tutorial, built the basic sawtooth synth and compared that to the multiosc synth (in the core building blocks) using a 440Hz tone. As to be expected from a saw with no interpolation at its falling edge, it sounded much ‘buzzier’ and ‘harsher’ than the multiosc. It sounded quite similar to the MaxMSP object phasor~.
The multiosc still had some slight top end ‘fizzyness’, due to a small amount of aliasing, but when compared back to back with the tone from the MaxMSP object saw~ (the bipolar, apparently anti-aliased sawtooth object) at the same meter levels, the multiosc had far more energy in the mid range and about the same amount of ‘fizzyness’. Because of this, at the same overall perceptual loudness, the multiosc sounded much warmer and smoother.
As you can see in Figure 3, the spectral content confirms the initial and expected findings in comparing the phasor~ saw~ and Reaktor tutorial plots. However, comparing the saw~ spectrum (MAX SAW) to the multiosc spectrum (RKT MOSC), the spectrum is similar, except for the very top end, where the saw~ plot tails off at the Nyquist frequency. This is surprising, as one would expect a warmer and smoother sound to have less top end evidence of aliasing. Looking at the plots alone, one would think that the saw~ should be easily the best sounding, but it is not. Figure 3 Spectral Content of the Four Tones Discussed
The Reaktor ensemble that I used for comparing the tutorial sawtooth and multiosc sawtooth can be seen below in Figure 4.
Figure 4 Ensemble to Compare the Tutorial Sawtooth and Multiosc Sawtooth (Plot Showing Tutorial Sawtooth (Note vertical falling edge))
The two important elements in how Reaktor creates the sawtooth and the other multiosc oscillators are: 1. the absence of lookup tables; and 2. a system of anti-aliasing, or low pass filtering in the time domain. In broad terms, the edges of the waveform rounded off by interpolation algorithm rather than a digital filter.
An analysis of the elements that make up multiosc saw shows that it uses a basic accumulator to create the ramp of the sawtooth and some interesting interpolation at the falling edge (the anti-aliasing).
The accumulator uses what Reaktor refers to as the speed increment (inc), which is the amount that the wave should increase every sample if it is to go from -1 to 1 in the 15
duration of one period. This is shown mathematically as inc=2xF/Fs, where F is the frequency of the desired note and Fs is the sample frequency (shown in the Reaktor structure as SR.R). The modules creating inc can be seen in the top left of Figure 4 as can the accumulator which is the macro Phase2. The interpolation is carried out by the macro SawAA, (standing for anti-alias, although it does not fully remove aliasing as shown in Figure 3). SawAA can be seen as part of the saw module and in its own structure window in Figure 5. This works by triggering an equation at the maximum and minimum step of the sawtooth, which smoothes the falling edge.
The equations, (interpreted directly from Reaktor, hence the cumbersome form), are: maximum value = ((((1-|i|) - ph)/|i|) * |(((1-|i|) - ph)/|i|)|) + ph minimum value = ((((|i|-1) - ph)/|i|) * |(((|i|-1) - ph)/|i|)|) + ph Where |i| is the absolute value of inc, and ph is the result of the accumulator, i.e. the amplitude of the saw wave until interpolation.
Figure 5 The Structures Making Up the Relevant Elements of the Multiosc Saw Oscillator (Plot Showing Multiosc Sawtooth (Note slightly curved falling edge))
The difference in approaches to generating a sawtooth can be seen quite clearly when considering the waveforms in the time domain. (See Figure 6.)
Figure 6 Time Domain Representation of the Four 440Hz Tones Discussed: MaxMSP Phasor~ (no anti-alias), MaxMSP Saw~, Reaktor Multiosc and the Reaktor Tutorial Sawtooth (no anti-alias), Respectively
It has proved a significant challenge to implement this system of smoothing in MaxMSP, as the good sample-by-sample timing is essential. However, with overdrive enabled I found the patch shown in Figure 7 was able to smooth the transition using a basic intuitive interpolation y = x – (0.25 – inc) and y = -x + (0.25 – inc).
Figure 7 Initial Sawint Patch to Mimic the Mechanism of SawAA
Lookup Tables v Generative Oscillators
The use of lookup tables is traditionally accepted as a far more practical method to produce waveforms than more generative alternatives, mainly due to the inherent computational efficiency. Because of this there is a huge body of work based around optimising this approach and, as such, it makes sense that lookup tables make up MaxMSP’s default approach to generating waveforms. However, with computer processing power on the exponential increase, it now seems a more than viable alternative to generate waveforms mathematically, rather than reading and interpolating from a lookup table.
As demonstrated earlier, Reaktor makes heavy use of a sample-by-sample generative method of sawtooth waves. It follows that square and triangle waves would take a 19
similar amount of processing power to generate. Sine waves, however, prove a much heavier demand on the host computer to generate, but are generated quite effectively without use of a lookup table in the multiosc macro.
It is relatively simple to generate raw square, sawtooth and triangle waves using a small amount of signal maths as Figure 8 shows.
Figure 8 Basic Generative Waveforms in MaxMSP
MaxMSP does provide a cos~ generating object as an alternative to cycle~, the default 512 sample cosine lookup table, but seems to be mainly used for LFO (low frequency oscillator), generation rather than audio rate. As sine waves are going to make up the bulk of the oscillators in the tutorial I compared the two methods using the patches in Figure 9.
Figure 9 The Generative and Lookup Table Patches for Generating Cosine Waves
Interestingly, in a good quality listening environment the difference was imperceptible for 440Hz and 880Hz. It was only at 1320Hz where there was a slight harshness to the lookup table’s tone. Figure 10 shows frequency response plots comparing the wave files generated by the different patches, where you can see a slightly jagged area between 1k and 1.32K on the lookup table sine plot (top right).
Figure 10 Frequency Plots of cycle~ object at 880Hz and 1320Hz, and the cos~ object at 880Hz and 1320Hz
Whilst this was not as clear cut as expected, I decided that it would be worth avoiding the use of lookup tables in the tutorial.
Final Project Implementation
The design of the tutorial is a single window containing a main screen with tabs at the top, global controls, a frequency domain display and a time domain display. The largest part of the window is a pane (a bpatcher), the contents of which are selected by tabs at the top of the main window. Figure 11 shows the tutorial window containing the introduction pane. The design is intended to be as easy to follow as possible and has been tested successfully on several people who did not consider themselves technology experts. Figure 11 Main Screen in Presentation Mode Showing Introduction (Audio and Displays Off)
The top of the main screen uses the tab object to send offset messages to the bpatcher via a select, which causes the bpatcher to display different areas of the nested bpatcher (SynTutpages14.maxpat). This can be seen in patching mode in Figure 12.
Figure 12 The Top Elements of the Main Screen in Patching Mode
The bang on the right goes to the right inlet of bpatcher, which turns everything off whenever a page is changed.
At the bottom of the main screen are the main controls and displays. These are shown in patching mode in Figure 13. The large black rectangle is a linear frequency spectrograph displaying frequencies from 80Hz to 10kHz. This is a compromise between seeing the detail of the lower frequencies, (for example in the Ring Modulation and AM explanations), and seeing higher frequencies, (for example those present in square waves).
Figure 13 The Bottom Elements of the Main Screen in Patching Mode
To the right of the spectrograph is a jit.pwindow displaying the contents of p jitscopegen (this is shown in Figure 14). p jitscopegen generates the plot for a jitter oscilloscope, using jit.catch and jit.graph to plot a filled and triggered scope. I developed this because using the standard MaxMSP scope~ was angular and jerky. Compared back-to-back, the jitscopegen gives a much cleaner display than the scope~.
Figure 14 p jitscopgen
Audio control, main volume and the messages to change the background colour of the audio on/off button are managed in p ongaincol. This is shown in Figure 15.
Figure 15 p ongaincol
The audio on/off has a curved slope for smoothing on and off transitions (as well as each oscillator). This can be seen on the right of Figure 15. All audio is transferred using the send~ and receive~ objects with the named argument audio. This is kept simple as everything is in mono and every change of tab turns the DSP (digital signal processing), of every oscillator off (using the mute~ object or mute message in the poly~s), thus stopping the tones combining and clipping. However, there is also a clip~ object to protect amplifiers and speakers just in case the audio peaks (the biquad~ in the Sub2: Filters page could be made to cause this). In the centre of Figure 15 is the inlet for the volume dial, which controls p gain. This is a patch that gives the same exponential scaling as the gain~ slider. (Conversations on the MaxMSP forum comparing the scale~ and expr objects can be seen in the link in Appendix D). This patch can be seen in Figure 16.
Figure 16 p gain
The rest of the tutorial is taken up by the bpatcher SunTutPages14, a very wide patch. This is shown in Figure 17. I chose layout of the bpatcher to be: the visible text and controls shown over the blue panel, and the area below for the tone generation and control. (Although in some cases it was easier to use the portion between the panels.)
Figure 17 Full View of the Entire SunTutPages14 bpatcher
The rest of the final project implementation section will be split into the eight different regions selected by the tabs at the top of the main page.
Tab 1. Introduction
The bottom of the Introduction area of the bpatcher contains the patch inlets and basic reset control as well as the start up setting. This can be seen in Figure 18.
The blue panel area in Figure 18 shows the unlocked view of the Introduction area. Everything here is included in the presentation except the mtof object. Initially I was using patch chords and send / receive objects to communicate with the objects and patches below, but I found that the more advanced pattr family of objects allowed me to drastically un-clutter the blue panel area.
Figure 18 Introduction Area of the bpatcher
The toggle to turn the sine wave on is a pictctrl object using an image of a sine wave that I created by modifying public domain images. All images used and created for the tutorial can be seen in Appendix E.
The patch p sineintro and the nested patcher p rawsine generate the initial sine wave for the Introduction. These can be seen in Figure 19.
Figure 19 p sineintro and p rawsine
Tab 2. Adding Tones
The Adding Tones area can be seen in Figure 20. It consists of sample triggers at the top, a body of explanation text and controls to add six sine wave oscillators at the bottom.
Figure 20 Adding Tones Area of the bpatcher (Unlocked, Patching Mode)
The images of the Pipe Organ and the Hammond Organ are used to trigger the first and last three seconds respectively of an AIFF file that I created using software sampler instruments in Logic Pro. This is done with embedded cues in the p organs patcher. The patches p pipedel, p hammdel and p organs are shown in Figure 21.
Figure 21 p organs, p hammdel and p pipedel
At the bottom of the Adding Tones blue panel area are the controls for the six sine wave generators. These sine waves are generated by a poly~ object running polysineadd~. This is nested in p sineadd, which itself is nested in p addtogcont. These patches can be seen in Figure 22.
Figure 22 p addtogcont, p sineadd and polysineadd~
The patches in Figure 22 make use of the pattr objects but for the individual settings I decided to stay with patch chords and sending messages to a poly~ object using the target $ method. Figure 23 shows p add1 and p add2 (p add2, padd3, p add4, p add5 and p add6 are identical except for the target number (of their respective oscillator)).
Figure 23 p add1 and p add2
The Adding Tones area uses the preset and preset text method used on most of the other pages. Instead of using elaborate pattr storage it was simpler to link a preset object to a number box selecting a line from a text file and outputting that to a comment box. This configuration can be seen on the left hand side of the blue panel area in Figure 20. All preset comment boxes were then coloured green to distinguish them.
Finally, I introduced a notein object and linked that to pattr addf, which in turn was bound to the frequency of the first oscillator.
Tab 3. Envelopes
The Envelopes area is the busiest of the areas in the bpatcher, mainly due to the two sets of presets and the function windows needed for the individual oscillators. This can be seen in Figure 24.
Figure 24 Envelopes Area of the bpatcher (Unlocked, Patching Mode)
The first sine wave generator is generated by the p 1enve and p sinenve1 patches, which are shown in Figure 25.
Figure 25 p 1enve and p sinenve1
The function envelope is set by the preset object and cleared by p fnclr and its labels are generated and removed by p adsrtags. These can be seen in Figure 26.
Figure 26 p adsrtags and p fnclr
The envelopes at the bottom of the blue panel area are managed by the p adsr2 patch, which sends the controlling messages to the receive objects r fn2, r fn3, r fn4, r fn5, r fn6 and r fn7 on the right hand side of the blue panel area. p adsr2 can be seen in Figure 27.
Figure 27 p adsr2
Both preset text boxes are created with the same method as in Adding Tones.
The six oscillators are essentially the same as the six oscillators in Adding Tones, except the amplitude of each oscillator is controlled by pattr enve feeding a line~ object. The messages to pattr enve can be seen in the bottom left of Figure 24 going into the pattrhub. The patches generating these sine waves (p sineenve and polysineenve~) can be seen in Figure 28.
Figure 28 p sineenve and polysineenve~
As in the Adding Tones area, the on/off and frequency information are sent from the patchers under each pictctrl and p enve2, p enve3, p enve4, p enve5 and p enve6 are the same except for their respective target number. Because of that only p enve1 and p enve2 are shown in Figure 29.
Figure 29 p enve1 and p enve2
Lastly for the Envelopes tab, at the bottom right of the bpatcher area (as you can see in Figure 24) there is an access to the client window of pattrstorage and the pattrmarker object to help keep tabs on the large number of pattr objects in the patch.
Tab 4. Ring Modulation
In contrast to the Envelopes and Adding Tones area the Ring Modulation area has only two oscillators and a single preset object with text. This can be seen in Figure 30.
The two oscillators are multiplied together in standard RM fashion in the p rmoscs patch below the blue panel. This patch and its nested patches can be seen in Figure 31.
Figure 30 Ring Modulation Area of the bpatcher (Unlocked, Patching Mode)
Figure 31 p rmoscs, p rawsinermmod and p rawsinermcar
Tab 5. Amplitude Modulation
For the Amplitude Modulation area I decided to use a matrix object for switching between the Bipolar and Unipolar waves. This can be seen in Figure 32.
Figure 32 Amplitude Modulation Area of the bpatcher (Unlocked, Patching Mode) p amoscs1 and p unipolsine440
Instead of driving the matrix with a matrixctrl object I used the toggles to trigger the messages instead. While this only gives a linear transition between sounds there are no transients and the difference is hard to perceive.
The arrangement of the oscillators in amoscs2 is very similar to the Ring Modulation area, except for the offset, which is fed back to the page for displaying. This can be seen in Figure 33.
Figure 33 p amoscs2, p rawsineammod and p rawsineamcar
Tab 6. Subtractive Synthesis 1: Waveforms
The Subtractive Synthesis 1: Waveforms area is a large version of the matrix switching used in the Amplitude Modulation area. This can be seen in Figure 34.
Figure 34 Subtractive Synthesis 1: Waveforms Area of the bpatcher (Unlocked, Patching Mode)
The switching makes use of the variable gain setting in the matrix object and leaves the transition at the default 10ms. The oscillators used in p sub4oscs1 are the same as the generative patches shown in Figures 8 and 9.
Tab 7. Subtractive Synthesis 2: Filters
Figure 35 shows the patching mode for the Subtractive Synthesis 2: Filters. This consists of a single noise generator and a matrix controlled four oscillator switching setup, similar to the previous area. The difference is mainly in the managing of the biquad~ for a filter.
Figure 35 Subtractive Synthesis 2: Filters Area of the bpatcher (Unlocked, Patching Mode)
Unfortunately, the amount of time that the development of the tutorial was taking meant that I was not able to work on a more warm or rounded filter than the standard biquad~. So I smoothed the frequency transition and built on the strengths of the highly visual elements of the filter graph. The filter graph modes are controlled by a tab object, which is managed in the top left of p sub2. This is shown in Figure 36.
Figure 36 p noise1, p sub2osccontrol and p sub4oscs2
Tab 8. Frequency Modulation
The Frequency Modulation area uses two different pairs of sine waves to effectively do the same thing, but each is controlled and displays its parameters in different ways: the first to show simple FM with modulation depth and the second to show the modulation index and harmonicity ratio. This is shown in Figure 37.
Figure 37 Frequency Modulation Area of the bpatcher (Unlocked, Patching Mode)
The arrangement of the first pair of oscillators demonstrating simple FM can be seen in Figure 38 below. The unusual element is the display of the mod frequency. This shows what is happening to the carrier frequency and is useful to get the concept across (but clearly not much use when the Modulator is above 5Hz).
Figure 38 p fm1, p fm1car and p fm1mod
The second pair are re-arranged to incorporate the display of the previous number boxes, but in this instance they only display, rather than control, (hence the use of other
snapshot~ objects, which turn on when the modulator is unmated). This is shown in Figure 39.
Figure 39 p fm2, p fmcar and p fmmod
My aim for this project was for it to be an accessible, appealing and interactive guide to musical synthesis. As such, the TC Synth Tutorial is all of those things. It is colourful, has immediately interesting applied concepts and is extremely interactive. I am particularly glad of the experience in getting to grips with some of the advanced MaxMSP programming techniques and I am indebted to the help of my tutors and users of the MaxMSP forum.
I think the main weakness of the Tutorial is that I did not have time to experiment with alternatives to the standard biquad~. Reviewing the Tutorial, I think that this is the ‘least good’ sounding aspect and one that I intend to work on to rectify in what I hope will be an even better version 2.
It was also a shame that I was unable to finalise the sawtooth oscillator modifications in the time domain. Because of that I decided to leave it out, as it would not have been a true comparison to the square or triangle wave.
I underestimated the amount of time that it would take to program and debug the Tutorial but the process has given me an unexpected insight into synthesis with MaxMSP and a solid introduction to Jitter.
My personal development of this project will be to research and develop filtering solutions and classic analogue synth characteristics – another aspect that I had hoped to bring to the Tutorial. The development of the bpatcher elements of the Tutorial does seem to follow a general trend in cleaner patching as it goes on. After the Envelopes page my ability to integrate pattr objects clearly helps to produce much more effective 51
patches. While the Adding Tones and Envelopes areas are fully functional and so far, after extensive debugging, have proved glitch/problem free, I would definitely like to give them an overhaul as I can see several far more elegant ways to implement the pages.
I think that it would be particularly useful to see more advanced synthesis topics demonstrated in such an accessible and interactive way. I would be happy for other students to develop compatible bpatchers containing topics such as waveshaping, FOF and granular synthesis. This approach/format, or a version thereof, could also be applied to other areas of computer music such as sampling, advanced EQ principles and effects without much trouble.
The research into filtering in the time domain, while not directly useful in this Tutorial, has produced some interesting and surprisingly applicable results. I remain convinced that the ability to program in this more DSP oriented way is one of the main reasons that Reaktor has a better sound than MaxMSP
I intend to use the Tutorial to teach the basics of synthesis in my Music Technology and look forward to seeing how it bears up under the stress testing of a BTEC classroom. Depending on the feedback of the class of 2009/2010, I hope that it will become a mainstay of the Sound Creation and Manipulation Unit. After creating multiplatform versions of the Tutorial I plan to make it available online under a creative commons licence, in the hope that it will prove useful to other teachers or enthusiasts.
Anderton, Craig, Midi for Musicians, (New York: Amsco Publications, 1986). Backus, John, The Acoustical Foundations of Music, (London: J. Murray, 1970). Blum, Frank, Digital Interactive Installations: programming interactive installations using the software package Max/MSP/Jitter, (Cologne: VDM Verlag, 2007). Campbell, Murray, and Clive Greated, The musician's guide to acoustics, (London: Dent, 1987). Chaudhary, Amar, Band-Limited Simulation of Analog Synthesizer Modules by Addtive Synthesis, Proceedings of the 105th AES convention (San Francisco: AES, 1998). DeFuria, Steve, The Secrets of Analogue & Digital Synthesis, (Pompton Lakes, NJ: Third Earth, 1988). Desain, Peter, and Henkjan Honing, Music, Mind, and Machine: Studies in Computer Music, Music Cognition, and Artificial Intelligence, (Amsterdam: Thesis, 1992). De Poli, Giovanni, Aldo Piccialli, and Curtis Roads, eds, Representations of Musical Signals, (Cambridge, MA: MIT Press, 1991). Deutsch, Herbert A., Synthesis: an introduction to the history, theory & practice of electronic music, Rev edn (Sherman Oaks, CA: Alfred Pub. Co., 1985). Dodge, Charles, and Thomas A. Jerse, Computer Music Synthesis: Composition, and Performance, 2nd edn (New York: Schirmer Thomson Learning, 1997). Kahrs, Mark, Brandenburg, Karlheinz, eds., Applications of digital signal processing to audio and acoustics, (London: Kluwer, 1998). Marven, Craig, and Gillian Ewers, a simple approach to: Digital Signal Processing, (Oxford: Texas Instruments, 1994). McClellan, James H., DSP First: A Multimedia Approach, (New Jersey: Prentice Hall, 1998). 53
Miranda, Eduardo Reck, Computer Sound Design: Synthesis Techniques and Programming, (Oxford: Focal, 1998). Moore, F. Richard, Elements of Computer Music, (New Jersey: Prentice Hall, 1990). Roads, Curtis, The Computer Music Tutorial, (Cambridge, MA: MIT Press, 1996). Rowe, Robert, Interactive Music Systems: Machine Listening and Composing, (Cambridge, MA: MIT Press, 1993). Rorabaugh, C. Britton, DSP Primer, (New York: McGraw-Hill, 1999). Winkler, Todd, Composing interactive music: techniques and ideas using Max, 2nd edn (Cambridge, MA: MIT Press, 2001).
Journals and Online Publications
Clark, James, J., Advanced Programming Techniques for Modular Synthesizers, unpublished online-book, (Montreal: McGill University, 2003), <http://www.cim.mcgill.ca/~clark/nordmodularbook/nordmodularbook> August 2009]. Hoffman, Matt, and Perry R. Cook, ‘Real-Time Feature-Based Synthesis for Live Musical Performance’, proceedings of NIME (2007) <http://www.nime.org/2007/proc/nime2007_309.pdf> [accessed 29 November 2008]. Stilson, Tim, and Julius Smith, Alias-Free Digital Synthesis of Classic Analog Waveforms, proceedings from the 1996 International Computer Music Conference, Hong Kong, (Palo Alto: Stanford, 1996), <http://ccrma-www.stanford.edu/~stilti/papers/blit.pdf> [accessed 9 August 2009]. Valimaki, Vesa, and Antti Huovilainen, ‘Oscillator and Filter Algorithms for Virtual Analog Synthesis’, Computer Music Journal, 30.2 (2006), 19-31. Valimaki, Vesa, ‘Discrete-time synthesis of the sawtooth waveform with reduced aliasing’, Signal Processing Letters IEEE 12.3 (2005), 214-217. [accessed 05
e-Learning in Music and Music Technology
This appendix covers a discussion of the four areas of e-learning relevant to Music and Music Technology as mentioned in the Introduction: • • • • offline applications; free online applications; commercial online applications; online networks.
It is worth noting that the latter three categories have developed both because of increased broadband internet use and web 2.0 technology (a term describing the widespread use of dynamic websites (that is, websites that are more interactive, interesting and user-friendly)). Clearly the two go hand-in-hand, more complex and interesting functionality drives the demand for quicker connection speeds, and the quicker people’s connections become, the more this drives developers to make websites more complex and interesting.
Offline Applications Offline applications are programs, which run on the local machine, independently of the Internet. They are designed to be self-contained and therefore will be dependent on a specific computer and operating system. An example of an offline application for music e-learning is Musition, a music theory training program using visual and MIDI driven tests, or what is referred to as ‘drill based teaching’. Developed by Rising Software in Australia, it works best when connected to a LAN (Local Area Network – a small
collection of interconnected computers), where a teacher can manage the group and statistics that Musition outputs. The advantages of using this kind of program are that the computers can be disconnected from the Internet (and any possible access to its myriad distractions) and that the program is not dependent on an external server and the connection between it. In this instance, the software is accredited (although not by an examination board, but it has the validity of being part of Sibelius) and supported, an extremely important factor in education. The disadvantages are that this accreditation and support comes at a cost (£127). Plus the software is inherently not as up to date as an online application as the update process is a whole new installation, something handled much simpler by online applications.
Free Online Applications Free online applications are programs, which run remotely, on an internet server, and are accessed through a web browser (i.e., Internet Explorer, Chrome, Firefox, Safari) and can be used for free. An example of an online application for music e-learning is Nicci Adam’s http://www.musictheory.net. This is a completely free online resource, which makes extensive use of Flash and is programmed in php. The obvious and huge advantage of free online applications is their accessibility. Because they are free, anyone with access to a computer and the Internet can use them. However, at this time I am not aware of any free applications supported by any institution, so as well as being dependent on both the Internet connection and musictheory.net’s server, they lack the reliability of accredited software.
Commercial Online Applications Commercial online applications are, similar to free online applications, but you have to pay to use them. Technically, the only difference between free and commercial applications is that commercial applications need to ensure that access to the program 56
is restricted to people who have paid. This is normally achieved with username and password recognition. An example of a commercial online application is http://www.gigajamonline.com, an application that teaches how to play a popular music instrument by offering written and audio tutorials, using MIDI to check that the music is being played correctly. It works well for instruments that interface traditionally with MIDI, like keyboard and electric drums, but obviously less well for guitar or electric bass. The application does require the download of software needed to access and regulate the online content, then, it runs through a customised browser, thus allowing control of Internet access. The cost of the application/service is £3 a month for a single user, but this pays for accredited reliability (students can claim for OCN credits) and support. Again, the user is clearly dependent on both an Internet connection and GigajamOnline’s server working correctly.
Online Networks Online networks are websites that allow the user to communicate, or make use of resources within a particular group. There are two types of online networks, both having a huge impact on education: These are: social networks, for example, MySpace and Facebook; and VLEs (Virtual Leaning Environments). Social networks are websites allowing registered users to communicate and share photos, video and audio with other registered users. Examples of the most popular social networks are http://www.MySpace.com and http://www.Facebook.com. Together they have more than 190 million registered members. Social networks are normally free to join and generally make profit by advertisements running in banners outside the main content. The major disadvantage for education is that they are unregulated for most content except for obvious legal infringement. VLEs are websites that contain information and resources for learning. They are maintained by the respective learning institution and allow access to course information and materials, and communication with registered members. The two main providers of VLEs are Blackboard (a commercial VLE provider) and Moodle (an open source VLE). 57
As Web 2.0 technology progresses, VLEs offer increasing functionality, and although their use is limited to registered students by course, they can act as exceptionally useful educational tools if maintained correctly by all relevant teaching staff.
Pros and Cons of Various High Level, Object Oriented Audio Programming Environments for this Project
Environment Programming method MaxMSP 5: Graphical Pros Cons
Puredata 0.4: Graphical
• Very well documented and supported • Clear and user-friendly graphical user interface (GUI) • Largest user base • Can create standalone applications (and plugins) • Easy to create an application with a colourful, clear and modern GUI • Can integrate scripting languages in objects (Java, Csound, Chuck) • Open Source, free • Very similar to MaxMSP
• Very hard to make applications that sound as good as Reaktor or Supercollider • Relatively processor inefficient (slow) • Fairly expensive (£250)
Reaktor 5: Graphical
• Not built for real time synthesis • Whilst script is simpler than SuperCollider, it is still much harder to use than the graphical environments SuperCollider 3: • Needs little work to sound good • Hard to learn script syntax (once scripting language is learnt) • Support (and to a lesser Textual extent documentation) is 59
• Easy to get good sounds, (smooth oscillators and filters) • Well documented and supported • Good GUI • Fairly good GUI creator • Popular for dance music • Open Source, free • Simple scripting paradigm • Lower level, linked to the C language
• Poorly documented and supported • Poor GUI and no way to create a good looking GUI • Cannot create standalone applications • Cannot create a standalone application (will only run with Reaktor) • Very expensive (£400)
• Very processor efficient (fast) • Open Source, free • Well documented • Large user base • Can create good standalone applications
fragmented, as is forum/community based
Glossary of Terms Describing the Timbre of a Monophonic Synth Tone
(In order of importance and grouped with antonyms.)
1. Sufficient energy in the mid frequency range (200Hz-700Hz). 2. A moderately high proportion of even order harmonics.
1. Insufficient energy in the mid frequency range (200Hz-700Hz). 2. A low proportion of generally odd order harmonics.
1. Transitions that move in a pseudo-continuous fashion, without causing high frequency (>7kHz), audio artefacts/glitches (caused by transitions that are too fast) or slurring (caused by transitions that are too slow). 2. Not too much energy in the high frequency range (>7kHz). 3. A sufficiently low proportion of odd order harmonics, especially in the higher orders.
1. Transitions occurring too quickly, in extreme cases causing high frequency (>7kHz), audio artefacts/glitches. 2. Too much energy in the high frequency range (>7kHz). 3. An overly high proportion of odd order harmonics, especially in the higher orders.
A balanced frequency content, especially not too much energy in the mid frequency range (200Hz-700Hz), or low frequency range (<20Hz).
Too much energy in the mid frequency range (200Hz-700Hz), or low frequency range (<20Hz), so that it is difficult to make out what the sound is made up of.
A large amount of generally consonant overtones (e.g. even order harmonics), without too much energy high in the high frequency range (>7kHz).
An insufficient amount of generally consonant overtones.
Clean (dependent on context)
Devoid of many overtones.
Links to Posts on the Max Forum
Posts have not been reproduced as they are not my work but the discussions can be viewed online.
Initial post re audio tips with interesting discussion about lookup table sizes and alternatives to biquad~. making max MSP synths sound good... [message #168433] 19 March 2009 http://www.cycling74.com/forums/index.php?t=msg&goto=168578&rid=8295&S=d9685b adeb9ea38f61037e9bff99ea6b#msg_168578
Query about saw~, including useful links to the excellent nord modular book. How does saw~ anti-alias? [message #176948] 06 July 2009 http://www.cycling74.com/forums/index.php?t=msg&goto=177095&rid=8295&S=d9685b adeb9ea38f61037e9bff99ea6b#msg_177095
Query about creating a gain dial (as opposed to slider). dial problem, please help [message #177709] 21 July 2009 http://www.cycling74.com/forums/index.php?t=msg&goto=177709&rid=8295&S=d9685b adeb9ea38f61037e9bff99ea6b#msg_177709 Query about creating a jitter spectroscope. 63
jitter spectroscope...? [message #178200] 27 July 2009 http://www.cycling74.com/forums/index.php?t=msg&goto=178538&rid=8295&S=d9685b adeb9ea38f61037e9bff99ea6b#msg_178538
Pattr syntax query with interesting additive synth. using pattr in poly~ with separate functions to line~s [message #178878] 06 August 2009 http://www.cycling74.com/forums/index.php?t=msg&goto=178985&rid=8295&S=d9685b adeb9ea38f61037e9bff99ea6b#msg_178985
Another helpful pointer about using nested pattr objects.
pattr / subpatch query [message #179457] 19 August 2009 http://www.cycling74.com/forums/index.php?t=msg&goto=179489&rid=8295&S=d9685b adeb9ea38f61037e9bff99ea6b#msg_179489
Images Taken from the Internet to be Modified for pictctrl Objects
All taken from: http://commons.wikimedia.org/wiki/File:Simple_sine_wave.svg
Modified Images for the Tutorial
Images Created from Scratch