Designing audio effect plugins in C++ : for AAX, AU, and VST3 with DSP theory / Will C. Pirkle.
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 cod...
Saved in:
Online Access: |
Full Text (via O'Reilly/Safari) |
---|---|
Main Author: | |
Format: | Electronic eBook |
Language: | English |
Published: |
New York, NY :
Routledge,
2019.
|
Edition: | Second edition. |
Subjects: |
Table of Contents:
- Cover
- Half Title
- Title
- Copyright
- Dedication
- Contents
- List of Figures
- List of Tables
- Preface
- Chapter 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.6.5.1 Gain, Attenuation and Phase Inversion
- 1.7 1st Order Feed-Forward and Feedback Algorithms
- 1.8 Bibliography
- Chapter 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 Multi-Threaded Software
- 2.6 Monolithic Plugin Objects
- 2.7 Bibliography
- Chapter 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
- Chapter 4: AU 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.7.2.1 The Event Lister Dispatch Callback Function
- 4.7.2.2 Creating the AU Event Listener
- 4.7.2.3 Destroying the Event Listener
- 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
- Chapter 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
- Chapter 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 and Discrete Integer Parameters
- 6.4.6.2 String-List Parameters
- 6.4.7 IIRFilters : Object Declarations and 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 vs. 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
- Chapter 7: Using RackAFX to Create ASPiK Projects
- 7.1 Installing RackAFX
- 7.2 Getting Started With RackAFX
- 7.3 Setting Up Your Project Preferences and Audio Hardware
- 7.4 Installing VSTGUI4
- 7.5 Creating a Project and Adding GUI Controls
- 7.5.1 Numerical Continuous Controls
- 7.5.2 String-List Controls
- 7.5.3 Meters
- 7.6 Anatomy of Your RackAFX Project
- 7.7 Testing Audio Algorithms With RackAFX
- 7.8 RackAFX Impulse Convolver and FIR Design Tools
- 7.9 Designing Your Custom GUI
- 7.10 Exporting Your ASPiK Project
- 7.11 Bibliography
- Chapter 8: C++ Conventions and 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.5.1 Series Objects
- 8.1.5.2 Parallel Objects
- 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
- Chapter 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 Feedback Filter
- 9.5 Final Observations
- 9.6 Homework
- 9.7 Bibliography
- Chapter 10: Basic DSP Theory
- 10.1 The Complex Sinusoid
- 10.2 Complex Math Review.