Skip to content

jatinchowdhury18/Feedback-Delay-Networks

Repository files navigation

Feedback Delay Networks

Build Status

Research project looking at feedback delay network reverbs effects with nonlinear and/or time-varying elements. This repo contains realtime plugins implementing these reverbs, as well as a test bench for developing new effects.

Instructions

Dependencies

This project depends on JUCE, FRUT, and CMake. FRUT and JUCE are included in this repository as submodules. However, CMake must be installed by the user.

Installation

To install the build chain for these FDN reverbs, simply clone the repo and run the setup script.

$ git clone https://github.com/jatinchowdhury18/Feedback-Delay-Networks.git
$ cd Feedback-Delay-Networks
$ ./setup.sh

Building a plugin

As an example of how to build a plugin from this repo, we'll walk through the example process of building the BaseFDN plugin.

# Starting from the repo root
$ cd BaseFDN
$ mkdir build && cd build/
$ cmake ..
$ cmake --build .

The plugin will be built as a Standalone Application, a VST3 plugin, and (on Mac only) an AU plugin.

By default, the plugins will be built with the ReverbTester test bench. To compile without the test bench, comment out the definition at the top of the CMakeLists.txt file.

# Comment this line to build without the reverb tester
add_definitions(-DBUILD_WITH_REVERB_TESTER)

Creating a new plugin

To create a new plugin, use the create.sh script in the root of the repository. For more information run ./create.sh --help.

For an example of how to build out a full plugin from the template, including adding plugin parameters, DSP processing, and more, see BaseFDN/.

Plugin GUI

Plugin GUIs are generated automatically using foleys_gui_magic. To customize your own plugin GUI, turn on the GUI editor pallette from CMakeLists.txt.

jucer_project_module(
    foleys_gui_magic
    PATH "${CMAKE_CURRENT_LIST_DIR}/../modules"
    FOLEYS_SHOW_GUI_EDITOR_PALLETTE OFF # Turn on to edit your GUI!
)

Once your GUI is customized to your liking, save to an XML file, and add it to your project as a Binary Resource:

jucer_project_files("MyFDN/Source"
# Compile   Xcode     Binary    File
#           Resource  Resource
  .         .         .         "${CMAKE_CURRENT_LIST_DIR}/Source/Processor.h"
  x         .         .         "${CMAKE_CURRENT_LIST_DIR}/Source/Processor.cpp"
  .         .         x         "${CMAKE_CURRENT_LIST_DIR}/Source/gui.xml"
)

Finally, use the createEditor() function to return a GUI generated from the XML file.

AudioProcessorEditor* MyFDNProcessor::createEditor()
{
    // Create GUI using Foley's editor with xml config for this plugin
    return new foleys::MagicPluginEditor (magicState,
        BinaryData::gui_xml, BinaryData::gui_xmlSize);
}

For a full example of a custom GUI built with Foley's GUI Magic, see BaseFDN/.

Suggested Workflow

If you would like to contribute to the repository, please complete your work on a separate branch. When your work is ready to be merged, you may create a pull request. Once all automated checks have passed and/or your code has been reviewed, your pull request will be merged.

# Create new branch and push to origin
$ git checkout -b mybranch
$ git push -u origin mybranch

# Do some work...

# Review your changes
$ git status

# Add your changes
$ git add MyNewFolder/
$ git add MyNewFile.cpp

# Commit your changes
$ git commit -m "Did some work"

# Push your changes
$ git push

In order to avoid merge conflicts, please rebase before creating a new branch, as well as before pushing changes from your branch.

$ git fetch origin
$ git rebase origin/master

Papers

JOS (from Physical Audio Signal Processing)

Sebastien Schlecht, Emanuel Habets, "Practical Considerations of Time-Varying Feedback Delay Networks" (pdf)

Davide Rocchesso, Julius Smith, "Circulant and Elliptic Feedback Delay Networks for Artificial Reverberation" (link)

Karolina Prawda, Vesa Valimaki, Sebastien Schlecht, "Improved Reverberation Time Control for Feedback Delay Networks" (pdf)

Jean-Marc Jot, Antoine Chaigne, "Digital Delay Networks For Designing Artifical Reverberators" (link)

About

Time-varying, nonlinear, fun-loving FDNs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published