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

Full description

Saved in:
Bibliographic Details
Online Access: Full Text (via O'Reilly/Safari)
Main Author: Pirkle, William C. (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.