Designing Audio Effect Plugins in C++: For AAX, AU, and VST3 with DSP Theory
Will C. Pirkle
Résumé
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.
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 1/2 Nyquist
1.5.4 1/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 1/2 Nyquist ( /2)
10.6.4 1/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 1/2 Nyquist ( /2)
10.17.4 1/4 Nyquist ( /4)
10.18 2nd Order Feed-Forward Filter
10.18.1 DC (0Hz)
10.18.2 Nyquist ( )
10.18.3 1/2 Nyquist ( /2)
10.18.4 1/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 (R))
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 (R) 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
Caractéristiques techniques
PAPIER | |
Éditeur(s) | Taylor&francis |
Auteur(s) | Will C. Pirkle |
Parution | 08/05/2019 |
Nb. de pages | 656 |
EAN13 | 9781138591936 |
Avantages Eyrolles.com
Consultez aussi
- Les meilleures ventes en Graphisme & Photo
- Les meilleures ventes en Informatique
- Les meilleures ventes en Construction
- Les meilleures ventes en Entreprise & Droit
- Les meilleures ventes en Sciences
- Les meilleures ventes en Littérature
- Les meilleures ventes en Arts & Loisirs
- Les meilleures ventes en Vie pratique
- Les meilleures ventes en Voyage et Tourisme
- Les meilleures ventes en BD et Jeunesse