ABE-IPSABE HOLDINGABE BOOKS
English Polski
On-line access

Bookstore

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

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

Authors
Publisher Taylor & Francis Ltd
Year 09/05/2019
Pages 656
Version paperback
Readership level College/higher education
Language English
ISBN 9781138591936
Categories Audio processing
$81.01 (with VAT)
360.15 PLN / €77.22 / £67.03
Qty:
Delivery to United States

check shipping prices
Product to order
Delivery 3-4 weeks
Add to bookshelf

Book description

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.

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

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 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

We also recommend books

Strony www Białystok Warszawa
801 777 223