Audio Plugins in MATLAB
Role of Audio Plugins in Audio Toolbox
The audio plugin is the suggested paradigm for developing your audio processing algorithm in Audio Toolbox™. Once designed, the audio plugin can be validated, generated, and deployed to a third-party digital audio workstation (DAW).
Additional benefits of developing your audio processing as an audio plugin include:
- Rapid prototyping using the Audio Test Bench 
- Integration with MIDI devices 
- Code reuse 
Some understanding of object-oriented programming (OOP) in the MATLAB® environment is required to optimize your use of the audio plugin paradigm. If you are unfamiliar with these concepts, see Why Use Object-Oriented Design.
For a review of audio plugins as defined outside the MATLAB environment, see What Are DAWs, Audio Plugins, and MIDI Controllers?
Defining Audio Plugins in the MATLAB Environment
In the MATLAB environment, an audio
                plugin refers to a class derived from the audioPlugin base class or the audioPluginSource base class.

Audio Toolbox documentation uses the following terminology:
- A plugin is any audio plugin that derives from the - audioPluginclass or the- audioPluginSourceclass.
- A basic plugin is an audio plugin that derives from the - audioPluginclass.
- A basic source plugin is an audio plugin that derives from the - audioPluginSourceclass.
Audio plugins can also inherit from matlab.System. Any object that derives from matlab.System is referred to as a System object™. Deriving from matlab.System allows
                for additional functionality, including Simulink® integration. However, manipulating System objects requires a more
                advanced understanding of OOP in the MATLAB environment.
See Audio Toolbox Extended Terminology for a detailed visualization of inheritance and terminology.
Design a Basic Plugin
In this example, you create a simple plugin, and then gradually increase complexity. Your final plugin uses a circular buffer to add an echo effect to an input audio signal. For additional considerations for generating a plugin, see Export a MATLAB Plugin to a DAW.
- Define a Basic Plugin Class. Begin with a simple plugin that copies input to output without modification. - classdef myEchoPlugin < audioPlugin methods function out = process(~, in) out = in; end end end - myEchoPluginillustrates the two minimum requirements for audio plugin classes. They must:- Inherit from - audioPluginclass
- Have a - processmethod
 - The - processmethod contains the primary frame-based audio processing algorithm. It is called in an audio stream loop to process an audio signal over time.- By default, both the input to and output from the - processmethod have two channels (columns). The number of input rows (frame size) passed to- processis determined by the environment in which it is run. The output must have the same number of rows as the input.
- Add a Plugin Property. A property can store information in an object. Add a property, - Gain, to your class definition. Modify your- processmethod to multiply the input by the value specified by the- Gainproperty.- The first argument of the - processmethod has changed from- ~to- plugin. The first argument of- processis reserved for the audio plugin object.
- Add a Plugin Parameter. Plugin parameters are the interface between plugin properties and the plugin user. The definition of this interface is handled by - audioPluginInterface, which holds- audioPluginParameterobjects. To associate a plugin property to a parameter, specify the first argument of- audioPluginParameteras a character vector entered exactly as the property you want to associate. The remaining arguments of- audioPluginParameterspecify optional additional parameter attributes.- In this example, you specify a mapping between the value of the parameter and its associated property, as well as the parameter display name as it appears on a plugin dialog box. By specifying - 'Mapping'as- {'lin',0,3}, you set a linear mapping between the- Gainproperty and the associated user-facing parameter, with an allowable range for the property between 0 and 3.
- Add Private Properties. Add properties to store a circular buffer, a buffer index, and the N-sample delay of your echo. Because the plugin user does not need to see them, make - CircularBuffer,- BufferIndex, and- NSamplesprivate properties. It is best practice to initialize properties to their type and size.
- Add an Echo. In the - processmethod, write to and read from your circular buffer to create an output that consists of your input and a gain-adjusted echo. The first line of the- processmethod initializes the output to the size of the input. It is best practice to initialize your output to avoid errors when generating plugins.
- Make the Echo Delay Tunable. To allow the user to modify the - NSamplesdelay of the echo, define a public property,- Delay, and associate it with a parameter. Use the default- audioPluginParametermapping to allow the user to set the echo delay between 0 and 1 seconds.- Add a - setmethod that listens for changes to the- Delayproperty. Use the- getSampleRatemethod of the- audioPluginbase class to return the environment sample rate. Approximate a delay specified in seconds as a number of samples,- NSamples. If the plugin user modifies the- Delayproperty,- set.Delayis called and the delay in samples (- NSamples) is calculated. If the environment sample rate is above 192,000 Hz, the plugin does not perform as expected.
- Add a Reset Function. The - resetmethod of a plugin contains instructions to reset the plugin between uses or when the environment sample rate changes. Because- NSamplesdepends on the environment sample rate, update its value in the- resetmethod.
Design a System Object Plugin
You can map the basic plugin to a System object plugin. Note the differences between the two plugin types:
- A System object plugin inherits from both the - audioPluginbase class and the- matlab.Systembase class, not just- audioPluginbase class.
- The primary audio processing method of a System object plugin is named - stepImpl, not- process.
- The reset method of a System object is named - resetImpl, not- reset.
- Both - resetImpland- stepImplmust be defined as protected methods.
- System objects enable alternatives to the - setmethod. For more information, see- processTunedPropertiesImpl.
Quick Start Basic Plugin
Quick Start Basic Source Plugin
Quick Start System Object Plugin
Quick Start System Object Source Plugin
Audio Toolbox Extended Terminology
In the MATLAB environment, an audio plugin refers to a class derived from the
                    audioPlugin base class or the audioPluginSource base class. Audio plugins can also
                inherit from matlab.System. Any object that
                derives from matlab.System is referred to as a
                    System object. Deriving from matlab.System allows
                for additional functionality, including Simulink integration. However, manipulating System objects requires a more
                advanced understanding of OOP in the MATLAB environment.





