Skip to content

csteinmetz1/dasp-pytorch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dasp

Differentiable audio signal processors in PyTorch

  Includes reverberation, distortion, dynamic range processing, equalization, stereo processing.

  Enables virtual analog modeling, blind parameter estimation, automated DSP, and style transfer.

  Batching with operation on both CPU and GPU accelerators for fast training and reduced bottlenecks.

  Open source and free to use for academic and commercial applications under Apache 2.0 license.

Installation

pip install dasp-pytorch 

Or, for a local installation.

git clone https://github.com/csteinmetz1/dasp-pytorch cd dasp-pytorch pip install -e . 

Examples

dasp-pytorch is a Python library for constructing differentiable audio signal processors using PyTorch. These differentiable processors can be used standalone or within the computation graph of neural networks. We provide purely functional interfaces for all processors that enable ease-of-use and portability across projects. Unless oterhwise stated, all effect functions expect 3-dim tensors with shape (batch_size, num_channels, num_samples) as input and output. Using an effect in your computation graph is as simple as calling the function with the input tensor as argument.

Quickstart

Here is a minimal example to demonstrate reverse engineering the drive value of a simple distortion effect using gradient descent.

Try it for yourself: Open In Colab

import torch import torchaudio import dasp_pytorch # Load audio x, sr = torchaudio.load("audio/short_riff.wav") # create batch dim # (batch_size, n_channels, n_samples) x = x.unsqueeze(0) # apply some distortion with 16 dB drive drive = torch.tensor([16.0]) y = dasp_pytorch.functional.distortion(x, sr, drive) # create a parameter to optimizer drive_hat = torch.nn.Parameter(torch.tensor(0.0)) optimizer = torch.optim.Adam([drive_hat], lr=0.01) # optimize the parameter n_iters = 2500 for n in range(n_iters): # apply distortion with the estimated parameter y_hat = dasp_pytorch.functional.distortion(x, sr, drive_hat) # compute distance between estimate and target loss = torch.nn.functional.mse_loss(y_hat, y) # optimize optimizer.zero_grad() loss.backward() optimizer.step() print( f"step: {n+1}/{n_iters}, loss: {loss.item():.3e}, drive: {drive_hat.item():.3f}\r" ) 

For the remaining examples we will use the GuitarSet dataset. You can download the data using the following commands:

mkdir data wget https://zenodo.org/records/3371780/files/audio_mono-mic.zip unzip audio_mono-mic.zip rm audio_mono-mic.zip

More examples

Audio Processors

Audio Processor Functional Interface
Gain gain()
Distortion distortion()
Parametric Equalizer parametric_eq()
Dynamic range compressor compressor()
Dynamic range expander expander()
Reverberation noise_shaped_reverberation()
Stereo Widener stereo_widener()
Stereo Panner stereo_panner()
Stereo Bus stereo_bus()

Citations

If you use this library consider citing these papers:

Differentiable parametric EQ and dynamic range compressor

@article{steinmetz2022style, title={Style transfer of audio effects with differentiable signal processing}, author={Steinmetz, Christian J and Bryan, Nicholas J and Reiss, Joshua D}, journal={arXiv preprint arXiv:2207.08759}, year={2022} }

Differentiable artificial reveberation with frequency-band noise shaping

@inproceedings{steinmetz2021filtered, title={Filtered noise shaping for time domain room impulse   response estimation from reverberant speech}, author={Steinmetz, Christian J and Ithapu, Vamsi Krishna and Calamia, Paul}, booktitle={WASPAA}, year={2021}, organization={IEEE} }

Differentiable IIR filters

@inproceedings{nercessian2020neural, title={Neural parametric equalizer matching using differentiable biquads}, author={Nercessian, Shahan}, booktitle={DAFx}, year={2020} }
@inproceedings{colonel2022direct, title={Direct design of biquad filter cascades with deep learning   by sampling random polynomials}, author={Colonel, Joseph T and Steinmetz, Christian J and   Michelen, Marcus and Reiss, Joshua D}, booktitle={ICASSP}, year={2022}, organization={IEEE}

Acknowledgements

Supported by the EPSRC UKRI Centre for Doctoral Training in Artificial Intelligence and Music (EP/S022694/1).

           

About

Differentiable audio signal processors in PyTorch

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages