Giter Site home page Giter Site logo

drlight-code / osccontrol-light Goto Github PK

View Code? Open in Web Editor NEW
29.0 2.0 3.0 429 KB

An audio plugin that speaks OSC.

License: GNU General Public License v3.0

C++ 87.43% CMake 7.52% Shell 3.43% C 1.62%
opensoundcontrol daw music-production audiovisual intermedia mapping

osccontrol-light's Introduction

osccontrol-light - An audio plugin that speaks OSC

This software enables sending of Open Sound Control (OSC) messages from audio plugin host environments such as digital audio workstations (DAW).

Controls are tied to OSC messages directly in the host environment without encoding the control data as MIDI CC messages. This way, control automation can be sent and received via OSC at full resolution, and all time sequencing, automation recording, modulation and side-chaining functionality of the host environment can be used for external OSC control.

We provide an interactive GUI version, as a plugin as well as a standalone application, that enables prototyping of control presets by quick switching and reloading of preset definitions.
To integrate a preset into a host environment with automatable controls, the non-GUI version of the plugin can be pre-built to load a specific preset definition at runtime.

Control presets are defined in a YAML-based textual markup format.

Usage

To run the standalone GUI application, execute the osccontrol-light application binary. To run the GUI version of the plugin inside a host environment, load the osccontrol-light plugin.

The GUI elements are illustrated in the following.

To create a non-GUI instance of the plugin that provides automatable controls inside an audio plugin host environment, the plugin needs to be pre-built to load a certain preset file at runtime. See the build instructions below for details.

In headless mode, controls are exposed directly in the host UI and can be mapped to controller input or automated and modulated at full resolution. The following images show an example preset integrated into different host environments.

Environment variables:

  • OSCCONTROL_SCALE_FACTOR: Set UI scale factor for high DPI displays.
  • OSCCONTROL_PRESET_PATH: Set directory with preset definitions.

The directory specified via the GUI or OSCCONTROL_PRESET_PATH will be searched recursively for *.yaml preset definition files.

Please note: setting OSCCONTROL_PRESET_PATH in the environment is mandatory for non-GUI mode!

Preset Definitions

Control presets are defined in a YAML-based configuration format as follows. Refer to the Presets folder for more examples.

network:
  host: 127.0.0.1
  port: 6789

controls:
  - name: frequency
    type: float
    default: 440
    range: [100, 2000]
    message: /synth/freq

  - name: amplitude
    type: float
    default: 0.8
    message: /synth/amplitude

  - name: vibrato
    type: float
    default: 0.0
    message: /synth/vibrato

  - name: voices
    type: int
    default: 1
    range: [1, 6]
    message: /synth/voices

  - name: sub-oscillator
    type: toggle
    default: off
    message: /synth/sub-osc

Continuous float, discrete int, and boolean toggle control types are currently supported.

Platform Support

Different plugin SDKs are supported via the JUCE library (VST, VST3, AU, RTAS and AAX), as well as all major operating systems (GNU/Linux, MacOS and Microsoft Windows). The build is currently preconfigured to build VST3 plugins on all platforms, but this can be customized by adapting the CMakeLists.txt file accordingly.

Compilation

The plugin is built using the CMake build system. JUCE therefore needs to be properly deployed using CMake, using the Projucer is not supported.

First, download a copy of JUCE, or clone the github repository, and install it to a desired location.

git clone https://github.com/juce-framework/JUCE.git
mkdir JUCE/build
cd JUCE/build
cmake ..
cmake --install . --prefix <juce_install_root>

yaml-cpp is required as an additional dependency. Install it via your distribution or manually by following the instructions on the project page.

If either JUCE or yaml-cpp is installed in a non-standard location, remember to set CMAKE_PREFIX_PATH or *_DIR or similar, such that CMake is able to pick up the installation location.

We provide a script to build different versions of this plugin, which are preconfigured to load custom YAML presets at runtime. The interactive GUI version is always built, as a VST plugin as well as a standalone application. To build the GUI version (plugin and standalone), and plugins for the simple-synth and track-1 presets, just call the build script as follows.

./build_plugins.sh simple-synth track-1

Afterwards, you can find the prebuilt plugins for each preset as well as the GUI version in the Plugins directory in the top-level source tree.

You can perform a parallel build by passing the -j option with the desired number of threads.
To see all available options, call the build script with the -h option.

Please note: the build script is only supplied for your convenience. You can always build the plugin manually by calling CMake directly. To create build targets for specific presets, you can pass the PRESET_NAMES variable with a semicolon-separated list of preset names. For example:

mkdir build
cd build
cmake -DPRESET_NAMES="simple-synth;track-1" ..
cmake --build .

Licensing

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the LICENSE file for more details.

osccontrol-light's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

osccontrol-light's Issues

Automation list not populated in ardour 6

I was able to load the plugin in ardour 6 but can not see the controls specified in .yaml. They dont show up in the automation options in ardour. That is, when you press the A button on a track, then select processor automation and then osccontrol-light, the only thing that shows up is "Plugin Enable"

use optional range for toggle on/off values

This might get tricky to do cleanly when external control is possible (see #30) because we have to decide if 0/1 or rangeMin/rangeMax will set the button state and the respective values can be conflicting.

Installation help on Ubuntu Studio

Hi @desterritorializ-ada, glad you're interested in my plugin :) let's see if we can make it work for you.

In order to install and use the plugin you will have to walk through the process of building it first. This is necessary for two reasons. In general, on a Linux system it's tricky to provide pre-compiled binary plugins because there are so many different distributions out there.

More importantly, in the case of this plugin you will need a pre-compiled version that is specific to each preset definition file that you want to use. The file contains the definition of the controls that you want each instance of the plugin to have and which OSC messages they are mapped to. That's because in order to create controls that can be automated within the host environment, the controls need to be known at construction time of the plugin, so no user interaction is possible in-between. At least I could not find a way to do this using the VST SDK or the JUCE audio plugin abstraction.

Did you try to follow the compilation instructions? How far did you proceed? Where did you get stuck and what is the problem that you ran into?

add OSC server functionality for remote control

This will enable to send OSC to the plugin and record it as automation of the controls in the host environment. The automation data can then be replayed (in a timesynced manner with the host transport/timeline). This will finally provide the missing link between DAW automation and external OSC control.

Multiple Headless link-instances are ignored by reaper

I followed the readme.md instructions for headless configuration:

I export the Presetfolderpath to .bashrc

I made three links like so:
ln -s -T oscsend-light.so oscsend-light-track-1.so

I checked that the corresponding track-1-3.yaml are in the presetfolder.

I gave reaper the pluginfolder as vst-path and let it scan for new plugins. Reaper shows me the gui version and only one headlessversion, both with the same name.

The headlessversion do not send osc-data (Offcourse I set port and ip in yaml).

LV2 build target?

Hi! Just wondering if at some point an LV2 builld target can also be set and released? Thanks!

Ableton crashes when using headless build

image

Not sure how to replicate this issue in the debugger when running the JUCE Audio Plugin Host as it appears to not occur in that context. Only happens in Ableton, is there something I can do to fix this?

the lc4 yaml:
image

cmake options used:
image

OSCCONTROL_PRESET_PATH was set to F:\Users\Melborpon\Documents\Ableton\Plugins\osccontrol-light\Presets before building.

Folderview cancel crashes Ardour

Every time I hit the cancel-button in Folderview, Ardour 5 crashes with the following Terminal-Output:

The program 'ardour-5.12.0' received an X Window System error. This probably reflects a bug in the program. The error was 'BadWindow (invalid Window parameter)'. (Details: serial 479 error_code 3 request_code 15 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) pure virtual method called terminate called without an active exception Aborted (core dumped)

osc-range in yaml is ignored

the value-range in yaml is ignored by the headless version in reaper. instead it outputs always float between 0 and 1 in osc-data stream.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.