Audio Processing
The Wolfram Language provides built-in support for both programmatic and interactive audio processing, fully integrated with other powerful mathematical and algorithmic capabilities. You can process audio objects by applying linear and nonlinear filters, add effects, and analyze them using audio-specific functions or by exploiting the extensive integration with the rest of the Wolfram Language.
Filtering
Audio signals can be used as input to many signal processing functions.
LowpassFilter[audio,ωc] | apply a lowpass filter with a cutoff frequency ωc to audio |
HighpassFilter[audio,ωc] | apply a highpass filter with a cutoff frequency ωc to audio |
WienerFilter[audio,r] | apply Wiener filter with a range of r samples to audio |
MeanFilter[audio,r] | apply mean filter with a range of r samples to audio |
TotalVariationFilter[audio] | apply total variation filter to audio |
GaussianFilter[audio, r] | apply Gaussian filter with a range of r samples to audio |
Some of the filters that can be directly applied to audio objects.
Many of the filtering functions present in the Wolfram Language can be immediately used on audio objects. In many cases, it is possible to specify the cutoff frequency as a frequency Quantity.
Discrete-time transfer function models can be used to filter an audio object using RecurrenceFilter.
RecurrenceFilter[tf,audio] | uses a discrete-time filter defined by the TransferFunctionModel tf |
BiquadraticFilterModel[{"type",spec}] | creates a biquadratic filter of a given {"type",spec} |
ButterworthFilterModel[{"type",spec}] | creates a Butterworth filter of a given {"type",spec} |
TransferFunctionModel[m,s] | represents the model of the transfer-function matrix m with complex variable s |
ToDiscreteTimeModel[lsys,τ] | gives the discrete-time approximation, with sampling period τ, of the continuous-time systems models lsys |
Some of the available filter models and additional utilities.
The simplest way to use one of the analog (continuous-time) filter models is to discretize the transfer function using ToDiscreteTimeModel and apply the result to an audio object using RecurrenceFilter.
In[12]:= |
A discrete transfer function can be created using TransferFunctionModel and applied to an audio object with RecurrenceFilter.
In[14]:= |
Effects and Manipulation
An audio object can be modified and manipulated using built-in or user-defined functions.
AudioTimeStretch[audio,r] | apply time stretching by the specified factor r to audio |
AudioPitchShift[audio,r] | apply pitch shifting by the specified factor r to audio |
AudioReverb[audio] | apply a reverberation effect to audio |
AudioDelay[audio,delay] | apply a delay effect with delay time delay to audio |
AudioChannelMix[audio,desttype] | mix the channel of audio to the specified desttype |
Use pitch shifting and time stretching to independently modify pitch and duration of an audio signal.
Delay and reverberation effects can be used to immerse a recording in a virtual environment or to produce special effects.
Downmixing and upmixing to an arbitrary number of channels can be achieved using AudioChannelMix.
It is possible to alter a recording by taking advantage of performing arithmetic operations on the Audio object. All Wolfram Language operators and functions with attributes NumericFunction or Listable are overloaded to work with audio objects.
Analysis
Properties can be computed on a recording both on a global and a local scale.
AudioMeasurements[audio,"prop"] | compute the property "prop" for the entire audio |
Some of the functionality to compute global measurements.
Both time domain and frequency domain properties can be measured with AudioMeasurements. The properties are computed on the average sample values over the channels of the audio object.
Compute other measurements by directly applying built-in statistical functions.
In[34]:= |
Unlike AudioMeasurements, overloaded functions are applied to the flattened version of the data. If the input is a multichannel audio object, the sample values from all channels will be flattened in a single array.
In addition to global properties of audio objects, it is also possible to compute measurements locally.
AudioLocalMeasurements[audio,"prop"] | compute the property "prop" locally for partitions of audio |
AudioIntervals[audio,crit] | find the intervals of audio for which the criterion crit is satisfied |
Some of the functionality to compute local measurements..
In AudioLocalMeasurements, properties are computed locally: the signal is partitioned according to the PartitionGranularity specification, and the requested property is computed on each partition. The result is returned as a TimeSeries whose timestamps correspond to the center time of each partition.
The result of AudioLocalMeasurements or AudioMeasurements can be used as an input for other functionality in the Wolfram Language.
In[47]:= |
In[49]:= |
Using AudioIntervals allows you to extract intervals on which a user-defined criterion is satisfied.