Difference between revisions of "Creating Audio Plugins"

From MOD Wiki
Jump to navigation Jump to search
(12 intermediate revisions by 6 users not shown)
Line 1: Line 1:
WARNING: This page is currently being written, please check in later!
+
A plugin is a software extension that adds new features to an existing application. Similarly, an audio plugin can add or enhance audio-related functionality to a device (e.g. MOD Duo). Such functionality may include digital signal processing, sound synthesis or MIDI data processing[1].
  
== What is a plugin? ==
+
== External references ==
  
TODO: explain audio block, parameters, states and presets
+
There are plenty of documentation and guides on how to create LV2 plugins in the web.
 +
 
 +
Drobilla has created a page with lots of useful links and references that can help you in the process of creating a LV2 plugin. We highly recommend you to have a look.
 +
 
 +
[https://github.com/drobilla/lv2/wiki Drobilla's LV2 reference page]
  
 
== LV2 standard ==
 
== LV2 standard ==
  
TODO: explain ports, extensions, host-side presets, static ttl
+
MOD devices run [http://lv2plug.in/ LV2 plugins] internally. This means that if you want to create your own plugin for using with the MOD, you will need to build an LV2 plugin. LV2 is an open-source plugin specification designed for audio applications which is powerful and extensible.
 +
 
 +
There are many good reasons why LV2 is the best choice as the audio plugin standard for the MOD devices.
 +
Most of them gracefully explained [http://lv2plug.in/pages/why-lv2.html in this page] of the LV2 website.
 +
 
 +
Thanks to the extensibility and the bundle concept which LV2 provides we were able to create beautiful HTML/CSS interfaces for the plugins present in the MOD devices.
 +
 
 +
== Creating plugins ==
 +
 
 +
The idea of this page is not to go deep into the LV2 standard but to show the options you have when creating your own plugin, guide you through the appropriate documentation according the method you choose and finally show how to upload and test it on your device.
 +
 
 +
Bellow are listed the topics that you might need to know in order to create audio plugins for MOD devices.
 +
 
 +
* Digital signal processing (DSP)
 +
* Programming
 +
* Basic math
 +
 
 +
Note that LV2 standard is not listed as requirement because you don't need to know it if you are using Max gen~.
 +
 
 +
There are 3 ways to create an LV2 plugin:
 +
 
 +
* Coding everything from scratch
 +
* Using a framework or high level language (e.g.: DPF, Faust)
 +
* Using visual programming software (e.g.: Max Gen~)
 +
 
 +
Regardless the option you choose it's highly recommended that you use Linux (preferable) or Mac OS for development. Not only all MOD team developers use Linux but most of the LV2 developers does as well. In other words this means that almost all documentation you will find assumes that you are using Linux and in the case you need to ask for support it'll be much easier.
 +
 
 +
=== From scratch ===
 +
 
 +
The first option, coding everything from scratch, is the hardest one if you are new to programming. Here we will need to know C or C++ to code the plugins and also read the LV2 documentation and examples. Although the learning curve is steep (seeing that you'll need to learn programming first) that's a good choice if you want full control of what you're doing and probably it's the best choice to write well performing plugins.
 +
 
 +
What to learn:
 +
 
 +
* C/C++ language
 +
* LV2 standard
 +
 
 +
To learn about the LV2 standard start reading this [blog post http://harryhaaren.blogspot.com.br/2012/06/writing-lv2-plugins-lv2-overview.html] by Harry Van Haaren.
 +
 
 +
[Programming LV2 Plugins Book http://lv2plug.in/book/] from David Robillard. It aims to explain the LV2 by using examples instead of API documentation.
 +
 
 +
TODO: short explanation of TTL files and links to examples and/or documentation.
 +
 
 +
TODO: development environment setup (docker only?)
  
== Basic skeleton ==
+
=== Framework / High Level Language ===
  
TODO: lv2.h plugin struct, lv2_instantiate call and export symbol
+
TODO: Juce and [https://github.com/DISTRHO/DPF DISTRHO Plugin Framework (DPF)], Examples: there are plugins done using DPF, need to find out)
  
== Alternative Frameworks ==
+
TODO: development environment
  
TODO: Juce and DPF. (Juce WIP)
 
  
== Alternative Methods ==
+
=== Visual Programming ===
  
TODO: Faust, Max/MSP, Puredata.
+
TODO: Max/MSP (MAX Gen~) Examples: shiro plugins
Also csound, lua, contact if interested.
 
  
== Setting up the turtle data ==
+
TODO: Puredata (Camomile) Examples?
  
TODO: how hosts know what plugin has, meta-data
+
TODO: development environment
TODO: Caution, human-error, typos.
 
  
== LV2 book ==
 
  
link
+
[1] https://en.wikipedia.org/wiki/Audio_plug-in

Revision as of 15:41, 19 September 2019

A plugin is a software extension that adds new features to an existing application. Similarly, an audio plugin can add or enhance audio-related functionality to a device (e.g. MOD Duo). Such functionality may include digital signal processing, sound synthesis or MIDI data processing[1].

External references

There are plenty of documentation and guides on how to create LV2 plugins in the web.

Drobilla has created a page with lots of useful links and references that can help you in the process of creating a LV2 plugin. We highly recommend you to have a look.

Drobilla's LV2 reference page

LV2 standard

MOD devices run LV2 plugins internally. This means that if you want to create your own plugin for using with the MOD, you will need to build an LV2 plugin. LV2 is an open-source plugin specification designed for audio applications which is powerful and extensible.

There are many good reasons why LV2 is the best choice as the audio plugin standard for the MOD devices. Most of them gracefully explained in this page of the LV2 website.

Thanks to the extensibility and the bundle concept which LV2 provides we were able to create beautiful HTML/CSS interfaces for the plugins present in the MOD devices.

Creating plugins

The idea of this page is not to go deep into the LV2 standard but to show the options you have when creating your own plugin, guide you through the appropriate documentation according the method you choose and finally show how to upload and test it on your device.

Bellow are listed the topics that you might need to know in order to create audio plugins for MOD devices.

  • Digital signal processing (DSP)
  • Programming
  • Basic math

Note that LV2 standard is not listed as requirement because you don't need to know it if you are using Max gen~.

There are 3 ways to create an LV2 plugin:

  • Coding everything from scratch
  • Using a framework or high level language (e.g.: DPF, Faust)
  • Using visual programming software (e.g.: Max Gen~)

Regardless the option you choose it's highly recommended that you use Linux (preferable) or Mac OS for development. Not only all MOD team developers use Linux but most of the LV2 developers does as well. In other words this means that almost all documentation you will find assumes that you are using Linux and in the case you need to ask for support it'll be much easier.

From scratch

The first option, coding everything from scratch, is the hardest one if you are new to programming. Here we will need to know C or C++ to code the plugins and also read the LV2 documentation and examples. Although the learning curve is steep (seeing that you'll need to learn programming first) that's a good choice if you want full control of what you're doing and probably it's the best choice to write well performing plugins.

What to learn:

  • C/C++ language
  • LV2 standard

To learn about the LV2 standard start reading this [blog post http://harryhaaren.blogspot.com.br/2012/06/writing-lv2-plugins-lv2-overview.html] by Harry Van Haaren.

[Programming LV2 Plugins Book http://lv2plug.in/book/] from David Robillard. It aims to explain the LV2 by using examples instead of API documentation.

TODO: short explanation of TTL files and links to examples and/or documentation.

TODO: development environment setup (docker only?)

Framework / High Level Language

TODO: Juce and DISTRHO Plugin Framework (DPF), Examples: there are plugins done using DPF, need to find out)

TODO: development environment


Visual Programming

TODO: Max/MSP (MAX Gen~) Examples: shiro plugins

TODO: Puredata (Camomile) Examples?

TODO: development environment


[1] https://en.wikipedia.org/wiki/Audio_plug-in