ENGLISH

Designing Software Synthesizer Plug-Ins in C++: For RackAFX, VST3, and Audio Units

Book information

Publisher
Routledge
Year
2014
ISBN
1138787078, 9781138787070
Language
english
Format
PDF
Filesize
64 MB (67318274 bytes)
Pages
760\912
Time added
2021-07-16 03:57:24

Description

Bridging the gap from theory to programming, Designing Software Synthesizer Plug-Ins in C++ For RackAFX, VST3 and Audio Units contains complete code for designing and implementing software synthesizers for both Windows and Mac platforms. You will learn synthesizer operation, starting with the underlying theory of each synthesizer component, and moving on to the theory of how these components combine to form fully working musical instruments that function on a variety of target digital audio workstations (DAWs). Containing some of the latest advances in theory and algorithm development, this book contains information that has never been published in textbook form, including several unique algorithms of the author's own design. The book is broken into three parts: plug-in programming, theory and design of the central synthesizer components of oscillators, envelope generators, and filters, and the design and implementation of six complete polyphonic software synthesizer musical instruments, which can be played in real time. The instruments implement advanced concepts including a user-programmable modulation matrix. The final chapter shows you the theory and code for a suite of delay effects to augment your synthesizers, introducing you to audio effect processing. The companion website, www.focalpress.com/cw/pirkle, gives you access to free software to guide you through the application of concepts discussed in the book, and code for both Windows and Mac platforms. In addition to the software, it features bonus projects, application notes, and video tutorials. A reader forum, monitored by the author, gives you the opportunity for questions and information exchange. cover output Preface Designing Software Synthesizer Plug-Ins in C++ Preface Foreward Designing Software Synthesizer Plug-Ins in C++ Foreword Skills Hungarian Notation Synth Projects NanoSynth MiniSynth DigiSynth VectorSynth AniSynth DxSynth Delay FX Bibliography Chapter 1 Designing Software Synthesizer Plug-Ins in C++ Chapter 1 Synthesizer Fundamentals 1.1 Synth Components 1.2 Oscillators 1.3 Filters 1.4 Amplifiers 1.5 Envelope Generators 1.6 Basic Synth Architecture 1.7 Fundamental Goals of Synth Patch Design 1.8 Audio Data Formats for Plug-Ins 1.9 Signal Processing Review 1.10 Continuous Signals 1.11 Discretized Signals 1.12 The Laplace and z-Transforms 1.13 Aliasing Bibliography Very Approachable DSP Books Chapter 2 Designing Software Synthesizer Plug-Ins in C++ Chapter 2 Writing Plug-ins 2.1 Dynamic-Link Libraries 2.2 C and C++ Style DLLs 2.3 The Application Programming Interface API 2.4 API Function Comparisons 2.5 The RackAFX Philosophy and API 2.6 Writing RackAFX Plug-ins Building the DLL Creation Destruction The GUI Building and Testing Creating and Saving Presets 2.7 Setting Up RackAFX Menu Items Toolbar Items Setup Preferences Starting a New Project 2.8 Designing the User Interface in the Prototype Phase 2.9 Setting up Continuous Controls 2.10 Setting up Indexed Controls: Radio Buttons 2.11 Setting up Indexed Controls: Sliders 2.12 Placing Controls Inside the LCD Control 2.13 Using the RackAFX GUI Designer GUI Designer Rules and Paradigms Compiling as a VST2/VST3 Plug-in 2.14 The RackAFX Plug-in Object MIDI and Joystick Control Functions constructor destructor prepareForPlay update processAudioFrame userInterfaceChange MIDI Message Functions and Helpers MIDI Note Timestamp Functions MIDI Note On and Off MIDI Mod Wheel MIDI Pitch Bend All Other MIDI Messages 2.15 Writing VST3 Plug-ins Setting up the Directory Hierarchy Starting a New Project Project Details Additional Files 2.16 VST3: Processor and Controller Processor: Controller: 2.17 The Common Object Model: COM 2.18 VST3 Synth Plug-in Architecture 2.19 Processor and Controller Declarations 2.20 The Class Factory 2.21 VST3 Conventions Use of namespaces Constant Values Start with the Letter ‘k’ Methods Return a tresult Methods are Declared as PLUGIN_API Multi-Byte-Characters and UString Class Templates Redeclaration of Datatypes 2.22 Implementing a VST3 Plug-in: Controller 2.23 VST3 Controller Initialization RangeParameter StringListParameter LogScaleParameter Parameter Container Normalized and Plain Parameters Step One: Enumerate Some Constants for Indexing the Controls Step Two: Decide on the Control Min, Max and Default Values Step Three: Create the Parameters and Add Them to the Container in the Initialize Method 2.24 VST3 Controller Serialization Step Four: Implement the Serialize-Read Code in the setComponentState Method 2.25 VST3 Controller MIDI Mapping Step Five: MIDI Mapping 2.26 Implementing a VST3 Plug-in: Processor Core Plug-in Functions: Other Functions and Variables 2.27 VST3 Processor Initialization initialize setBusArrangements canProcessSampleSize setActive 2.28 VST3 Processor Serialization getState setState update 2.29 VST3 Note Events, Control Changes and Rendering Accessing the Control Queues Accessing the MIDI Events Accessing the Audio Buffers Processing the Sub-blocks 2.30 Implementing a VST3 Plug-in: GUI Design 2.31 Using the VSTGUI Drag-and-Drop Interface A: The Design Area B: Templates and View Hierarchy C: Control Attributes D: Views/Tags/Bitmaps Views Tags Bitmaps 2.32 VSTGUI Design Example Copy a Template Create a Template 2.33 Implementing a VST3 Plug-in: Debugging 2.34 Writing Audio Unit AU Plug-ins 2.35 AU XCode Projects Starting a New Project Additional Files 2.36 The Info.plist File Logic 9 Backwards Compatibility 2.37 Managing AU Parameters 2.38 AU Conventions Function Return Types: Redeclaration of Datatypes Scopes and Elements 2.39 AUSynth and the AUInstrumentBase Class Standard Plug-in Functions: Audio Rendering: Functions to Declare User Interface Controls: Functions to Handle Presets and Saved States: Functions to Declare Custom GUI and MIDI Capabilities Functions to Handle MIDI Events: 2.40 Implementing the AUSynth Object constructor: destructor: Reset Initialize SetParameterInfo GetParameterInfo SetAUParameterStringList GetParameterValueStrings update Render MIDI Note on and off MIDI Pitch Bend MIDI Controller Messages Other MIDI Messages GetPropertyInfo Presets and State Changes 2.41 Implementing the Cocoa View Objects 2.42 WPRotaryKnob Initialization Setting and Getting the Position of the Knob 2.43 WPOptionMenuGroup Initialization Setting and Getting the Index of the Selected Menu Item 2.44 The View Factory and CocoaSynthView.plist 2.45 The View Event Listeners 2.46 The View Interface and Initialization 2.47 Implementing an AU Plug-in: Debugging Bibliography Chapter 3 Designing Software Synthesizer Plug-Ins in C++ Chapter 3 MIDI 3.1 MIDI Messages Channel: System: 3.2 Channel Voice Messages 0x8n?Note Off 0x9n?Note On 0xAn?Aftertouch 0xBn?Control Change 0xCn?Program Change 0xDn?Channel Aftertouch 0xEn?Pitch Bend 3.3 Project: NanoSynth Common Files 3.4 NanoSynth: RackAFX 3.5 RackAFX Status Window 3.6 NanoSynth: VST3 3.7 MIDI Events in VST3 3.8 MIDI Controllers in VST3 Defining Parameter Index Values Initializing the MIDI Parameters 3.9 NanoSynth: AU Bibliography Chapter 4 Chapter 4Analog and Digital Signal Processing 4.1 Analog and Digital Building Blocks 4.2 Analog and Digital Transfer Functions 4.3 Digital Delay 4.4 Digital Differentiation 4.5 Analog and Digital Integration 4.6 The Bilinear z-Transform 4.7 Virtual Analog Filters 4.8 Analog Block Diagrams 4.9 First Order VA Lowpass Filter 4.10 First Order VA Highpass Filter 4.11 Second Order VA Filters 4.12 Series and Parallel VA Filters 4.13 Resolving Delay-less Loops: Modified Härmä Method 4.14 Resolving Delay-Less Loops: Zavalishin’s Method 4.15 Analog Signal Flow Graphs 4.16 Wave Shaping 4.17 Challenges Bronze Sliver Gold Platinum Diamond Bibliography Chapter 5 Designing Software Synthesizer Plug-Ins in C++ Chapter 5 Synthesizer Oscillator Design 5.1 Trivial Oscillator Algorithms 5.2 Trivial Sawtooth Oscillator 5.3 Trivial Square Wave Oscillator 5.4 Trivial Triangle Wave Oscillator Aliasing in the Trivial Oscillators 5.5 Quasi Bandlimited Oscillator Algorithms 5.6 Bandlimited Impulse Trains BLIT 5.7 Bandlimited Step Functions BLEP 5.8 Wider Window BLEP 5.9 Polynomial BLEP PolyBLEP 5.10 Coding the BLEP and PolyBLEP Algorithms Identification: Distance: 5.11 Wave Shaped BLEP Sawtooth Oscillator 5.12 BLEP Square Wave Oscillator 5.13 Differentiated Parabolic Waveform Oscillators 5.14 DPW Triangle Wave Oscillator 5.15 Other Non-Sinusoidal Oscillators 5.16 White Noise Oscillator 5.17 Pseudo Random Noise PN Sequence Oscillator 5.18 Random Sample and Hold Oscillator 5.19 Exponential Decay Oscillator 5.20 Wavetable Oscillators Negative Frequencies 5.21 Bandlimited Wavetable Oscillators 5.22 Sinusoidal Oscillators by Approximation 5.23 Pitched Oscillator Calculations 5.24 Sources of Modulation Bipolar Modulation 5.25 Pitched Oscillator Starting Phase Considerations 5.26 LFO Features 5.27 Designing the Oscillator Objects 5.28 The COscillator Base Class Oscillator.h Limits Waveform Enumerations Member Functions Constructor reset update 5.29 NanoSynth: Oscillators 5.30 NanoSynth Oscillators: RackAFX/VST3/AU Add the Base Class Files 5.31 The CLFO Object CLFO Member Variables CLFO Member Methods LFO.cpp Constructor reset startOscillator stopOscillator doOscillate 5.32 The CQBLimitedOscillator Object CQBLimitedOscillator Member Variables CQBLimitedOscillator Member Methods Constructor reset startOscillator stopOscillator doSawtooth doSquare doTriangle doOscillate 5.33 The CWTOscillator Object CWTOscillator Member Variables CWTOscillator Member Methods Constructor Destructor reset startOscillator stopOscillator setSampleRate update createWaveTables destroyWaveTables getTableIndex selectTable checkWrapIndex doWaveTable doSquareWave doOscillate 5.34 NanoSynth Oscillators: Processing Code Note On Note Off 5.35 NanoSynth Oscillators: RackAFX RackAFX GUI Controls: One Step Only NanoSynth.h NanoSynth.cpp Constructor: prepareForPlay update processAudioFrame userInterfaceChange midiNoteOn midiNoteOff 5.36 NanoSynth Oscillators: VST3 VST3 GUI Controls Step 1: Enumeration and Declaration VST3 GUI Controls Step 2: Creation VSTController.cpp VST3 GUI Controls Step 3: Initialization VST3 GUI Controls Step 4: Serialize Write VST3 GUI Controls Step 5: Serialize Read Processor VST3 GUI Controls Step 6: Serialize Read Controller VST3 GUI Controls Step 7: Parsing GUI Control Values VSTProcessor.h VSTProcessor.cpp Constructor: setActive update process doProcessEvents 5.37 NanoSynth Oscillators: AU AU GUI Controls Step 1: Enumeration AU GUI Controls Step 2: Initialization AU GUI Controls Step 3: Setup the Parameter Information AUSynth.h AUSynth.cpp Constructor: Initialize update Render StartNote StopNote 5.38 NanoSynth: Wavetables 5.39 Challenges Bronze Sliver Gold Platinum Diamond: Hard Sync Sawtooth Oscillator Bibliography Chapter 6 Chapter 6Envelope Generators and Controlled Amplifiers 6.1 Analog Envelope Generators 6.2 Triggers, Gates, and Reset to Zero 6.3 Note on Modes 6.4 Note Off Modes 6.5 Digital Envelope Generators 6.6 Envelope Generator Variations 6.7 Iterative Generation of the Exponential Function 6.8 Biased Envelope Generator Output 6.9 Envelope Generator Intensity Controls and Connections 6.10 Envelope Generator Implementation 6.11 The CEnvelopeGenerator Object doEnvelope Constructor Destructor setEGMode reset calculateAttackTime calculateDecayTime calculateReleaseTime noteOff shutDown startEG, stopEG & Legato Mode isActive & canNoteOff state queries set ADSR values 6.12 Digitally Controlled Amplifier DCA 6.13 The CDCA Object Constructor Destructor setMIDIVelocity, setPanControl, setPanMod, setEGMod setAmpMod_dB setAmplitude_dB reset update doDCA 6.14 NanoSynth: EG/DCA 6.15 NanoSynth: EG/DCA Audio Rendering 6.16 NanoSynth EG/DCA: RackAFX NanoSynth.h NanoSynth.cpp Constructor: prepareForPlay update processAudioFrame midiNoteOn midiNoteOff 6.17 NanoSynth EG/DCA: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp Constructor: setActive update process doProcessEvent 6.18 NanoSynth EG/DCA: AU AUSynth.h AUSynth.cpp Constructor: Initialize update Render StartNote StopNote 6.19 Challenges Bronze Sliver Gold Platinum Diamond Bibliography Chapter 7 Designing Software Synthesizer Plug-Ins in C++ Chapter 7 Synthesizer Filter Design 7.1 Virtual Analog Filters 7.2 Oberheim SEM State Variable Filter Model 7.3 Korg35 Sallen-Key Filter Model 7.4 Korg35 LPF Model 7.5 Korg35 HPF Model 7.6 Moog Ladder Filter Model 7.7 Moog Ladder Filter Gain Compensation 7.8 Oberheim Xpander Variations 7.9 Nonlinear Moog Ladder Filter Models 7.10 The Second Order Moog Half-Ladder Filter 7.11 The Diode Ladder Filter Model 7.12 Designing the Filter Objects 7.13 The CFilter Base Class Constructor: setFcMod and setSampleRate reset and setQControl doFilter update 7.14 The CVAOnePoleFilter Object Constructor: update setFeedback, getFeedbackOutput and reset doFilter 7.15 The CSEM Filter Object Constructor: resetv setQControl update doFilter 7.16 The CKThreeFiveFilter Object CKThreeFiveFilter Member Variables CKThreeFiveFilter Member Methods Constructor: reset setQControl update doFilter 7.17 The CMoogLadderFilter Object CMoogLadderFilter Member Variables Constructor Constructor reset setQControl update doFilter 7.18 The CDiodeLadderFilter Object CDiodeLadderFilter Member Variables CDiodeLadderFilter Member Methods Constructor reset setQControl update doFilter 7.19 Filter Key Tracking Modulation 7.20 NanoSynth: Filters 7.21 NanoSynth: Filters Audio Rendering 7.22 NanoSynth Filters: RackAFX NanoSynth.h NanoSynth.cpp Constructor: prepareForPlay update processAudioFrame 7.23 NanoSynth Filters: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp Constructor: setActive update process 7.24 NanoSynth Filters: AU AUSynth.h AUSynth.cpp Constructor: Initialize update Render 7.25 Build and Test 7.26 Challenges Bronze Sliver Gold Platinum Diamond Bibliography Chapter 8 Chapter 8Modulation Matrix, Polyphony, and Global Parameterization 8.1 Modulation Routings 8.2 The Modulation Matrix Object Creating Rows Modulation Layers getModMatrixCore and setModMatrixCore clearSources and clearDestinations addModMatrixRow and others checkDestinationLayer 8.3 Using and Programming the Modulation Matrix: Oscillator.h Oscillator.cpp COscillator Derived Classes LFO.h QBLimitedOscillator.h WTOscillator.cpp Filter.h Filter.cpp EnvelopeGenerator.h Sources: Destinations: EnvelopeGenerator.cpp DCA.h Sources: Destinations: DCA.cpp Programming the Master Modulation Matrix Enabling and Disabling Rows Calling the doModulationMatrix Function 8.4 NanoSynth MM Part One: RackAFX NanoSynth.h NanoSynth.cpp 8.5 NanoSynth MM Part One: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp 8.6 NanoSynth MM Part One: AU AUSynth.h AUSynth.cpp 8.7 More MIDI Modulation Routings Sustain Pedal Velocity to Attack Scaling Note Number to Decay Scaling 8.8 NanoSynth MM Part Two: RackAFX NanoSynth.h NanoSynth.cpp midiNoteOn midiPitchBend midiMessages 8.9 NanoSynth MM Part Two: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp doControlUpdate 8.10 NanoSynth MM Part Two: AU AUSynth.cpp StartNote HandlePitchWheel HandleControlChange 8.11 User Controlled Modulation Routings 8.12 NanoSynth MM Part Three: RackAFX NanoSynth.cpp 8.13 NanoSynth MM Part Three: VST3 8.14 NanoSynth MM Part Three: AU 8.15 Polyphony Part One Sharing the Global Modulation Matrix Core 8.16 Dynamic Voice Allocation 8.17 Poly NanoSynth: RackAFX NanoSynth.h NanoSynth.cpp Constructor Destructor prepareForPlay update processAudioFrame startNote and stealNote midiNoteOn and midiNoteOff midiPitchBend midiMessages 8.18 Poly NanoSynth: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp setActive update process startNote and stealNote doProcessEvent doControlChange 8.19 Poly NanoSynth: AU AUSynth.h AUSynth.cpp Constructor Destructor Just delete our master modulation matrix core. Initialize update Render startNote and stealNote StartNote and StopNote HandlePitchWheel HandleControlChange 8.20 Global Parameterization Oscillator.h Oscillator.cpp Filter.h Filter.cpp EnvelopeGenerator.h EnvelopeGenerator.cpp DCA.h DCA.cpp 8.21 Final NanoSynth: RackAFX NanoSynth.h NanoSynth.cpp prepareForPlay update 8.22 Final NanoSynth: VST3 VSTSynthProcessor.h The final NanoSynth starts with the plug-in’s .h file for the global parameter declaration. VSTSynthProcessor.cpp setActive update 8.23 Final NanoSynth: AU AUSynth.h AUSynth.cpp Constructor Initialize update Bibliography Chapter 9 Chapter 9MiniSynth: Analog Modeling Synthesizer 9.1 Voice Architectures and CVoice 9.2 CVoice Initialization Constructor initializeModMatrix setSampleRate prepareForPlay update reset initGlobalParameters and setModMatrixCore State Functions 9.3 Portamento Note On Logic noteOn Note Off Logic noteOff doVoice Logic 9.4 MiniSynth Specifications 9.5 CMiniSynthVoice Object Constructor initGlobalParameters initializeModMatrix setSampleRate prepareForPlay update reset doVoice 9.6 Polyphony Part Two Initializing and Setting up Voices Destruction One Time Plug-in Initialization Global Parameter Updates Rendering Audio MIDI Note On MIDI Note Off/All Notes Off All Other MIDI events 9.7 MiniSynth Files 9.8 MiniSynth: RackAFX MiniSynth.h MiniSynth.cpp Constructor Destructor prepareForPlay update processAudioFrame incrementVoiceTimestamps; getOldestVoice; getOldestVoiceWithNote; midiNoteOn midiNoteOff midiModWheel midiPitchBend midiMessage 9.9 MiniSynth: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp Constructor setActive update process incrementVoiceTimestamps; getOldestVoice; getOldestVoiceWithNote; doProcessEvent doControlChange 9.10 MiniSynth: AU AUSynth.h AUSynth.cpp Constructor Destructor Reset Initialize update Render incrementVoiceTimestamps; getOldestVoice; getOldestVoiceWithNote; StartNote StopNote HandlePitchWheel HandleControlChange 9.11 Challenges Bronze Silver Gold Platinum Diamond Bibliography Chapter 10 Chapter 10DigiSynth: Sample Playback Synthesizer 10.1 Audio Samples 10.2 .wav Files Playback Ratio 10.3 Multi-Samples 10.4 Splits, Layers, and Note Regions 10.5 The CWaveData Object SMPTE Format SMPTE Offset 10.6 The CSampleOscillator Object Single-Sample Mode Multi-Sample Mode Constructor initGlobalParameters update reset startOscillator and stopOscillator addWaveSample getNumChannels and getMIDISampleNote and sampleIsLoaded initWithFilePath initWithFolderPath setWaveDataPtr setWaveSamplePtrArray readSampleBuffer doOscillate 10.7 Audio File Location Single-Sample Example RackAFX VST3 AU Multi-Sample Example RackAFX VST3 AU 10.8 DigiSynth Specifications noteRegion Voice Mode 10.9 The CDigiSynthVoice Object Constructor initGlobalParameters initializeModMatrix setSampleRate prepareForPlay update reset inOscSplitRange inOscVelocityRange isOscSingleCycle getOscWaveData getOscWaveSamplePtrArray initOscWithFilePath initOscWithFolderPath initAllOscWithDigiSynthVoice doVoice 10.10 DigiSynth Files Loading Samples 10.11 DigiSynth: RackAFX DigiSynth.h DigiSynth.cpp loadSamples initialize update 10.12 DigiSynth: VST3 Processor.h Processor.cpp Constructor loadSamples setActive update doControlUpdate 10.13 DigiSynth: AU AUSynth.h AUSynth.cpp Constructor loadSamples Initialize update 10.14 Challenges Bronze Silver Gold Platinum Diamond Bibliography Chapter 11 Chapter 11VectorSynth and AniSynth: Vector Synthesizers 11.1 The Vector Joystick Vector Mix Calculation AC and BD Mix Outputs 11.2 Vector Paths 11.3 Rotors and Orbits 11.4 Combining Paths and Orbits 11.5 The Moog AniMoog Anisotropic Synthesizer 11.6 VectorSynth and AniSynth Path Modes once loop sustain bckfrth back and forth 11.7 The Vector Joystick and JS Program in RackAFX Programming the CJoystickProgram Object Using the CJoystickProgram Object Construction Starting/Stopping Incrementing the Program 11.8 The Vector Joystick in VST3 Part One: Controller Part Two: GUI 11.9 The Vector Joystick in AU Part One: Declare the Controls Part Two: View Object Part Three: Interface Builder 11.10 Programming a Vector Path: VST3 and AU Programming the CVectorPathGenerator Object Programming Starting/Stopping Incrementing the Program 11.11 VectorSynth Specifications Oscillators Filters LFOs Voice Mode Vector Path Mode VST3 and AU 11.12 The CVectorSynthVoice Object Voice Global Parameters Constructor initGlobalParameters initializeModMatrix setSampleRate prepareForPlay update reset noteOn noteOff doVoice 11.13 VectorSynth Files Loading Samples 11.14 VectorSynth: RackAFX VectorSynth.h VectorSynth.cpp Constructor loadSamples initialize update 11.15 VectorSynth: VST3 Processor.h Processor.cpp Constructor loadSamples update doControlUpdate 11.16 VectorSynth: AU AUSynth.h AUSynth.cpp Constructor loadSamples update 11.17 AniSynth 11.18 AniSynth Specifications Oscillators: Filter: LFOs Wavetables 11.19 The CAniSynthVoice Object Constructor initializeGlobalParameters initializeModMatrix prepareForPlay createOscArray initOscWithFilePath initOscWithFolderPath setActiveCell doVoice 11.20 AniSynth Files 11.21 AniSynth: RackAFX, VST3, and AU 11.22 Challenges Bronze Silver Gold Platinum Diamond Bibliography Chapter 12 Designing Software Synthesizer Plug-Ins in C++ Chapter 12 DXSynth: FM Synthesizer 12.1 FM and PM Theory 12.2 FM Spectra FM and PM: PM: FM: 12.3 FM/PM Rules Rule One: Fundamental Frequency Rule Two: Spectral Purity Rule Three: Reflected Frequencies Rule Four: Inharmonicity 12.4 Dynamic Spectra 12.5 DXSynth Specifications 12.6 FM and PM in Oscillator Objects FM PM 12.7 Yamaha DX100 vs. DXSynth New Global Parameters 12.8 The CDXSynthVoice Object Constructor initGlobalParameters initializeModMatrix setSampleRate prepareForPlay reset update setLFO1Destination canNoteOff isVoiceDVone setOutputEGs doVoice Algorithm DX1 Algorithm DX2 Algorithm DX3 Algorithm DX4 Algorithm DX5 Algorithm DX6 Algorithm DX7 Algorithm DX8 Programming Ratios EGs Outputs 12.9 DXSynth Files Voice Declaration Updating the Voice 12.10 DXSynth: RackAFX 12.10 Create a new project named DXSynth and setup the GUI using Table 12.5 DXSynth.h DXSynth.cpp Constructor update processAudioFrame 12.11 DXSynth: VST3 Processor.h Processor.cpp Constructor update doControlUpdate 12.12 DXSynth: AU AUSynth.h AUSynth.cpp Constructor Initialize update 12.13 Challenges Bronze Silver Gold Platinum Diamond Bibliography Chapter 13 Designing Software Synthesizer Plug-Ins in C++ Chapter 13 Delay Effects 13.1 Circular Buffers 13.2 Delay Effect Topologies 13.3 The CDelayLine Object Initialize the variables and reset. The destructor not shown will delete the buffer. init resetDelay setSampleRate setDelay_mSec cookVariables readDelay readDelayAt writeDelayAndInc processAudio 13.4 The CStereoDelayFX Object Constructor reset prepareForPlay update processAudio 13.5 Using the CStereoDelayFX Object in Your Plug-ins Declaration Initialization Updating RackAFX and VST3: AU: Processing 13.6 MiniSynth + FX: RackAFX MiniSynth.h MiniSynth.cpp prepareForPlay update processAudioFrame 13.7 MiniSynth + FX: VST3 VSTSynthProcessor.h VSTSynthProcessor.cpp Constructor setState getState setActive update doControlUpdate Process VSTSynthController.cpp 13.8 MiniSynth + FX: AU AUSynth.h AUSynth.cpp Constructor Reset Initialize update Render 13.9 Challenges Bronze Silver Gold Platinum Diamond Bibliography Appendix A Designing Software Synthesizer Plug-Ins in C++ Appendix A A.1 Converting the VST3 TemplateSynth Nine Steps A.2 Converting the AU TemplateSynth Ten Steps end

Similar books