Difference between revisions of "Developers"

From MOD Wiki
Jump to navigation Jump to search
m (space requirement, example build folder corrected)
 
(58 intermediate revisions by 6 users not shown)
Line 1: Line 1:
The MOD Duo runs a highly-optimized Linux embed system, using JACK as audio server and loading plugins in LV2 format.<br>
+
All the MOD units run a highly-optimized Linux embed system, using JACK as audio server and loading plugins in LV2 format.<br>
Plugin parameters can be controlled via the Duo's built-in knobs and footswitches, via MIDI CC and Pitchbend or via Control Chain devices.
+
Plugin parameters can be controlled via the units' built-in knobs and footswitches, via MIDI CC and Pitchbend or via Control Chain devices.<br>
 +
They can also be modulated with CV output ports, either provided by a plugin or the Duo X physical inputs.
  
 
== Technical information ==
 
== Technical information ==
  
As of release 1.1 the MOD Duo runs the Linux kernel version 3.4, with real time patch.<br>
+
The MOD Duo runs the Linux kernel version 5.10, running in a ARMv7 32bit OS built with GCC4.9 and glibc 2.21.<br>
ALSA is used for the audio driver. JACK runs inside as audio server backend, with mod-host loading each LV2 plugin as a new (internal) JACK client as mod-ui as the web server.<br>
+
The MOD Duo X runs kernel version 4.4, in a ARMv8a 64bit OS built with GCC4.9 and glibc 2.21.<br>
 +
The MOD Dwarf runs kernel version 5.10, in a ARMv8a 64bit OS built with GCC7.5 and glibc 2.27.<br>
 +
All units have the real-time patch applied for the kernel build.
 +
 
 +
ALSA is used for the i2s audio driver.<br>
 +
[https://github.com/moddevices/jack2 JACK] runs inside as audio server backend, with [https://github.com/moddevices/mod-host mod-host] loading each LV2 plugin as a new (internal) JACK client.<br>
 +
[https://github.com/moddevices/mod-ui mod-ui] is the web server, it talks to [https://github.com/moddevices/mod-host mod-host] over a unix socket.<br>
 +
[https://github.com/moddevices/mod-ui mod-ui] is the one that owns the loaded project/session, with [https://github.com/moddevices/mod-host mod-host] acting as a dumb host that only does as commanded.
 +
 
 
There's no X11 or any other kind of graphical interface. In fact, X11 libs are not even available.<br>
 
There's no X11 or any other kind of graphical interface. In fact, X11 libs are not even available.<br>
SSH is open by default, user 'root' and password 'mod'.<br>
 
  
The CPU is a Cortex A7, running at a constant 912 MHz.<br>
+
[[Access_MOD_using_SSH|SSH is open by default]].
The compiler is GCC 4.9, with the default compilation flags being:<br>
+
 
 +
The MOD Duo CPU is a dual-core Cortex A7, running at a constant 912 MHz.<br>
 +
The MOD Duo X CPU is a big-little 4x Cortex A53 and 2x Cortex A72, with the A53 cores running at 1.4GHz and the A72 cores running at 1.6GHz (constant values).<br>
 +
The MOD Dwarf CPU is a quad-core Cortex A35, running at a constant 1.3GHz (or 1.2GHz if "ground loop noise reduction" mode activated).
 +
 
 +
The compiler is GCC 4.9 on Duo and Duo X, GCC 7.5 on Dwarf.
 +
 
 +
The default compilation flags for the Duo are:
 +
 
 
<code>-O3 -mcpu=cortex-a7 -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad</code>
 
<code>-O3 -mcpu=cortex-a7 -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad</code>
  
For aggressive optimization, add these:<br>
+
For the Duo X the flags are:
 +
 
 +
<code>-O3 -mcpu=cortex-a53 -mtune=cortex-a53</code>
 +
 
 +
And for the Dwarf:
 +
 
 +
<code>-O3 -mcpu=cortex-a35 -mtune=cortex-a35</code>
 +
 
 +
(Note: 64bit ARM compilers do not use 'fpu' flags, as their usage is implied)
 +
 
 +
For aggressive optimization, add these:
 +
 
 
<code>-ffast-math -fprefetch-loop-arrays -funroll-loops -funsafe-loop-optimizations</code>
 
<code>-ffast-math -fprefetch-loop-arrays -funroll-loops -funsafe-loop-optimizations</code>
  
Building binaries for the MOD Duo can be easily done using the [https://github.com/moddevices/mod-plugin-builder mod-plugin-builder].
+
Building binaries for them can be easily done using the [https://github.com/moddevices/mod-plugin-builder mod-plugin-builder].
 +
 
 +
Apart from programming software in a "traditional" way, it's also possible to generate audio plugins for the MOD from gen~ objects created in Cycling '74 Max.
 +
See the [[Max_gen~]] page for more details.
 +
 
 +
== Plugin Development ==
 +
 
 +
See the dedicated [[Creating Audio Plugins]] page for this topic.
 +
 
 +
Building plugins can be done with mod-plugin-builder.
  
== mod-plugin-builder ==
+
=== mod-plugin-builder ===
  
The [https://github.com/moddevices/mod-plugin-builder mod-plugin-builder] is a custom build system that gives developers a similar system to what's available inside the Duo.<br/>
+
The [https://github.com/moddevices/mod-plugin-builder mod-plugin-builder] is a custom build system that gives developers a similar system to what's available inside the MOD units.<br>
We do not recommend the use of a regular Linux armhf system or compiler, it might lead to issues due to mismatching library versions.
+
We do not recommend the use of a regular Linux ARM system or compiler, as it might lead to issues due to mismatching library versions.
  
If you're running Linux just clone [https://github.com/moddevices/mod-plugin-builder MOD Plugin Builder] and follow the [https://github.com/moddevices/mod-plugin-builder/blob/master/README.md instructions].
+
If you're running Linux just clone [https://github.com/moddevices/mod-plugin-builder MOD Plugin Builder] and follow the [https://github.com/moddevices/mod-plugin-builder/blob/master/README.md instructions].<br>
 +
For other operating systems you will need something like [https://www.docker.com/ docker desktop], more details [https://wiki.moddevices.com/wiki/How_To_Use_Docker_Toolbox_With_MPB here].
  
 
In summary:
 
In summary:
  
 
<source lang="console">
 
<source lang="console">
$ git clone git://github.com/moddevices/mod-plugin-builder
+
$ git clone https://github.com/moddevices/mod-plugin-builder
 
$ cd mod-plugin-builder
 
$ cd mod-plugin-builder
$ ./bootstrap.sh
+
$ ./bootstrap.sh <platform>
 +
$ # Where platform can be modduo, modduox or moddwarf
 +
$ # NEW: You can use modduo-static or modduox-static as platform if GCC4.9 is too old, these special targets will use GCC7.5 similar to the Dwarf
 
</source>
 
</source>
  
 
This process should take at least 1 hour, probably more depending on your CPU.<br/>
 
This process should take at least 1 hour, probably more depending on your CPU.<br/>
Assuming your source code is cross-compile friendly (ie, no hardcoded compiler and paths and uses pkg-config to find extra libraries), the compiler setup is as simple as: (adjust as needed)
+
If you are lacking on time or disk space (needed ~15G) you can use "minimal" as argument after the platform which will only build the compiler and the bare minimum libraries.
 +
 
 +
Assuming your source code is cross-compilation friendly (ie, no hardcoded compiler and paths and uses pkg-config to find extra libraries), the compiler setup is as simple as: (adjust as needed)
  
 
<source lang="console">
 
<source lang="console">
$ . ~/mod-plugin-builder/local.env
+
$ pushd ~/mod-plugin-builder/
 +
$ source local.env <platform>
 +
$ popd
 
$ # cmake, waf configure, ./configure, etc
 
$ # cmake, waf configure, ./configure, etc
 
$ make
 
$ make
Line 43: Line 86:
  
 
The local.env file will setup your Linux compiler environment variables (such as CC, CXX, CFLAGS, etc) to use mod-plugin-builder files.<br/>
 
The local.env file will setup your Linux compiler environment variables (such as CC, CXX, CFLAGS, etc) to use mod-plugin-builder files.<br/>
If everything goes well, the resulting binaries will be ARMv7, MOD Duo compatible.
+
If everything goes well, the resulting binaries will be compatible with the target platform.
  
=== Quick example plugin ===
+
==== Quick example plugin ====
  
A quick example plugin is available inside mod-plugin-builder in make -C plugins/package/eg-amp-lv2/source/, which works with this cross-compilation setup.<br/>
+
A quick example plugin is available inside mod-plugin-builder in plugins/package/eg-amp-lv2/source/, which works with this cross-compilation setup.<br/>
See https://github.com/moddevices/mod-plugin-builder/tree/master/plugins/package/eg-amp-lv2/source
+
See https://github.com/moddevices/mod-plugin-builder/tree/master/plugins/package/eg-amp-lv2-labs/source
  
Building this example plugin can be done like so:
+
Building this example plugin can be done like so: (adjust as needed)
  
 
<source lang="console">
 
<source lang="console">
$ . ~/mod-plugin-builder/local.env
+
$ cd ~/mod-plugin-builder/
$ make -C ~/mod-plugin-builder/plugins/package/eg-amp-lv2/source
+
$ source local.env modduo
 +
$ cd ~/mod-plugin-builder/plugins/package/eg-amp-lv2-labs/source/
 +
$ make
 
</source>
 
</source>
  
Line 61: Line 106:
 
== Deploying plugins ==
 
== Deploying plugins ==
  
You can push an LV2 plugin bundle to the MOD Duo via command-line, using curl, by running this: (adjust as needed)
+
You can push an LV2 plugin bundle to a MOD unit via command-line, using curl, by running this: (adjust as needed)
  
 
<source lang="console">
 
<source lang="console">
$ cd ~/mod-plugin-builder/plugins/package/eg-amp-lv2/
+
$ cd ~/mod-plugin-builder/plugins/package/eg-amp-lv2/source/
 
$ tar cz eg-amp.lv2 | base64 | curl -F 'package=@-' http://192.168.51.1/sdk/install
 
$ tar cz eg-amp.lv2 | base64 | curl -F 'package=@-' http://192.168.51.1/sdk/install
 
</source>
 
</source>
  
That's it! Your plugin is now inside the Duo!
+
That's it! Your plugin is now inside the unit!
 +
 
 +
To those curious ones, the last command packs the eg-amp.lv2 into a tar.gz file, encodes it as base64 and then sends it to a special URL that the MOD unit uses to install plugin tarballs.
  
 
== APIs and Documentation ==
 
== APIs and Documentation ==
  
=== Linux ===
+
=== LV2 ===
 +
 
 +
Audio and MIDI plugins in MOD Devices are done in LV2 format.<br>
 +
MOD provides custom LV2 extensions (for MOD specific data and HTML interfaces).
  
Being Linux, developers have access to UNIX and POSIX APIs.<br>
+
See our [[LV2]] page for more information on how LV2 is integrated in MOD.
This means <unistd.h>, <pthread.h> and <stdlib.h> for example.
 
  
For more information see:
+
For reference/external information see:
* https://www.kernel.org/doc/man-pages/
+
* http://lv2plug.in/pages/developing.html
* http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
+
* https://moddevices.github.io/mod-sdk/mod/
 +
* https://moddevices.github.io/mod-sdk/modgui/
  
 
=== JACK ===
 
=== JACK ===
Line 89: Line 139:
 
* http://jackaudio.org/api/index.html
 
* http://jackaudio.org/api/index.html
  
NOTE: As of release 1.1, MOD Duo uses JACK2.
+
NOTE: All MOD units use JACK2.
  
=== LV2 ===
+
=== Linux ===
  
Audio and MIDI plugins in MOD Duo are done in LV2 format.<br>
+
Being Linux, developers have access to UNIX and POSIX APIs.<br>
MOD provides custom LV2 extensions (for MOD specific data and HTML interfaces).
+
This means <unistd.h>, <pthread.h> and <stdlib.h> for example.
  
 
For more information see:
 
For more information see:
* http://lv2plug.in/pages/developing.html
+
* https://www.kernel.org/doc/man-pages/
* http://web1.moddevices.com/shared/ns/mod/
+
* http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
* http://web1.moddevices.com/shared/ns/modgui/
 
  
 
=== Toolchain ===
 
=== Toolchain ===
  
As of release 1.1, the MOD Duo uses:
+
As of release 1.10, the MOD Duo and MOD Duo X uses:
 
* GCC 4.9
 
* GCC 4.9
 
* glibc 2.21
 
* glibc 2.21
 
* binutils 2.25
 
* binutils 2.25
  
This means support for C99 and C++11.<br>
+
While the MOD Dwarf uses:
C++14 or higher is not supported.
+
* GCC 7.5
 +
* glibc 2.27
 +
* binutils 2.26.1
 +
 
 +
Note: Within mod-plugin-builder you can use "modduo-static" or "modduox-static" as platform to get GCC7.5 and binutils 2.26.1.<br>
 +
The glibc version will remain the same though, for backwards compatibility.
  
 
=== Libraries ===
 
=== Libraries ===
  
The following libraries are available inside the Duo:
+
The following libraries are available inside the MOD units:
 
* acl
 
* acl
 
* alsa
 
* alsa
Line 122: Line 176:
 
* dbus
 
* dbus
 
* expat
 
* expat
* fftw/fftwf
+
* fftw/fftwf (v3.3.5 on Duo, v3.3.8 on Duo X and Dwarf)
 
* ffmpeg
 
* ffmpeg
 
* flac
 
* flac
Line 132: Line 186:
 
* glibc (v2.21)
 
* glibc (v2.21)
 
* icu
 
* icu
* jack
+
* jack2
 
* libffi
 
* libffi
 
* libgig
 
* libgig
Line 145: Line 199:
 
* libxml2
 
* libxml2
 
* lilv
 
* lilv
* lvtk
+
* lvtk (v1 and v2)
 
* mxml
 
* mxml
 
* ncurses
 
* ncurses
Line 154: Line 208:
 
* qt5 (core, network, sql and xml)
 
* qt5 (core, network, sql and xml)
 
* readline
 
* readline
 +
* sdl
 
* serd
 
* serd
 
* sord
 
* sord
Line 165: Line 220:
 
MOD's web interface has some hidden features, not really useful for users but useful for developers.<br/>
 
MOD's web interface has some hidden features, not really useful for users but useful for developers.<br/>
 
This includes:
 
This includes:
* Buffer size change (128 or 256 frames)
+
* Buffer size change (128 or 256 frames per cycle)
 
* Install-All button in plugin store
 
* Install-All button in plugin store
 
* Network statistics
 
* Network statistics
* Xrun counter
+
* Xrun counter (a.k.a. audio drop-outs)
  
To enable developer mode, open the browser developer console and enter:
+
Developer mode can be enabled on the settings page: http://192.168.51.1/settings.
  
    enable_dev_mode()
+
== Useful links ==
  
Starting from v1.3, this setting is saved within the MOD, and developer mode is enabled the next time the page loads.<br/>
+
These are useful links for general information regarding developing audio plugins and realtime software.
To disable developer mode, open the browser developer console and enter:
 
  
    disable_dev_mode()
+
* [http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing Real-time audio programming 101: time waits for nothing]
 +
* [http://lv2plug.in/book/ Programming LV2 Plugins]
  
== Unstable plugins ==
+
Please note that it is also possible to build LV2 plugins using [http://distrho.github.io/DPF/ DPF] or [https://docs.juce.com/ Juce].
 
+
Building with those frameworks is not yet documented though, please reach out to us if interested on the subject.
To see unstable plugins on the plugin store open the browser development console and enter:
 
 
 
    $("#cloud-plugins-stable").parent().show()
 
 
 
NOTE: Do not report bugs when using unstable plugins.<br/>
 
They have not been curated or tested, so they might corrupt memory or even crash.<br/>
 
Use with caution.
 
  
 
== USB Device Support ==
 
== USB Device Support ==
  
* Several USB-MIDI devices
+
* Most USB-MIDI devices (if they are class-compliant, they should just work)
 
* Arduino running MocoLufa firmware (to create midi-controllers)
 
* Arduino running MocoLufa firmware (to create midi-controllers)
 
* PlayStation 3 and 4 Controllers
 
* PlayStation 3 and 4 Controllers
 
* Guitar Hero Controller (Red Octane Xbox version)
 
* Guitar Hero Controller (Red Octane Xbox version)
 +
* Any regular joystick
  
 
== Hardware Specification ==
 
== Hardware Specification ==
 +
 +
===MOD Duo===
  
 
'''CPU:'''
 
'''CPU:'''
* Dual Core ARM A7 1.0GHz
+
* Dual Core ARMv7 1.0GHz
 
* 4GB Flash Storage, 1GB RAM
 
* 4GB Flash Storage, 1GB RAM
  
Line 213: Line 264:
 
* MIDI IN/OUT – Standard DIN 5 pins
 
* MIDI IN/OUT – Standard DIN 5 pins
 
* Control Chain – RJ45 connector  – for additional controllers
 
* Control Chain – RJ45 connector  – for additional controllers
* USB HOST – USB 2.0 Standard-A type, supporting: USB Bluetooth, USB Wifi, USB MIDI
+
* USB HOST – USB 2.0 Standard-A type, supporting: USB Bluetooth and USB MIDI
 +
* USB DEVICE – USB 2.0 Standard-B type, supporting: USB Ethernet Connection
 +
 
 +
===MOD DuoX===
 +
 
 +
'''CPU:'''
 +
* A53 quad core 1.4 GHz + A72 dual core 2 GHz
 +
* 16GB Flash Storage, 2GB RAM
 +
 
 +
'''AUDIO CODEC:'''
 +
* Cirrus Logic, 24 bit / 48 kHz AD/DA
 +
* DAC/ADC: 104dB Dynamic Range. -90dB THD+N
 +
 
 +
'''CONTROLLER:'''
 +
* 2 knobs with LCD screens
 +
* 7 push buttons with color LEDs
 +
* 8 analog potentiometers
 +
 
 +
'''I/O CONNECTIONS:'''
 +
* MIDI IN/OUT – Standard DIN 5 pins
 +
* Control Chain – RJ45 connector  – for additional controllers
 +
* USB HOST – USB 2.0 Standard-A type, supporting: USB Bluetooth and USB MIDI
 
* USB DEVICE – USB 2.0 Standard-B type, supporting: USB Ethernet Connection
 
* USB DEVICE – USB 2.0 Standard-B type, supporting: USB Ethernet Connection
 +
* Control Voltage IN/OUT – 0 to 10 volt – for connecting to analog gear
 +
* SPDIF output – 3.5mm-jack – for digital audio output

Latest revision as of 15:19, 4 March 2022

All the MOD units run a highly-optimized Linux embed system, using JACK as audio server and loading plugins in LV2 format.
Plugin parameters can be controlled via the units' built-in knobs and footswitches, via MIDI CC and Pitchbend or via Control Chain devices.
They can also be modulated with CV output ports, either provided by a plugin or the Duo X physical inputs.

Technical information

The MOD Duo runs the Linux kernel version 5.10, running in a ARMv7 32bit OS built with GCC4.9 and glibc 2.21.
The MOD Duo X runs kernel version 4.4, in a ARMv8a 64bit OS built with GCC4.9 and glibc 2.21.
The MOD Dwarf runs kernel version 5.10, in a ARMv8a 64bit OS built with GCC7.5 and glibc 2.27.
All units have the real-time patch applied for the kernel build.

ALSA is used for the i2s audio driver.
JACK runs inside as audio server backend, with mod-host loading each LV2 plugin as a new (internal) JACK client.
mod-ui is the web server, it talks to mod-host over a unix socket.
mod-ui is the one that owns the loaded project/session, with mod-host acting as a dumb host that only does as commanded.

There's no X11 or any other kind of graphical interface. In fact, X11 libs are not even available.

SSH is open by default.

The MOD Duo CPU is a dual-core Cortex A7, running at a constant 912 MHz.
The MOD Duo X CPU is a big-little 4x Cortex A53 and 2x Cortex A72, with the A53 cores running at 1.4GHz and the A72 cores running at 1.6GHz (constant values).
The MOD Dwarf CPU is a quad-core Cortex A35, running at a constant 1.3GHz (or 1.2GHz if "ground loop noise reduction" mode activated).

The compiler is GCC 4.9 on Duo and Duo X, GCC 7.5 on Dwarf.

The default compilation flags for the Duo are:

-O3 -mcpu=cortex-a7 -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad

For the Duo X the flags are:

-O3 -mcpu=cortex-a53 -mtune=cortex-a53

And for the Dwarf:

-O3 -mcpu=cortex-a35 -mtune=cortex-a35

(Note: 64bit ARM compilers do not use 'fpu' flags, as their usage is implied)

For aggressive optimization, add these:

-ffast-math -fprefetch-loop-arrays -funroll-loops -funsafe-loop-optimizations

Building binaries for them can be easily done using the mod-plugin-builder.

Apart from programming software in a "traditional" way, it's also possible to generate audio plugins for the MOD from gen~ objects created in Cycling '74 Max. See the Max_gen~ page for more details.

Plugin Development

See the dedicated Creating Audio Plugins page for this topic.

Building plugins can be done with mod-plugin-builder.

mod-plugin-builder

The mod-plugin-builder is a custom build system that gives developers a similar system to what's available inside the MOD units.
We do not recommend the use of a regular Linux ARM system or compiler, as it might lead to issues due to mismatching library versions.

If you're running Linux just clone MOD Plugin Builder and follow the instructions.
For other operating systems you will need something like docker desktop, more details here.

In summary:

$ git clone https://github.com/moddevices/mod-plugin-builder
$ cd mod-plugin-builder
$ ./bootstrap.sh <platform>
$ # Where platform can be modduo, modduox or moddwarf
$ # NEW: You can use modduo-static or modduox-static as platform if GCC4.9 is too old, these special targets will use GCC7.5 similar to the Dwarf

This process should take at least 1 hour, probably more depending on your CPU.
If you are lacking on time or disk space (needed ~15G) you can use "minimal" as argument after the platform which will only build the compiler and the bare minimum libraries.

Assuming your source code is cross-compilation friendly (ie, no hardcoded compiler and paths and uses pkg-config to find extra libraries), the compiler setup is as simple as: (adjust as needed)

$ pushd ~/mod-plugin-builder/
$ source local.env <platform>
$ popd
$ # cmake, waf configure, ./configure, etc
$ make

The local.env file will setup your Linux compiler environment variables (such as CC, CXX, CFLAGS, etc) to use mod-plugin-builder files.
If everything goes well, the resulting binaries will be compatible with the target platform.

Quick example plugin

A quick example plugin is available inside mod-plugin-builder in plugins/package/eg-amp-lv2/source/, which works with this cross-compilation setup.
See https://github.com/moddevices/mod-plugin-builder/tree/master/plugins/package/eg-amp-lv2-labs/source

Building this example plugin can be done like so: (adjust as needed)

$ cd ~/mod-plugin-builder/
$ source local.env modduo
$ cd ~/mod-plugin-builder/plugins/package/eg-amp-lv2-labs/source/
$ make

After this the eg-amp.lv2 bundle is ready to be deployed into a MOD unit.

Deploying plugins

You can push an LV2 plugin bundle to a MOD unit via command-line, using curl, by running this: (adjust as needed)

$ cd ~/mod-plugin-builder/plugins/package/eg-amp-lv2/source/
$ tar cz eg-amp.lv2 | base64 | curl -F 'package=@-' http://192.168.51.1/sdk/install

That's it! Your plugin is now inside the unit!

To those curious ones, the last command packs the eg-amp.lv2 into a tar.gz file, encodes it as base64 and then sends it to a special URL that the MOD unit uses to install plugin tarballs.

APIs and Documentation

LV2

Audio and MIDI plugins in MOD Devices are done in LV2 format.
MOD provides custom LV2 extensions (for MOD specific data and HTML interfaces).

See our LV2 page for more information on how LV2 is integrated in MOD.

For reference/external information see:

JACK

Also known as Jack Audio Connection Kit, is the audio server running inside the MOD.
Developers can create JACK clients to interact with the audio data directly (without being managed by a plugin host).

For more information see:

NOTE: All MOD units use JACK2.

Linux

Being Linux, developers have access to UNIX and POSIX APIs.
This means <unistd.h>, <pthread.h> and <stdlib.h> for example.

For more information see:

Toolchain

As of release 1.10, the MOD Duo and MOD Duo X uses:

  • GCC 4.9
  • glibc 2.21
  • binutils 2.25

While the MOD Dwarf uses:

  • GCC 7.5
  • glibc 2.27
  • binutils 2.26.1

Note: Within mod-plugin-builder you can use "modduo-static" or "modduox-static" as platform to get GCC7.5 and binutils 2.26.1.
The glibc version will remain the same though, for backwards compatibility.

Libraries

The following libraries are available inside the MOD units:

  • acl
  • alsa
  • armadillo
  • audiofile
  • boost
  • cairo
  • dbus
  • expat
  • fftw/fftwf (v3.3.5 on Duo, v3.3.8 on Duo X and Dwarf)
  • ffmpeg
  • flac
  • fluidsynth
  • fontconfig
  • freetype
  • gio/giomm
  • glib/glibmm
  • glibc (v2.21)
  • icu
  • jack2
  • libffi
  • libgig
  • libjpeg/libturbojpeg
  • liblo
  • libogg
  • libpng
  • libsamplerate
  • libsigc
  • libsndfile
  • libvorbis
  • libxml2
  • lilv
  • lvtk (v1 and v2)
  • mxml
  • ncurses
  • ne10
  • pcre
  • pixman
  • python (v3.4)
  • qt5 (core, network, sql and xml)
  • readline
  • sdl
  • serd
  • sord
  • sratom
  • systemd (v219)
  • zita-convolver
  • zita-resampler

Developer mode

MOD's web interface has some hidden features, not really useful for users but useful for developers.
This includes:

  • Buffer size change (128 or 256 frames per cycle)
  • Install-All button in plugin store
  • Network statistics
  • Xrun counter (a.k.a. audio drop-outs)

Developer mode can be enabled on the settings page: http://192.168.51.1/settings.

Useful links

These are useful links for general information regarding developing audio plugins and realtime software.

Please note that it is also possible to build LV2 plugins using DPF or Juce. Building with those frameworks is not yet documented though, please reach out to us if interested on the subject.

USB Device Support

  • Most USB-MIDI devices (if they are class-compliant, they should just work)
  • Arduino running MocoLufa firmware (to create midi-controllers)
  • PlayStation 3 and 4 Controllers
  • Guitar Hero Controller (Red Octane Xbox version)
  • Any regular joystick

Hardware Specification

MOD Duo

CPU:

  • Dual Core ARMv7 1.0GHz
  • 4GB Flash Storage, 1GB RAM

AUDIO CODEC:

  • Cirrus Logic, 24 bit / 48 kHz AD/DA
  • DAC/ADC: 104dB Dynamic Range. -90dB THD+N

CONTROLLER:

  • 2 knobs with LCD screen
  • 2 foot switches with color LEDs

I/O CONNECTIONS:

  • MIDI IN/OUT – Standard DIN 5 pins
  • Control Chain – RJ45 connector – for additional controllers
  • USB HOST – USB 2.0 Standard-A type, supporting: USB Bluetooth and USB MIDI
  • USB DEVICE – USB 2.0 Standard-B type, supporting: USB Ethernet Connection

MOD DuoX

CPU:

  • A53 quad core 1.4 GHz + A72 dual core 2 GHz
  • 16GB Flash Storage, 2GB RAM

AUDIO CODEC:

  • Cirrus Logic, 24 bit / 48 kHz AD/DA
  • DAC/ADC: 104dB Dynamic Range. -90dB THD+N

CONTROLLER:

  • 2 knobs with LCD screens
  • 7 push buttons with color LEDs
  • 8 analog potentiometers

I/O CONNECTIONS:

  • MIDI IN/OUT – Standard DIN 5 pins
  • Control Chain – RJ45 connector – for additional controllers
  • USB HOST – USB 2.0 Standard-A type, supporting: USB Bluetooth and USB MIDI
  • USB DEVICE – USB 2.0 Standard-B type, supporting: USB Ethernet Connection
  • Control Voltage IN/OUT – 0 to 10 volt – for connecting to analog gear
  • SPDIF output – 3.5mm-jack – for digital audio output