Interactive Audio Effects ProcessingGareth R. Jones
Computer Science and Music2001/02
The candidate confirms that the work submitted is their own and the appropriate credit has been givenwhere reference has been made to the work of others.
I understand that failure to attribute material which is obtained from another source may be consideredas plagiarism.
(Signature of student) _______________________________________
i
Summary
This report deals with the subject of Digital Sound Processing effects plug-ins. The objective
of this project was to create D.S.P. effects plug-in with real-time capabilities that would take
an audio input, alter it with a specific algorithm and output it in its new form. The three
effects designed were for channel swapping (left becomes right, right becomes left), auto-
panning (the signal is continually passed from left to right and back again) and specified tap-
delay (the signal is repeated a specified number of times). This report contains background
analysis of plug-ins and audio processing technology currently available commercially for use
in music technology. Also presented is an evaluative study of the VST Plug-In Software
Development Kit that was used for this project.
ii
Acknowledgement
I would like to thank my supervisor Dr Kia Ng for his guidance, advice and support
throughout the whole of this project.
Also, I would like to thank Dr Ewan Stefani from the music department for allowing me the
use of the electronic studio’s facilities.
In addition, I would like to acknowledge Steinberg for the use of the VST Plug-In Software
Development Kit version 2.0 - Copyright notice:[1] ”VST is a trademark of Steinberg Soft-
und Hardware GmbH”
iii
Table of Contents
Summary…………………………………………………………….…………… (i)
Acknowledgement……………………………………………………………….. (ii)
Table of Contents………………………………………………………………... (iii)
1: Introduction…….……………………………………………………………...
1.1 Motivation for choosing this project
1.2 Description of problem
1.3 Minimum Requirements
1
1
1
2
2: Background……………………………………………………………………
2.1 D.S.P. Effects
2.1.1 Filtering / Equalisation
2.1.2 Time Warping
2.1.3 Vibrato
2.2 Audio Processing Plug-In Technology
2.3 Evaluation of commercially available plug-in
2.4 Evaluation of audio environment
2.4.1 Csound
2.4.2 Cubase VST
2.4.3 Cool Edit Pro
3
3
3
3
3
4
4
7
7
8
8
3: Implementation…………………………………….………………………….
3.1 Project Milestones
3.2 Visual C++
3.3 VST Plug-In Software Development Kit
3.4 D.S.P.Effects
3.41 Channel Swap
3.42 Auto-pan
3.43 Specified Tap-Delay
9
9
9
10
11
11
12
13
4: Evaluation……………………………………………………………………...
4.1 Evaluation of minimum requirements
4.2 Evaluation of prototype
4.3 Evaluation of planning
14
14
15
16
5: Conclusion………………………………………….………………………….
5.1 Conclusion
5.2 Future Direction and Enhancement
17
17
17
References............................……………………………………………………... 18
Appendix A: Personal Reflection………………………………….……………. 20
Appendix B: Instructions for Plug-In use.......…………………….…………… 21
Appendix C: Screen Shots………………………………………….…………… 22
Page 1
1. Introduction
1.1 Motivation for choosing this project
In order fully profit on knowledge and experience, a project to combine the two disciplines of
computer science and music was necessary. Over the past few years, musicians, songwriters and
producers have used computers to aid them with songwriting and producing. One of the many ways
to enhance audio recordings is by applying effects on to the raw sound files to give the sound a
different quality.
By evaluating the existing commercially available software, researching into D.S.P. (Digital Sound
Processing) effects and addressing specific problems encountered personally in music technology, this
project aims to create a D.S.P. effects plug-in, suitable for use in Cubase VST (an audio/M.I.D.I.
software sequencer). Its function is to take an audio input, alter it using D.S.P. algorithms and output
it in its new form.
The scientific approach to the production of music is relatively new to me personally and sets up an
enticing challenge to balance musical creativity with a scientific method. It will also enable the
development of my knowledge and ability to use programming languages learnt in the SoC (School of
Computing) modules “Introduction to Programming” (SO11 and SO12) and “Object Oriented
Programming” (SO21).
1.2 Description of problem
In certain situations, users of commercially available software have found certain details to be lacking
in current implementation, or at least not developed enough to be useful or versatile. These include
real-time channel swapping, useful for re-distributing certain individual sounds if the mix of the
whole track sounds unbalanced, or the sounds are heavily biased to one side. This feature has been
generally implemented as a part of the functions of a wave editor (such as Syntrillium’s Cool Edit
Pro, Sonic Foundry’s Sound Forge or Steinberg’s Wavelab) but has been overlooked as a real-time
tool.
Neglected by many wave editors and also by audio sequencers (such as Steinberg’s Cubase VST or
Emagic’s Logic Audio) is a specified tap-delay. With this we could control the number of delays
outputted by specifying how many times to loop around the delayed output. Currently implemented
Page 2
delays include the single-tap delay where the input signal is outputted and then also returned back into
the delay once only, and the multi-tap delay, where the input signal is outputted and then continuously
fed back into the delay. The use of a specified tap-delay is for occasions where more than one tap is
needed to augment a sound, without flooding it for longer than it is needed. For example, it could be
configured so that in one bar of music that has a time signature of 4 beats a bar, a sound could played
on the first beat and the effect could reproduce this on the other beats in the bar, stopping once its task
is complete.
The reason for the choice of plug-in technology over stand-alone software is its real-time capabilities,
the existence of software that supports plug-in technology and its practical commercial appeal.
1.3 Minimum Requirements
- An evaluation of Csound, its architecture and its functionality to manipulate sound files.
- To learn Visual C++ and Cubase VST
- Investigate M.I.D.I. (Musical Instrument Digital Interface) protocol
- Research into D.S.P. and possible types effects to be implemented (filtering, panning, pitch
shifting, delay and some investigation into reverberation)
- Design and implement a plug-in module for effects processing.
Page 3
2.� Background
2.1 D.S.P. Effects
2.1.1 Filtering / Equalization
The process of filtering allows us to let through or block any frequencies we choose. It is one of the
most common D.S.P. effects and as such there are many algorithms to represent different types of
filtration. Tseng and Pei[2] provide us with a design for a IIR (this is a notch filter). The main angle
of the paper is centred around pole placement, which is found by solving a quadratic problem. Tseng
and Pei in another paper [3] discuss a comb-filter design, which uses FIRs rather than IIRs. There is
extensive talk of a fractional delay filter design to solve the problem of interference at harmonic
frequencies. This is because IIRs are “more sensitive to accumulation of roundoff errors in the filter
arithmetic than FIRs” [4]. The models provided in these two papers are of benefit to this project.
Another paper discusses filter morphing [5] where the output signal can change gradually from one
set of parameters to another. Coefficients are encoded using the ARMAdillo scheme [6] and results
show that the morphing performance of a parametric equalizer or shelving filter is superior to the non-
encoded version. Filter morphing is desirable for this project so therefore this article provides a good
reference point.
2.1.2 Time Warping
Time Warping is the process of manipulating an audio input so that it plays back faster or slower, or
morphing between different presets. Goldenstein and Gomes [7] presented a technique to compute
time warping using periodic information that it uses and replicates with an algorithm. Their goal is to
change the duration of the sample, without changing the actual pitch, ie. if the sample was a voice, it
would say the same things but slower or faster. They recognise the need to filter certain after
applying time warping, known as sampling rate conversion or resampling. They mention Dynamic
Time Warping, a technique that is implented in the system, Super Mbox, from Jang’s and Lee’s paper
[8]. Their system takes an audio input from a singer and based on the first few notes sang, it will
recognise the song and play the backing track, based on the musical key and tempo of the
performance. DTW is used to compare the input pitch vector to that of the song in the database.
2.1.3 Vibrato
Vibrato is the undulation of pitch of a note. This exists naturally in the playing of an instrument,
however when synthesizing a sound, it is important to include this if the output is going to sound
Page 4
realistic. For Chowning’s simulations [9] he uses the equation “V= 0.2 × log(pitch)” to calculate
vibrato. Disch and Zolzer [10] have a slightly more complex equation, as they are attempting to
model a mechanical vibrato bar. For this, their vibrato uses delay lines with sine type modulation,
backing up Pinkston’s claims about delay lines [11]. The system combines the vibrato with SSB
modulation and demodulation. Arroabarren et al. [12] have also analysed vibrato, using their findings
to propose their discrete time-frequency techniques to calculate
2.2 Audio Processing Plug-In Technology
For the platform we are exclusively dealing with for this project – the PC – the two main types of
audio processing plug-ins are DirectX™ plug-ins and VST plug-ins. DirectX™ (developed by
Microsoft) is more commonly used of the two. There are many more of these plug-ins commercially
available and also many more host applications that support them (Cool Edit Pro, Sound Forge). VST
plug-ins (developed by Steinberg) are designed to extend the capability of Steinberg’s software, in
particular Cubase VST, but also their other two big software packages, Wavelab and Nuendo.
Although their software supports DirectX™ technology, Steinberg are keen to promote the use of
VST technology. Their most popular plug-in set GRM Tools 1 and 2 are VST only.
2.3 Evaluation of commercially available plug-in
There are a number of software effects plug-ins available, some of the leading manufacturers being
Steinberg, TC Works, Waves, Prosoniq to but a few. An evaluation of some of the demonstration
versions that are available has been done to assess and evaluate the functionality of each plug-in based
on the same set of criteria, and using the same test procedure.
The set of criteria on which to contrast these plug-ins is as follows.
• Can the plug-in process different sample rates?
• Can the plug-in process mono and stereo files?
• Can the plug-in process different bit rates?
• Were there sufficient parameters to alter the sound?
• Did the parameters control the sound well and make a real difference?
• Was the GUI clear and helpful?
• Overall, was the plug-in easy to use?
Page 5
The same group of test files were used, including some at different sample rates (44,100Hz,
32,000Hz, 22,050Hz), different bit rates (8 bit and 16 bit), mono and stereo. As it turned out, Cubase
VST did not support 8-bit wave files and so all plug-ins cannot pass this test.
• dB-T tempo delay
A freeware plug-in from db-audioware, it implements a basic delay algorithm, with some high
and low pass filtering. Excellent quality output, and a few parameters to adjust such as feedback,
volume of the delay and panning of the returning delayed signals. This could be improved on by
implementing some changing parameters such as cross-panning rather than them all being static.
• Timeworks Delay 6022
Attempts to make this plug-in look like authentic hardware took away from its performance. The
GUI used a VU meter to show the input/output/delay level and was unclear at times. The text
used was also unclear, especially against such a dark coloured background. Aside from this, it is
an effective plug-in. A stereo delay, the parameters of the two delayed signals can be ganged and
altered in proportion, including the amount of original signal sent, the level of the returning signal
and the level of feedback (SPIN). The quality of the results was good, the delay algorithms are
very effective. However it was perhaps too simplistic in its approach whereas the results from the
dB-Tempo delay were a lot more impressive.
• Steinberg Freefilter
This plug-in implements equalization algorithms where control of a wide range of frequencies is
available through a 30 band graphic equalizer. Its GUI is reasonably straight forward though a
little reference to the help file was required. Results-wise, it was impressive due to its close
command of frequencies. However, it was sometimes difficult to maintain the complete control
of the filter drawing modes.
• Fusion Filter
This plug-in is made by Opcode and contains a filter and a modulator. The GUI was not very
clear, and not user-friendly, which hindered experimentation. There were too many features for
the one window. Its results were moderate; the filtering was very precise, perhaps a little too
much. Its main flaw was in the lack of a mix control between original and effected signal. Of
course the plug-in can be used through an insert point, however it is an unnecessary chore.
Page 6
• Prosoniq P warp
This plug-in also had a bad GUI, but because it lacked any clear indications of what the controls
were. There are 5 vertical sliders, which control a pitch warp effect, tone, feedback, a type of
reverberation. The results of using it were very original and interesting, however the lack of real
knowledge into how they were achieved negates the novelty factor.
• Arboretum Realizer Pro
A very simple yet effective design of plug-in, this combines D.S.P. algorithms for equalisation,
reverberation, stereo spreading and gain control. The results were good, a high quality output was
achieved. Simple, but clinical. Could be improved by perhaps expanding the equalisation for
greater control of the output signal.
• TC Native Parametric EQ
A very professional looking plug-in, this combines good visual appearance with exceptional use
of D.S.P. algorithms for parametric equalisation. Precise control of the output is obtainable, and
with a graphic view of the frequencies being boosted or cut, it is very easy to navigate. This work
can be expanded upon perhaps by allowing some of the filters to change over time.
• Timeworks Mastering EQ
Also professional looking, the overall interface is well structured and clear. As a mastering EQ it
only need control rogue frequencies in places and so the plug-in provides a 6 notch filters where
there is control over frequency, gain and width of the notch. Also featured is shelving EQ which
gives a simple cut and lift. Results were excellent, and there was very precise control over
frequencies. Although huge general cuts in frequencies could be made, it was more effective
doing the job for which it was designed.
Can the plug-in process different sample rates?Can the plug-in process mono and stereo files?Can the plug-in process different bit rates?Were there sufficient parameters to alter the sound?Did the parameters control the sound well and make a real difference?Overall, was the plug-in easy to use?
dB-T
tem
po d
elay
Tim
ewor
ks D
elay
602
2S
tein
berg
Fre
efil
ter
Fus
ion
Fil
ter
Pro
soni
q pi
war
p A
rbor
etum
Rea
lize
r P
roT
C N
ativ
e P
aram
etri
c E
QT
imew
orks
Mas
teri
ng E
Q
Page 7
2.4 Evaluation of audio environment
2.4.1 Csound
Csound is a synthesis program. It has the ability to generate sounds or import sounds from files, and
change their nature in some way. In the area we are interested in, signal processing, it has been
proved to be a effective and versatile piece of software. To use this software effectively, a knowledge
of the basic concepts in Csound is needed, so as to understand for example, the need for orchestra
files (describes the instrument) and score files (provides the notes to play). In general, it is not as
straightforward and user-friendly as a Windows based synthesizer. However it is many times more
powerful and the level of control is greater.
In his work, Mikelson [13] has many examples of effects that have been implemented, in the form of
block diagrams and also showing the source code of an instrument that utilises that effect. These
include 3-band equalizer, low-pass filter, vibrato, auto-panner and a stereo delay. The code follows a
similar template for each, with declaration of parameters followed by an algorithm using those
parameters. Some of the effects contain delay lines, and so we refer to Pinkston [11] who states that
delay lines are “the basis for a wide variety of synthesis and signal processing.” Csound provides us
with 3 basic delay lines – “delay1”, “delay” and “vdelay”. Delay is a fixed one sample delay,
however the other two have the delay time specified. In addition vdelay has a variable time delay.
These are the basic commands that are used in creating effects such as a variable delay vibrato, slap-
back echo and a continuous pitch-shift.
The significance of Csound to this project is to understand how effects can be reduced down to their
most simple level, and algorithms based on specified parameters can be implemented. There is an
issue with how accessible a Csound effects processor would be to the average computer musician.
Therefore we can transfer our findings in Csound on to a more popular platform.
Page 8
2.4.2 Cubase VST
There are two main types of audio environment in which plug-in effects are used. The first is the
sequencer and the second is the wave editor.
The sequencer allows MIDI and audio data to be programmed into an arrangement whereby it can be
played back and added to in real-time. One of the most popular sequencers of the past 10 years is
Steinberg’s Cubase. There are others such as Emagic’s Logic and Digidesign’s Pro Tools. However,
Cubase has remained the industry standard because of its unrivalled ability to deal with MIDI data
and its growing audio capabilities with low latency. Its MIDI functions have largely remained the
same since its first release on PC of version 1. It has been since the release and inclusion of
Steinberg’s VST technology that audio has become their concern. It has allowed them to branch into
areas such as plug-in effects technology and virtual instruments, the likes of which had not been seen
in combined MIDI/audio software before. It’s GUI is quite daunting on first look, however once it is
broken down into sections and time is spent learning where functions are, then it becomes very natural
to use.
2.4.3 Cool Edit Pro
Wave editors generally support plug-in technology as they can enhance the capabilities of their
software. Cool Edit Pro supports DirectX™ plug-ins, however it has many useful functions already
coded into the software. These are more tools than effects. Cool Edit Pro started off life as a
freeware wave editor but when it achieved popularity, Syntrillium decided to enter the commercial
market. It has a simplistic GUI, what you see is what you get. However, for a sound designer this is
perfect as using its built in tools such as convolution, noise and hiss reduction, and its series of
parametric and scientific filters, it allows the careful negotiation of sound waves. It is let down by its
lack of real-time implementation. Even something simple such as the gain on a channel takes a
second or two to acknowledge a change, and as this is pretty much the only thing that can be altered in
real-time, it scores low in that section.
Page 9
3. Implementation
3.1 Project Milestones
In order to ensure a coherent approach to this project, it is necessary to define certain milestones.
Firstly, the VST plug-in SDK must be explored in order to understand how a VST plug-in works with
the host application. To do this, it is first necessary to become familiar with the programming
language of Visual C++. This language has been chosen as the SDK example code has been
programmed in C++. Also because Visual C++ is PC based, it allows the transferral of compiled code
into the appropriate directory for testing to be more time efficient. The Visual element may also assist
in the development of GUI later on in the project [14].
Concurrent to this, the D.S.P. effects must be designed in order to have a model on which
implementation can be attempted. This can take the form of equations. Also, block diagrams maybe
useful.
Once a design has been completed, implementation and testing of these effects can be performed,
making sure that the plug-ins are robust in the host application.
Extensions to the project can be started once the effects are implemented, beginning with a design of a
suitable GUI for each plug-in. Implementation of this can follow.
3.2 Visual C++
The learning and investigation into Visual C++ extended upon knowledge and experience of C++
already acquired from the SoC (School of Computing) modules, SO11, SO12 and SO21. Its main
distinction from C++ used in these modules, was the ease in which variables and functions could be
traced back to their definitions, allowing navigation through example code to be more straightforward.
The principal way of understanding Visual C++ was to use the VST plug-in SDK as this would prove
to be the most relevant way to become familiar with the architecture of Visual C++ and the SDK
itself.
Page 10
3.3 VST Plug-In Software Development Kit
This SDK supplied us with example code, allowing the use of pre-existing functions and variables.
One of the key concepts of object oriented programming, inheritance, is insisted upon in the
documentation (included in the SDK as a .PDF file) as “the host application relies on them being used
as they are provided.” Also supplied was the logo required to be included in GUI designs so to
acknowledge Steinberg’s copyright on the SDK. There was also included examples concerning the
creation of VST instruments. However, this does not concern us for this project.
The 3 examples were for “gain-change,” “delay” and “delay with GUI.” The code for each is split
across 3 files, a header file, a code file and a main file. The header file contained declarations using
inheritance from “audioeffectx.h.” The code file contained the actual implementation of the effects
whilst the main file communicated with the host application. The 3 files were explained step by step
in the documentation as to why the lines were needed but unfortunately no explanation was given for
any of the files which were needed for inheritance which hindered the overall understanding of the
processes being undertaken.
Taking the gain-change as an example, the code for this was compiled and then the DLL file that had
been created was copied into the “vstplugins” directory within the directory structure of Cubase VST,
as any plug-ins are recognised by this particular host application upon initial loading only.
The plug-in had 1 parameter that was adjustable in real-time to alter the gain of a signal being routed
through it. However, the gain amount was displayed as a decimal number to 6 places. This may have
perhaps been more helpful as a percentage of the total gain. It also ranged from 0 to 1 when perhaps
the issue of gain boost had been overlooked. Using the criteria applied to the other commercially
available plug-ins from chapter 2, the gain-change performed well. It was able to process different
sample rates, as well as mono and stereo files, though still with the restrictions of the programming, it
could not process files lower than 16 bit. There was 1 parameter which was sufficient to control the
sound and it made an obvious difference to the audio output, although there is a question of how fine
the control is able to go. The GUI was basic and simple and overall the gain plug-in was very easy to
use.
The delay example was also compiled in order to assess its functionality and compare what it is doing
with the source code. The type of delay implemented was unspecified multi-tap. The input signal
would be initially outputted, but also applied into a feedback loop. This allowed the signal to be
outputted again at a specified level at a specified delayed point, and fed back into the loop until the
Page 11
signal is eventually inaudible. The assessment criteria from chapter 2 was also applied here and it
also could process different sample rates, and mono and stereo. The parameters were sufficient for
the task of a delay and were clear and audible in what effect they were having. The GUI was also
basic and simple and overall the delay plug-in was very easy to use.
3.4 D.S.P. Effects
The 3 types of D.S.P. effects we wish to implement are “channel swap,” “auto-pan” and “specified
tap-delay.” We will deal with each one’s design in turn.
3.4.1 Channel Swap
In order to achieve a channel swap, we have to take the input from both
channels, place the right channel in a buffer, swap the left channel to the
right channel and then copy the buffer to the left channel.
BUFFER = RIGHT
RIGHT = LEFT
LEFT = BUFFER
This will result in the left and right outputs being the opposite way
around to the way they were inputted.
In order to implement this effect, the code from the “gain-change” example was used, and was firstly
amended to remove the parameter, and all traces of gain variables. Once left with a shell of a plug-in
that would just turn off and on without affecting the output, the channel swap could be implemented.
Inside the code, there are two functions called “process” and “processReplacing.” The former would
contain code for effects being called upon as an auxiliary input whereas the latter contains the code
for the effect being called as an insert. As channel swapping only works in an insert capacity
(otherwise the original signal would still exist and we would end up with both sides on both channels)
the code for “process” was left blank.
There were initial problems in testing, where the compiled code did not appear to anything, or in some
cases, only swap one channel creating an exact copy of the right channel on the left. This was
Page 12
overcome and the channel swap was tested with the group of test files used to assess the commercially
available plug-in.
3.4.2 Auto-pan
The theory behind an auto-pan effects plug-in involves an input signal being
converted to mono if it is not already. It is then outputted using an incremental
and decremental system where the output will appear to change from one
speaker to another when in reality, it will just be fading the volume up and
down. The pseudo-code for this is as follows.
{int X = 44100 // declared in header
bool = true // declared in header
float T = 1 // declared in header, time for one cycle to be complete}
if bool = true {X--;}
if bool = false {X++;}
if X = 0 {bool = false;}
if X = (44100 * T) (bool = true;}
volume = x / (44100 * T)
leftOutput = 1*volume;
rightOutput = 1 * (1 – volume);
However whilst trying to implement this, problems occurred. In a test to make one just the left
channel fade from 0 (off) to 1 (full volume), it became apparent that we could not guarantee when the
cycle would begin. ie. one would expect the equation to take effect from the beginning of its cycle,.
ie. volume = 0. However, once the plug-in was switched on, in several tests the effect was already
partially through its process, each time at a different point. Many hours were spent trying to
overcome this problem, but unfortunately there was no successful conclusion to this.
Page 13
3.4.3 Specified Tap-Delay
The specified tap-delay allows the user to define how many times they
would like to repeat the input signal. The pseudo-code is as follows:
User defines X;
User defines delay;
For (int Y = 0; Y < X; Y++)
{
leftOutput = (leftFeedback * amount);
rightOutput = (rightFeedback * amount);
pause (delay);
}
This effect was unfortunately left un-implemented due to the difficulties encountered with the auto-
pan plug-in.
Page 14
4. Evaluation
In order to evaluate this project, it is necessary to define a set of criteria on which it can be judged.
• Were the minimum requirements met?
• Did the project produce a viable solution?
• Was the project plan followed?
4.1 Evaluation of minimum requirements
The minimum requirements as stated in chapter 1 have each been achieved. Criteria for judging them
include questions such as:
• Did Csound have good enough functionality to fulfil the needs of the project?
• Was Visual C++ and Cubase VST learnt to a degree where it cannot be judged as a hindering
factor to the project?
• Did MIDI protocol provide any solutions to the problem?
• Did the research into D.S.P. effects aid the project and in what way?
An evaluation of Csound was made and reached a conclusion that a Csound effects processor,
however powerful and intricate would not be accessible to the average computer musician. If it were
to have a more user-friendly GUI, then perhaps there may be a case for a stand alone effects
processor, but that still would not satisfy the need of the project
During the process of learning the VST plug-in SDK, I learnt some of the basics of Visual C++ and
have been able to navigate its architecture successfully. Cubase VST proved to be easy to learn how
to use, and although quite complicated at times, many of its functions and capabilities were in the end,
quite straightforward. However, knowledge of either program could not be described as a hinderance.
A brief investigation of MIDI protocol discovered that it was not a viable option for changing
parameters or affecting plug-ins in any way using this current version of the VST SDK. MIDI and
audio seem to run independent processes and only come together on the sequencer main page. MIDI
could be used to trigger audio using external sound modules such as tone generators or samplers, but
for the purposes of this project, it could not be a controller for any audio code.
Page 15
Some of the research into D.S.P. involved effects that were not implemented. The papers studied
proved useful in achieving an awareness of how to tackle issues surrounding D.S.P. and re-
constructing effects through algorithms.
4.2 Evaluation of prototype
One working VST plug-in was implemented, a channel swap, able to work in a real-time
environment. It is a simple yet overlooked effect that has not been realised as part of the main
software program. Although it features in Cool Edit Pro, this does not allow the sound to be changed
in real-time. The screen shots in Appendix B show the difference between input and output waves.
From this we can see that the output wave has not been degraded in any way and so it achieves its
purpose without compromising the sound quality.
If we apply the criteria used to evaluate the commercially available plug-ins in chapter 2, we can say
that it cannot pass the bit rate test because Cubase VST will not accept 8-bit wave files. However it
processed all different sample rates. It fails the stereo/mono test as it can’t channel swap a mono
input. There were no parameters to alter the sound with so therefore it fails the two criteria regarding
parameters, but it was overall easy to use. So using my own criteria, it only passes 2 out of 6.
It would have been very useful to have been able to implement the auto-pan feature, but if no control
can be gained over when the effect is to start, then there is no control over the wave itself. This is not
satisfactory for anyone wishing to specifically control an effect.
The VST SDK was very difficult to use and ultimately hindering. There was a lack of documentation
explaining precisely what all the sections of code did, just a brief section advising the developer to use
inheritance. Their 3 examples were explained where possible but because most inherited their
functions from other files, these were not explained and so I found it to be confusing. Especially as
the inheritance hierarchy was quite extended and convoluted, but not explained in the documentation.
Page 16
4.3 Evaluation of planning
• Did the project stick to the plan as proposed in the mid-term report?
The project schedule submitted was too ambitious, and included some of the enhancements that I
didn’t have time to implement. It was not possible to foresee the problems encountered with the VST
SDK and so as a result, many of the tasks dependant on this were delayed. With hindsight, it may
have been useful to try to gain some feedback from people who had already attempted to use the
SDK, or failing that, to have planned to learn the SDK earlier in the schedule as part of the research.
Page 17
5. Conclusion
5.1 Conclusion
This report has discussed a number of issues in music technology with regards to effects processing
and their plug-in implementation. A number of issues have been dealt with but could be expanded
upon. It has presented a blueprint for some D.S.P. effects and has seen a successful implementation
of one of them. More work would be needed to pursue the usefulness of the VST plug-in SDK,
however the chances are that with the recent newly-coded release of Cubase VST, the SDK will be
updated in order to include some new capabilities that Steinberg have been working on. Overall, this
report has solved one of the problems identified at the beginning, and has provided ideas for other
possibilities that could be implemented.
5.2 Future Direction and Enhancement
There are many ways on which this project could have been expanded but given the time constraints
and limited scope of this project, I have been unable to do so. Below are some examples of possible
areas of enhancement.
There are plenty of D.S.P. algorithms that have not been explored in the music software. As time
goes on, this will surely increase. During my research, one particular area of study that seemed to be
the most individual and most beneficial to the world of computer music was the real-time
implementation of a stereophonic acoustic echo canceller [15] [16]. This has enormous benefits for a
sound designer who wishes to restore a recording that contains unwanted echo as equalisation
techniques can only reduce it so much.
Another way to enhance this project would be to expand the input devices to include the “Music Via
Motion (MVM)” system that has been developed by the ICSRiM at university [17]. This system
allows a camera to detect movement and interpret that movement to execute commands or trigger
audio or midi. This could be extended to allow parameters of plug-ins to change depending on the
movement detected. Combined with the previous enhancement suggestion, this could be used to
allow a user to point to exactly where they would like the sound to come from, and could
subsequently be encoded in surround sound to make it so.
Page 18
References
[1] Steinberg Website “http://www.steinberg.net”
[2] Chien-Cheng Tseng; Soo-Chang Pei. “Stable IIR notch filter design with optimal pole placement”,
IEEE Transactions on Signal Processing, Volume: 49 Issue: 11 , Nov 2001. Page(s): 2673 –2681
[3] Soo-Chang Pei; Chien-Cheng Tseng “A comb filter design using fractional-sample delay”. IEEE
Transactions on Circuits and Systems II: Analog and Digital Signal Processing. Volume: 45 Issue: 5
, May 1998. Page(s): 649 -653
[4] Roads, C.; Strawn, J.; Abbott, C.; Gordon J.; Greenspun P. “The Computer Music Tutorial” MIT
Press, Cambridge, Boston. 1996.
[5] Yinong Ding; Rossum, D. “Filter morphing for audio signal processing” IEEE ASSP Workshop on
Applications of Signal Processing to Audio and Acoustics, 1995.. Page(s): 217 –221
[6] Rossum, D. “The ‘ARMAdillo’ Coefficient Encoding Scheme for Digital Audio Filters”.
Proceedings of IEEE Workshop on Applications of Signal Processing to Audio and Acoustics,
Mohonk Mountain House, New Paltz, New York, October 1991.
[7] Goldenstein, S.; Gomes, J. “Time warping of audio signals” Proceedings of the Computer
Graphics International, 1999 Page(s): 52 –57
[8] Jang, J. R., Lee, H “Hierarchical Filtering Method for Content-based Music Retrieval via Acoustic
Input” MM’01. Sept. 30-Oct, 2001, Ottawa, Canada. ACM 2001
[9] Chowning, J. “Frequency Modulation Synthesis of the Singing Voice.” In M. Matthews and J.
Pierce, eds. 1989. “Current Directions in Computer Music Research.” Cambridge, Massachusetts:
the MIT press pp. 57-63.
[10] Disch, S.; Zölzer, U. “Modulation and Delay Line Based Digital Audio Effects” Proceedings of
the 2nd COST G-6 Workshop on Digital Effects (DAFx99) NTNU, Trondheim, Dec 9-11, 1999.
[11] Pinkston, R. “Using Csound to Understand Delay Lines and Their Applications” In R.
Boulanger, ed. 2000. “The Csound book” Cambridge, Massachusetts: the MIT press pp. 575-594.
Page 19
[12] Arroabarren, I.; Zivanovic, M.; Bretos, J.; Ezcurra, A.; Carlosena, A. “Measurement of Vibrato
in Lyric Singers” Proceedings of the 18th IEEE Instrumentation and Measurement Technology
Conference, 2001. Volume: 3 , 2001 Page(s): 1529 -1534 vol.3
[13] Mikelson, H. “Modelling a Multieffects processor in Csound” In R. Boulanger, ed. 2000. “The
Csound book” Cambridge, Massachusetts: the MIT press pp. 575-594.
[14] Arfib, D. “Visual Representation For Digital Audio Effects and Their Control” C.N.R.S.
Laboratoire de Mécanique et d’Acoustique. [email protected]
[15] Eneroth P. Gay, S.L. Gansler, T. Benesty, J. “Studies of aWideband Stereophonic Acoustic Echo
Canceler” Proceedings of the 19th IEEE Workshop on Applications of Signal Processing to Audio and
Acoustics, New Paltz, New York, Oct 17-20, 1999.
[16] Eneroth P. Gay, S.L. Gansler, T. Benesty, J. “A Real-time Implementation of a Stereophonic
Acoustic Echo Canceler” IEEE transactions on Speech and Audio Processing, Volume 8, No.5, July
2001
[17] ICSRiM website :- http://www.leeds.ac.uk/icsrim/
Page 20
APPENDIX A: Personal Reflection
There are two ways in which I would like to reflect upon this project. Firstly I will deal with the
project content and lessons I believe I have learnt over the duration of the project, followed by
observations on the project experience in general.
Firstly, the task of creating a VST plug-in was not an easy one by any means. I would recommend
strongly to anyone considering a future project similar to this work that they have a background in
music technology, but that they know specifically about plug-in technology. For although my
knowledge of Visual C++ and Cubase VST were not a hindrance, my lack of complete understanding
of the VST SDK was key in the progress of the project. Because the SDK was so vital to the success
of the project, I would recommend learning the SDK as one of the first tasks, even during research. I
learnt that even the simplest thing can sometimes turn out to be the most convoluted.
I do believe I have learnt many things with regards to D.S.P. effects and the way plug-in technology
works with music software such as Cubase VST. I think it is perhaps the absence of a couple of more
implemented effects that make me most disappointed that it took so long to get around the SDK. I do
not feel I am finished in anyway, but perhaps that is to do with my own personal goal to utilise what I
have learnt through this project in my music career.
I would definitely recommend plug-in technology over stand alone implementations from a user point
of view.
As far as the project experience itself goes, I am disappointed that I did not manage to keep to my
original time plan. However I do believe that it has been valuable to me, not just in a technical sense
but that it has allowed me to explore and begin to problem solve on a grander scale individually. I
would advise the keeping of a journal as this helps to maintain the thought processes and also note
down anything that has been tried, even if unsuccessful. I found this to be of benefit
Page 21
APPENDIX B: Instructions for plug-in use
On the CD, in the root directory is a file entitled ChannelSwap.dll
Copy this file into the “vstplugins” directory usually found at the location
“C:\Program Files\Steinberg\Cubase VST24\vstplugins”
* This could differ depending on where Cubase VST was installed and which version you are using.
Run Cubase VST and in the effects section, included in the list should be an effect entitled
“ChannelSwap” – select it and turn it on. There are no parameters to alter.
Page 22
APPENDIX C: Screen Shots
Page 23