Designing Audio Effect Plugins in C++: For AAX, AU, and VST3 with DSP Theory

Author:   Will Pirkle (Assistant Professor of Music Engineering Technology, Frost School of Music, University of Miami.)
Publisher:   Taylor & Francis Ltd
Edition:   2nd edition
ISBN:  

9781138591936


Pages:   656
Publication Date:   09 May 2019
Format:   Paperback
Availability:   In Print   Availability explained
This item will be ordered in for you from one of our suppliers. Upon receipt, we will promptly dispatch it out to you. For in store availability, please contact us.

Our Price $124.00 Quantity:  
Add to Cart

Share |

Designing Audio Effect Plugins in C++: For AAX, AU, and VST3 with DSP Theory


Add your own review!

Overview

Designing Audio Effect Plugins in C++ presents everything you need to know about digital signal processing in an accessible way. Not just another theory-heavy digital signal processing book, nor another dull build-a-generic-database programming book, this book includes fully worked, downloadable code for dozens of professional audio effect plugins and practically presented algorithms. Sections include the basics of audio signal processing, the anatomy of a plugin, AAX, AU and VST3 programming guides; implementation details; and actual projects and code. More than 50 fully coded C++ audio signal-processing objects are included. Start with an intuitive and practical introduction to the digital signal processing (DSP) theory behind audio plug-ins, and quickly move on to plugin implementation, gain knowledge of algorithms on classical, virtual analog, and wave digital filters, delay, reverb, modulated effects, dynamics processing, pitch shifting, nonlinear processing, sample rate conversion and more. You will then be ready to design and implement your own unique plugins on any platform and within almost any host program. This new edition is fully updated and improved and presents a plugin core that allows readers to move freely between application programming interfaces and platforms. Readers are expected to have some knowledge of C++ and high school math.

Full Product Details

Author:   Will Pirkle (Assistant Professor of Music Engineering Technology, Frost School of Music, University of Miami.)
Publisher:   Taylor & Francis Ltd
Imprint:   Routledge
Edition:   2nd edition
Weight:   1.156kg
ISBN:  

9781138591936


ISBN 10:   1138591939
Pages:   656
Publication Date:   09 May 2019
Audience:   Professional and scholarly ,  Professional & Vocational
Format:   Paperback
Publisher's Status:   Active
Availability:   In Print   Availability explained
This item will be ordered in for you from one of our suppliers. Upon receipt, we will promptly dispatch it out to you. For in store availability, please contact us.

Table of Contents

"Table of Contents Dedication List of Figures List of Tables Preface 1 Introduction 1.1 Using This Book 1.2 Fundamentals of Audio Signal Processing 1.2.1 Acquisition of Audio Samples 1.3 Reconstruction of the Analog Signal 1.4 Numerical Representation of Audio Data 1.5 Analytical DSP Test Signals 1.5.1 DC and Step (0 Hz) 1.5.2 Nyquist 1.5.3 ½ Nyquist 1.5.4 ¼ Nyquist 1.5.5 Impulse 1.6 Signal Processing Algorithms 1.6.1 Bookkeeping 1.6.2 The One-Sample Delay 1.6.3 Multiplication With a Scalar Value 1.6.4 Addition and Subtraction 1.6.5 Some Algorithm Examples and Difference Equations 1.7 1st Order Feed Forward and Feed Back Algorithms 1.8 Bibliography 2 Anatomy of an Audio Plugin 2.1 Plugin Packaging: Dynamic-Link Libraries (DLLs) 2.2 The Plugin Description: Simple Strings 2.2.1 The Plugin Description: Features and Options 2.3 Initialization: Defining the Plugin Parameter Interface 2.3.1 Initialization: Defining Channel I/O Support 2.3.2 Initialization: Sample Rate Dependency 2.4 Processing: Preparing for Audio Streaming 2.4.1 Processing: Audio Signal Processing (DSP) 2.5 Mixing Parameter Changes with Audio Processing 2.5.1 Plugin Variables and Plugin Parameters 2.5.2 Parameter Smoothing 2.5.3 Pre and Post-Processing Updates 2.5.4 VST3 Sample Accurate Updates 2.5.5 Multithreaded Software 2.6 Monolithic Plugin Objects 2.7: Bibliography 3 VST3 Programming Guide 3.1 Setting up the VST3 SDK 3.1.1 VST3 Sample Projects 3.1.2 VST3 Documentation 3.2 VST3 Architecture and Anatomy 3.2.1 Single vs. Dual Component Architectures 3.2.2 VST3 Base Classes 3.2.3 MacOS Bundle ID 3.2.4 VST3 Programming Notes 3.2.5 VST3 and the GUID 3.2.6 VST3 Plugin Class Factory 3.3 Description: Plugin Description Strings 3.4 Description: Plugin Options/Features 3.4.1 Side Chain Input 3.4.2 Latency 3.4.3 Tail Time 3.4.4 Custom GUI 3.4.5 Factory Presets and State Save/Load 3.4.6 VST3 Support for 64-bit Audio 3.5 Initialization: Defining Plugin Parameters 3.5.1 Thread Safe Parameter Access 3.5.2 Initialization: Defining Plugin Channel I/O Support 3.5.3 Initialization: Channel Counts and Sample Rate Information 3.6 The Buffer Process Cycle 3.6.1 Processing: Updating Plugin Parameters from GUI Controls 3.6.2 Processing: Resetting the Algorithm and Preparing for Streaming 3.6.3 Processing: Accessing the Audio Buffers 3.6.4 Processing: Writing Output Parameters 3.6.5 Processing: VST3 Soft Bypass 3.7 Destruction/Termination 3.8 Retrieving VST3 Host Information 3.9 Validating your Plugin 3.10 Using ASPiK to Create VST3 Plugins 3.11 Bibliography 4 Audio Unit Programming Guide 4.1 Setting up the AU SDK 4.1.1 AU Sample Projects 4.1.2 AU Documentation 4.2 AU Architecture and Anatomy 4.2.1 AU Base Classes 4.2.2 MacOS Bundle ID 4.2.3 AU Programming Notes 4.3 Description: Plugin Description Strings 4.4 Description: Plugin Options/Features 4.4.1 Side Chain Input 4.4.2 Latency 4.4.3 Tail Time 4.4.4 Custom GUI 4.4.5 Factory Presets and State Save/Load 4.5 Initialization: Defining Plugin Parameters 4.5.1 Thread Safe Parameter Access 4.5.2 Initialization: Defining Plugin Channel I/O Support 4.5.3 Initialization: Channel Counts and Sample Rate Information 4.6 The Buffer Process Cycle 4.6.1 Processing: Updating Plugin Parameters from GUI Controls 4.6.2 Processing: Resetting the Algorithm and Preparing for Streaming 4.6.3 Processing: Accessing the Audio Buffers 4.6.4 Processing: Writing Output Parameters 4.7 The AU/GUI Connection 4.7.1 Cocoa’s Flat Namespace 4.7.2 The AU Event Listener System 4.8 Destruction/Termination 4.9 Retrieving AU Host Information 4.10 Validating your Plugin 4.11 Using ASPiK to Create AU Plugins 4.12 Bibliography 5 AAX Native Programming Guide 5.1 Setting up the AAX SDK 5.1.1 AAX Sample Projects 5.1.2 AAX Documentation 5.2 AAX Architecture and Anatomy 5.2.1 AAX Model-Algorithm Synchronization 5.2.2 AAX Base Classes 5.2.3 MacOS Bundle ID 5.2.4 AAX Programming Notes 5.2.5 AAX Class Factory 5.2.6 AAX Effect Categories 5.2.7 AAX Algorithms: Channel Processing Functions 5.2.8 AAX Algorithm Data 5.2.9 Algorithm Data Contents 5.3 Description: Plugin Description Strings 5.3.1 Description: Defining AAX Algorithms 5.4 Description: Plugin Options/Features 5.4.1 Side Chain Input 5.4.2 Latency 5.4.3 Tail Time 5.4.4 Custom GUI 5.4.5 Factory Presets and State Save/Load 5.4.6 AAX Notification System 5.4.7 AAX Custom Data 5.4.8 AAX EQ and Dynamics Curves 5.4.9 AAX Gain Reduction Meter 5.5 Initialization: Defining Plugin Parameters 5.5.1 Thread Safe Parameter Access 5.5.2 Initialization: Defining Plugin Channel I/O Support 5.5.3 Initialization: Channel Counts and Sample Rate Information 5.6 The Buffer Process Cycle 5.6.1 Processing: Updating Plugin Parameters from GUI Controls 5.6.2 Processing: Resetting the Algorithm and Preparing for Streaming 5.6.3 Processing: Accessing the Audio Buffers 5.6.4 Processing: Writing Output Parameters 5.6.5 Processing: AAX Soft Bypass 5.7 Destruction/Termination 5.8 Retrieving AAX Host Information 5.9 Validating your Plugin 5.10 Using ASPiK to Create AAX Plugins 5.11 Bibliography 6 ASPiK Programming Guide 6.1 Plugin Kernel Portability and Native Plugin Shells 6.2 Organizing the SDKs: AAX, AU and VST 6.2.1 Your C++ Compiler 6.2.2 Setting up the AAX SDK 6.2.3 Setting up the AU SDK 6.2.4 Setting up the VST SDK 6.2.5 Creating the Universal SDK Folder Hierarchy 6.2.6 Adding the VSTGUI4 Library 6.2.7 CMake 6.3 Creating a Plugin Project with ASPiKreator: IIRFilters 6.3.1 ASPiK Project Folders 6.3.2 Running CMake 6.4 Adding Effect Objects to the PluginCore 6.4.1 The PluginCore Constructor 6.4.2 IIRFilters: GUI Parameter Lists 6.4.3 Parameter Smoothing 6.4.4 Handling the String-List Parameters 6.4.5 IIRFilters: Declaring Plugin Variables 6.4.6 Parameter Object Enumerations for Attributes 6.4.6.1 Continuous Floating Point Parameters & Discrete Integer Parameters 6.4.6.2 String-List Parameters 6.4.7 IIRFilters Object Declarations & Reset 6.4.8 IIRFilters: GUI Parameter Updates 6.4.9 IIRFilters: Processing Audio Data 6.4.10 Buffer Pre-Processing 6.4.11 Buffer Post-Processing 6.4.12 Buffer versus Frame Processing 6.4.13 processAudioFrame: Information About the Frame 6.4.14 processAudioFrame: Input and Output Samples 6.5 Defining Factory Presets 6.6 Basic Plugin GUI Design with ASPiK’s PluginGUI 6.7 GUI Design with VSTGUI4 6.7.1 Modifier Keys 6.7.2 Zooming (Scaling the GUI) 6.7.3 Reserved control-tags 6.7.4 VSTGUI4 Objects 6.7.5 Creating a GUI with VSTGUI 6.7.6 Important GUI Designer Terms 6.8 VSTGUI C++ Objects 6.8.1 Basic GUI Design 6.8.2 The GUI Designer Workspace 6.8.3 Changing Your GUI Canvas Size 6.8.4 Setting up the Control Tags 6.8.5 Importing the Graphics Files 6.8.6 Assembling the GUI 6.8.7 Setting the Background 6.8.8 Adding the GUI Elements 6.8.9 Saving and Re-building 6.8.10 Scaling the GUI 6.8.11 More ASPiK Features 6.9 Bibliography 7 Using RackAFX to Create ASPiK Projects 1 7.1 Installing RackAFX 2 7.2 Getting Started with RackAFX 2 7.3 Setting up Your Project Preferences & Audio Hardware 4 7.4 Installing VSTGUI4 4 7.5 Creating a Project and Adding GUI Controls 4 7.5.1 Numerical Continuous Controls 7 7.5.2 String-List Controls 8 7.5.3 Meters 10 7.6 Anatomy of your RackAFX project 11 7.7 Testing Audio Algorithms with RackAFX 13 7.8 RackAFX Impulse Convolver and FIR Design Tools 14 7.9 Designing Your Custom GUI 16 7.10 Exporting Your ASPiK Project 17 7.11 Bibliography 8 C++ Conventions & How to Use This Book 8.1 Three Types of C++ Objects 8.1.1 Effect Objects Become Framework Object Members 8.1.2 All Effect Objects and Most DSP Objects Implement Common Interfaces 8.1.3 DSP and Effect Objects use Custom Data Structures for Parameter Get/Set Operations 8.1.4 Effect Objects Accept Native Data from GUIs 8.1.5 Effect Objects Process Audio Samples 8.1.6 Effect Objects Optionally Process Frames 8.2 Book Projects 8.2.1 ASPiK Users 8.2.2 JUCE and other non-ASPiK Users 8.2.3 A Sample Plugin Project: GUI Control Definition 9 How DSP Filters Work (Without Complex Math) 9.1 Frequency and Phase Response Plots 9.2 Frequency and Phase Adjustments from Filtering 9.3 1st Order Feed-Forward Filter 9.4 1st Order Feed-Back Filter 9.5 Final Observations 9.6 Homework 9.7 Bibliography 10 Basic DSP Theory 10.1 The Complex Sinusoid 10.2 Complex Math Review 10.3 Time Delay as a Math Operator 10.4 The Sampled Sinusoid 10.5 1st Order Feed-Forward Filter Revisited 10.5.1 Negative Frequencies 10.6 Evaluating the Transfer Function H(ω) 10.6.1 DC (0Hz) 10.6.2 Nyquist (π) 10.6.3 ½ Nyquist (π/2) 10.6.4 ¼ Nyquist (π/4) 10.7 Evaluating ejω 10.8 The z-Substitution 10.9 The z-Transform 10.10 The z Transform of Signals 10.11 The z Transform of Difference Equations 10.12 The z Transform of an Impulse Response 10.13 The ""Zeros"" of the Transfer Function 10.14 Estimating the Frequency Response: Zeros 10.15 Filter Gain Control 10.16 1st Order Feedback Filter Revisited 10.17 The Poles of the Transfer Function 10.17.1 DC (0 Hz) 10.17.2 Nyquist (π) 10.17.3 ½ Nyquist (π/2) 10.17.4 ¼ Nyquist (π/4) 10.18 2nd Order Feed-Forward Filter 10.18.1 DC (0Hz) 10.18.2 Nyquist (π) 10.18.3 ½ Nyquist (π/2) 10.18.4 ¼ Nyquist (π/4) 10.18.5 z Transform of Impulse Response 10.19 2nd Order Feedback Filter 10.19.1 DC (0Hz) 10.20 1st Order Pole/Zero Filter: the Shelving Filter 10.20.1 DC (0Hz) 10.21 The Bi-Quadratic Filter 10.21.1 The aN and bM Coefficient Naming Conventions 10.22 Other Biquadratic Structures 10.23 C++ DSP Object: Biquad 10.23.1 Biquad: Enumerations and Data Structure 10.23.2 Biquad: Members 10.23.3 Biquad: Programming Notes 10.24 Homework 10.25 Bibliography 11 Audio Filter Designs: IIR Filters 11.1 Direct z-Plane Design 11.1.1 Simple Resonator 11.1.2 Smith-Angell Resonator 11.2 Analog Filter to Digital Filter Conversion 11.3 Audio Bi-quad Filter Designs 11.3.1 The Audio Bi-quad Filter Structure 11.3.2 Classical Filters 11.4 Poles and Zeros at Infinity 11.4.1 1st Order All-Pole Filter 11.4.2 2nd Order All-Pole Filter: The MMA LPF 11.4.3 Vicanek’s Analog Matched Magnitude 2nd Order LPF 11.4.4 Vicanek’s Analog Matched Magnitude 2nd Order BPF 11.5 The Impulse Invariant Transform Method 11.5.1 Impulse Invariant 1st Order LPF 11.5.2 Impulse Invariant 2nd Order LPF 11.6 C++ Effect Object: AudioFilter 11.6.1 AudioFilter: Enumerations and Data Structure 11.6.2 AudioFilter: Members 11.6.3 AudioFilter: Programming Notes 11.7 Chapter Plugin: IIRFilters 11.7.1 IIRFilters GUI Parameters 11.7.2 IIRFilters Object Declarations and Reset 11.7.3 IIRFilters GUI Parameter Update 11.7.4 IIRFilters Process Audio 11.8 Homework 11.9 Bibliography 12 Audio Filter Designs: Wave Digital and Virtual Analog 12.1 Wave Digital Filters 12.1.1 Scattering Parameters and WDFs 12.1.2 Simulating WDF Components 12.1.3 Simulating WDF Component Interconnections 12.2 WDF Adaptors 12.2.1 Series Adaptors 12.2.2 Parallel Adaptors 12.2.3 More Component Combinations 12.2.4 Signal Flow Through a WDF Circuit 12.2.5 Ladder Filter WDF Library Conventions 12.2.6 Filter Source/Termination Impedance Matching 12.2.7 Bilinear Transform Frequency Warping 12.3 Designing Digital Ladder Filters with the WDF Library 12.3.1 WDF Ladder Filter Design: 3rd Order Butterworth LPF 12.3.2 WDF Ladder Filter Design: 3rd Order Bessel BSF 12.3.3 WDF Ladder Filter Design: 6th Order Constant-K BPF 12.3.4 WDF Ladder Filter Design: Ideal 2nd Order RLC Filters 12.4 Zavalishin’s Virtual Analog Filters 12.4.1 1st Order VA Filters 12.4.2 2nd Order State Variable VA Filter 12.5 C++ DSP Object: ZVAFilter 12.5.1 ZVAFilter: Enumerations and Data Structure 12.5.2 ZVAFilter: Members 12.5.3 ZAFilter: Programming Notes 12.6 C++ DSP Objects: WDF Ladder Filter Library 12.6.1 WDFIdealRLCxxx: Enumerations and Data Structure 12.6.2 WDFIdealRLCxxx: Members 12.6.3 WDFIdealRLCxxx: Programming Notes 12.7 Chapter Plugin: RLCFilters 12.7.1 RLCFilters GUI Parameters 12.7.2 RLCFilters Object Declarations and Reset 12.7.3 RLCFilters GUI Parameter Update 12.7.4 RLCFilters Process Audio 12.8 Homework 12.9 Bibliography 13 Modulators: LFOs and Envelope Detectors 13.1 LFO Algorithms 13.1.1 The IAudioSignalGenerator Interface 13.1.2 C++ DSP Object: LFO 13.1.3 LFO: Enumerations and Data Structure 13.1.4 LFO: Members 13.1.5 LFO: Programming Notes 13.2 Envelope Detection 13.2.1 C++ DSP Object: AudioDetector 13.2.2 AudioDetector: Enumerations and Data Structure 13.2.3 AudioDetector: Members 13.2.4 AudioDetector: Programming Notes 13.3 Modulating Plugin Parameters 13.3.1 Modulation Range, Polarity and Depth 13.3.2 Modulation with the Envelope Detector 13.4 C++ Effect Object: EnvelopeFollower 13.4.1 EnvelopeFollower: Enumerations and Data Structure 13.4.2 EnvelopeFollower: Members 13.4.3 EnvelopeFollower: Programming Notes 13.5 Chapter Plugin 1: ModFilter 13.5.1 ModFilter GUI Parameters 13.5.2 ModFilter Object Declarations and Reset 13.5.3 ModFilter GUI Parameter Update 13.5.4 ModFilter Process Audio 13.6 The Phaser Effect 13.6.1 C++ Effect Object: PhaseShifter 13.6.2 PhaseShifter: Enumerations and Data Structure 13.6.3 PhaseShifter: Members 13.6.4 PhaseShifter: Programming Notes 13.7 Chapter Plugin 2: Phaser 13.7.1 Phaser GUI Parameters 13.7.2 Phaser Object Declarations and Reset 13.7.3 Phaser GUI Parameter Update 13.7.4 Phaser Process Audio 13.8 Homework 13.9 Bibliography 14 Delay Effects and Circular Buffers 14.1 The Basic Digital Delay 14.2 Digital Delay with Wet/Dry Mix 14.3 An Efficient Circular Buffer Object 14.3.1 C++ DSP Object: CircularBuffer with Fractional Delay 14.3.2 CircularBuffer: Enumerations and Data Structure 14.3.3 CircularBuffer: Members 14.3.4 CircularBuffer: Programming Notes 14.4 Basic Delay Algorithms 14.4.1 Stereo Delay with Feedback 14.4.2 Stereo Ping-Pong Delay 14.5 C++ Effect Object: AudioDelay 14.5.1 AudioDelay: Enumerations and Data Structure 14.5.2 AudioDelay: Members 14.5.3 AudioDelay: Programming Notes 14.6 Chapter Plugin: StereoDelay 14.6.1 StereoDelay GUI Parameters 14.6.2 StereoDelay Object Declarations and Reset 14.6.3 StereoDelay GUI Parameter Update 14.6.4 StereoDelay Process Audio 14.6.5 Synchronizing the Delay time to BPM 14.7 More Delay Algorithms 14.7.1 Analog Modeling Delay 14.7.2 Multi-Tap Delay 14.7.3 LCR Delay 14.7.4 TC Electronics TC-2290 Dynamic Delay 14.8 Homework 14.9 Bibliography 15 Modulated Delay Effects 15.1 The Flanger/Vibrato Effect 15.1.1 Stereo Flanger 15.2 The Chorus Effect 15.2.1 Stereo Chorus 15.3 C++ Effect Object: ModulatedDelay 15.3.1 ModulatedDelay: Enumerations and Data Structure 15.3.2 ModulatedDelay: Members 15.3.3 ModulatedDelay: Programming Notes 15.4 Chapter Plugin: ModDelay 15.4.1 ModDelay GUI Parameters 15.4.2 ModDelay Object Declarations and Reset 15.4.3 ModDelay GUI Parameter Update 15.4.4 ModDelay Process Audio 15.5 More Modulated Delay Algorithms 15.5.1 Korg Stereo Cross-Feedback Flanger/Chorus 15.5.2 Sony DPS-M7 Multi-Flanger 15.5.3 Bass Chorus 15.5.4 Dimension-style Chorus (Roland Dimension D®) 15.5.5 Sony DPS-M7 Deca Chorus 15.6 Homework 15.7 Bibliography 16 Audio Filter Designs: FIR Filters 16.1 The Impulse Response Revisited: Convolution 16.2 FIR Filter Structures 16.3 Generating Impulse Responses 16.3.1 Impulse Responses of Acoustic Environments 16.3.2 Impulse Responses of Speakers and Cabinets 16.3.3 Impulse Responses by Frequency Sampling 16.3.4 Sampling Arbitrary Frequency Responses 16.3.5 Sampling Analog Filter Frequency Responses 16.3.6 Sampling Ideal Filter Frequency Responses 16.4 The Optimal/Parks-McClellan Method 16.5 Other FIR Design Methods 16.6 C++ DSP Function: freqSample 16.7 C++ DSP Function: calculateAnalogMagArray 16.7.1 calculateAnalogMagArray: Enumerations and Data Structure 16.7.2 calculateAnalogMagArray: Calculations 16.8 C++ DSP Object: LinearBuffer 16.8.1 LinearBuffer: Enumerations and Data Structure 16.8.2 LinearBuffer: Members 16.8.3 LinearBuffer: Programming Notes 16.9 C++ DSP Object: ImpluseConvolver 16.9.1 ImpluseConvolver: Enumerations and Data Structure 16.9.2 ImpluseConvolver: Members 16.9.3 ImpluseConvolver: Programming Notes 16.10 C++ Effect Object: AnalogFIRFilter 16.10.1 AnalogFIRFilter: Enumerations and Data Structure 16.10.2 AnalogFIRFilter: Members 16.10.3 AnalogFIRFilter: Programming Notes 16.11 Chapter Plugin: AnalogFIR 16.11.1 AnalogFIR GUI Parameters 16.11.2 AnalogFIR Object Declarations and Reset 16.11.3 AnalogFIR GUI Parameter Update 16.11.4 AnalogFIR Process Audio 16.12 Homework 16.13 Bibliography 17 Reverb Effects 17.1 Anatomy of a Room Impulse Response 17.1.1 RT60 17.2 Echoes and Modes 17.3 The Comb Filter Reverberator 17.4 The Delaying All-Pass Reverberator 17.4.1 Alternate & Nested Delaying APF Structures 17.5 Schroeder’s Reverberator 17.6 The LPF-Comb Reverberator 17.7 The Absorbent-APF Reverberator 17.8 The Modulated Delay APF 17.9 Moorer’s Reverberator 17.10 Dattorro’s Plate Reverb 17.11 The Spin Semiconductor® Reverb Tank 17.12 Generalized Feedback Delay Network Reverbs 17.12.1 Searching for FDN Coefficients 17.13 C++ DSP Objects: Reverb Objects 17.13.1 C++ DSP Object: SimpleDelay 17.13.2 SimpleDelay: Custom Data Structure 17.13.3 SimpleDelay: Members 17.13.4 SimpleDelay: Programming Notes 17.13.5 C++ DSP Object: SimpleLPF 17.13.6 SimpleLPF: Custom Data Structure 17.13.7 SimpleLPF: Members 17.13.8 SimpleLPF: Programming Notes 17.13.9 C++ DSP Object: CombFilter 17.13.10 CombFilter: Custom Data Structure 17.13.11 CombFilter: Members 17.13.12 CombFilter: Programming Notes 17.13.13 C++ DSP Object: DelayAPF 17.13.14 DelayAPF: Custom Data Structure 17.13.15 DelayAPF: Members 17.13.16 DelayAPFParameters: Programming Notes 17.13.17 C++ DSP Object: NestedDelayAPF 17.13.18 NestedDelayAPF: Custom Data Structure 17.13.19 NestedDelayAPF: Members 17.13.20 NestedDelayAPF: Programming Notes 17.13.21 C++ DSP Object: TwoBandShelvingFilter 17.13.22 TwoBandShelvingFilter: Custom Data Structure 17.13.23 TwoBandShelvingFilter: Members 17.13.24 TwoBandShelvingFilter: Programming Notes 17.14 C++ Effect Object: ReverbTank 17.14.1 ReverbTank: Enumerations and Data Structure 17.14.2 ReverbTank: Members 17.14.3 ReverbTank: Programming Notes 17.15 Chapter Plugin: Reverb 17.15.1 Reverb GUI Parameters 17.15.2 Reverb Object Declarations and Reset 17.15.3 Reverb GUI Parameter Update 17.15.4 Reverb Process Audio 17.16 Homework 17.17 Bibliography 18 Dynamics Processing 18.1 Compressor Output Calculation 18.1.1 Hard-Knee Compressor & Limiter 18.1.2 Soft-Knee Compressor & Limiter 18.2 Downward Expander Output Calculation 18.2.1 Hard-Knee Expander & Gate 18.2.2 Soft-Knee Expander 18.3 Final Gain Calculation 18.4 Stereo Linked Dynamics Processor 18.5 Spectral Dynamics Processing 18.6 Parallel Dynamics Processing 18.7 Look-Ahead Processing 18.8 External Keying 18.8.1 ASPiK Users: Side chain Code 18.9 Gain Reduction Metering 18.10 Alternate Side-Chain Configurations 18.11 C++ DSP Object: LRFilterBank 18.11.1 LRFilterBank: Enumerations and Data Structure 18.11.2 LRFilterBank: Members 18.11.3 LRFilterBank: Programming Notes 18.12 C++ Effect Object: DynamicsProcessor 18.12.1 DynamicsProcessor: Enumerations and Data Structure 18.12.2 DynamicsProcessor: Members 18.12.3 DynamicsProcessor: Programming Notes 18.13 Chapter Plugin: Dynamics 18.13.1 Dynamics GUI Parameters 18.13.2 Dynamics Object Declarations and Reset 18.13.3 Dynamics GUI Parameter Update 18.13.4 Dynamics Process Audio & External Keying 18.13.5 Stereo Linking the DynamicsProcessor Objects 18.13.6 ASPiK Users: Enabling the Special Pro-Tools Gain Reduction Meter 18.14 Homework 18.15 Bibliography 19 Nonlinear Processing: Distortion, Tube Simulation and HF Exciters 19.1 Frequency Domain Effects of Nonlinear Processing 19.2 Vacuum Tubes 19.3 Solid State Distortion 19.4 Bit Crushers 19.5 High Frequency Exciters 19.6 Virtual Bass 19.7 Ring Modulation 19.8 Nonlinear Processing Functions 19.8.1 Asymmetrical Waveshaping 19.9 C++ DSP Object: BitCrusher 19.9.1 BitCrusher: Enumerations and Data Structure 19.9.2 BitCrusher: Members 19.9.3 BitCrusher: Programming Notes 19.10 C++ DSP Object: DFOscillator 19.10.1 DFOscillator: Enumerations and Data Structure 19.10.2 DFOscillator: Members 19.10.3 DFOscillator: Programming Notes 19.11 C++ DSP Functions: Waveshapers 19.12 C++ DSP Object: TriodeClassA 19.12.1 TriodeClassA: Enumerations and Data Structure 19.12.2 TriodeClassA: Members 19.12.3 TriodeClassA: Programming Notes 19.13 C++ Effect Object: ClassATubePre 19.13.1 ClassATubePre: Enumerations and Data Structure 19.13.2 ClassATubePre: Members 19.13.3 ClassATubePre: Programming Notes 19.14 Chapter Plugin: TubePreamp 19.14.1 TubePreamp GUI Parameters 19.14.2 TubePreamp Object Declarations and Reset 19.14.3 TubePreamp GUI Parameter Update 19.14.4 TubePreamp Process Audio 19.15 Bonus Plugin Projects 19.16 Homework 19.17 Bibliography 20 FFT Processing: the Phase Vocoder 20.1 The Fourier Series 20.2 Understanding How the Fourier Kernel Works 20.2.1 Windowing DFT Input Data 20.3 The Complete DFT 20.4 The FFT 20.4.1 Overlap/Add Processing 20.4.2 Window Gain Correction 20.4.3 FFT and IFFT Magnitude and Phase 20.4.4 Using Phase Information 20.4.5 Phase Deviation 20.4.6 Phase Vocoder Coding 20.5 Some Phase Vocoder Effects 20.5.1 Robot and Simple Noise Reduction 20.5.2 Time Stretching/Shrinking 20.5.3 Pitch Shifting 20.5.4 Phase Locking 20.6 Fast Convolution 20.7 Gardner’s Fast Convolution 20.8 Chapter Objects and Plugins 20.9 C++ DSP Object: FastFFT 20.9.1 FastFFT: Enumerations and Data Structure 20.9.2 FastFFT: Members 20.9.3 FastFFT: Programming Notes 20.10 C++ DSP Object: PhaseVocoder 20.10.1 PhaseVocoder: Enumerations and Data Structure 20.10.2 PhaseVocoder: Members 20.10.3 PhaseVocoder: Programming Notes 20.11 C++ DSP Object: FastConvolver 20.11.1 FastConvolver: Members 20.11.2 FastConvolver: Programming Notes 20.12 C++ Effect Object: PSMVocoder 20.12.1 PSMVocoder: Enumerations and Data Structure 20.12.2 PSMVocoder: Members 20.12.3 PSMVocoder: Programming Notes 20.13 Chapter Plugin: PitchShifter 20.13.1 PitchShifter GUI Parameters 20.13.2 PitchShifter GUI Parameter Update 20.13.3 Phaser Process Audio 20.14 3rd Party C++ DSP Object: TwoStageFFTConvolver 20.15 Homework 20.16 Bibliography 21 Displaying Custom Waveforms & FFTs 21.1 Custom Views for Plotting Data 21.1.1 ASPiK: The GUI Lifecycle and Messaging 21.1.2 Multithreading: the Lock-Free Ring Buffer 21.1.3 A Waveform Histogram Viewer 21.1.4 An Audio Spectrum Analyzer View 21.2 Download the Project 22 Sample Rate Conversion 22.1 Interpolation: Overview 22.1.1 Interpolation: Operations 22.1.2 Interpolation: Polyphase Decomposition 22.2 Decimation: Overview 22.2.1 Decimation: Operations 22.2.2 Decimation: Polyphase Decomposition 22.3 Polyphase Decomposition Math 22.3.1 Type-1 Decomposition 22.3.2 Type-2 Decomposition 22.4 C++ DSP Objects: Interpolator & Decimator 22.4.1 C++ DSP Object: Interpolator 22.4.2 Interpolator: Enumerations and Data Structure 22.4.3 Interpolator: Members 22.4.4 Interpolator: Programming Notes 22.4.5 C++ DSP Object: Decimator 22.4.6 Decimator: Enumerations and Data Structure 22.4.7 Decimator: Members 22.4.8 Decimator: Programming Notes 22.5 Chapter Plugin: TubePreamp Revisited 22.6 Homework 22.7 References Index"

Reviews

Author Information

Will C. Pirkle is Associate Professor and Program Director of Music Engineering Technology at the University of Miami Frost School of Music. He teaches classes in C++ Audio Programming, Signal Processing, Audio Synthesis, and Mobile App Programming. In addition to 14 years of teaching at the University of Miami, Will has 20 years of experience in the audio industry working and consulting for such names as Korg Research and Development, SiriusXM Radio, Diamond Multimedia, Gibson Musical Instruments, and National Semiconductor Corporation. An avid guitarist and studio owner, Will still seeks projects that combine all his skills.

Tab Content 6

Author Website:  

Customer Reviews

Recent Reviews

No review item found!

Add your own review!

Countries Available

All regions
Latest Reading Guide

wl

Shopping Cart
Your cart is empty
Shopping cart
Mailing List