GithubHelp home page GithubHelp logo

ealves / 01v96-remote Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kryops/01v96-remote

0.0 0.0 0.0 660 KB

WebSocket-MIDI bridge for Yamaha 01v96

License: MIT License

Shell 4.70% CSS 4.94% JavaScript 87.08% Batchfile 0.02% HTML 3.25%

01v96-remote's Introduction

01v96 Remote

by Michael Strobel

This application is a MIDI bridge to the Yamaha 01v96 mixing console to remote-control it over a network-based connection via WebSocket.

It is based on a node.js server and includes a web client that can be used on both mouse- and touch-based devices.

So far it has implemented

  • controlling faders for channels, aux send, master (aux and bus outputs) and stereo out
  • controlling on-buttons for channels, master and stereo out
  • Showing the meter levels of all channels
  • Configuring channel names and pairs/groups

01v96 Remote

License

MIT

Installation

Installation on a PC / development environment

In order to connect the 01v96 to the PC via USB, please install the latest USB-MIDI driver from http://www.yamahaproaudio.com/global/en/downloads/firmware_software/

The node.js server can be obtained at http://nodejs.org/

Install dependencies:

npm install

Note for Windows users

In order to compile the required modules, your system needs to support the python programming language and C++.

Note for Linux users

  • If your system is ALSA based, you need to have the libasound2-dev package installed in order to compile the midi module.
  • make sure the config directory is writable for the node.JS-Server

Installation on a Raspberry Pi

The application can be deployed to a Raspberry Pi micro computer. It can be connected via USB or configured to receive MIDI signals through its GPIO ports.

The documentation for the installation on a Raspberry Pi can be found in the file raspberry/documentation.md

Usage

01v96 MIDI configuration

  • Press the DIO/SETUP button and go to the MIDI/HOST tab
  • In the GENERAL area set both Rx PORT and Tx PORT to 1
  • Set the port type to USB or MIDI depending on how your 01v96 is connected to your server device
  • Press the MIDI button and go to the SETUP tab
  • Set both the Tx and Rx CHANNEL to 1
  • Set Tx and Rx in the PARAMETER CHANGE row to ON, all other options to OFF
  • Set Fader Resolution to LOW

NodeJS server

Start the server from the command line:

node server.js

or

npm run start

From Windows you can start it with the 01v96-remote-server.bat file.

The program can only be started when the 01v96 is connected, running and configured correctly. MIDI error messages are shown in the console output.

With an optional parameter, the connection type to the mixer can be chosen:

  • midi (default) uses the standard MIDI protocol - for MIDI ports and USB connections (also on Raspberry Pi - thanks to @Shad-Rydalch)
  • serialport connects through the serial port on /dev/ttyAMA0 (for use with a Raspberry Pi)
  • dummy allows to test the application without a real mixer present. It simulates changing fader levels and a moving fader

Web client

The web client can be accessed at port 1337. You have to use a browser that supports WebSockets. Look up browser support at http://caniuse.com/websockets.

Development

WebSocket protocol

The WebSocket service can be reached on port 1338

Messages sent by the server

Fader value

Channel groups: Message is sent for every channel

{
    "type": "fader",
     "target": "channel" / "sum" / "auxsend" / "aux" / "bus",
     "num": < channel/aux/bus number, 0 for sum >,
     "num2": < aux number (if target is "auxsend") >
     "value": < fader value, 0-255 >
}

On-buttons

Channel groups: Message is sent for every channel

{
    "type": "on",
     "target": "channel" / "sum" / "aux" / "bus",
     "num": < channel/aux/bus number, 0 for sum >,
     "value": < true for on, false for off >
}

Channel meter levels

Sent every 200ms

{
    "type": "level",
     "levels": {
        < channel number, 1-32 >: < channel level, 0-32 >,
        // ...
     }
}

Complete status synchronization

{
    "type": "sync",
    "status": {
        "on": {
            "channel< channel number>": < boolean value >,
            "aux< aux number>": < boolean value >,
            "bus< aux number>": < boolean value >,
            "sum0": < boolean value >,
            // ...
        },
        "fader": {
            "channel< channel number>": < value 0-255 >,
            "auxsend< aux number >< channel number>": < value 0-255 >,
            "aux< aux number>": < value 0-255 >,
            "bus< aux number>": < value 0-255 >,
            "sum0": < value 0-255 >,
            // ...
        }
    }
}

Configuration

{
    "type": "config",
    "config": {
        "names": {
            "channel< channel number>": < name >,
            "aux< aux number>": < name >,
            "bus< aux number>": < name >,
            // ...
        },
        "groups": [
            [ < channel numbers in a group > ],
            // ...
        ]
    }
}

Messages sent by the clients

Request synchronization

{
    "type": "sync"
}

Request configuration

{
    "type": "config"
}

Save configuration

Triggers a broadcast of the new configuration to all other connected clients

{
    "type": "config_save",
    "config": {
        "names": {
            "channel< channel number>": < name >,
            "aux< aux number>": < name >,
            "bus< aux number>": < name >,
            // ...
        },
        "groups": [
            [ < channel numbers in a group > ],
            // ...
        ]
    }
}

Fader value

Triggers a broadcast of the new value to all other connected clients

Channel groups: Has to be send only for one channel. Broadcast to other clients contains all channels in the group

{
    "type": "fader",
     "target": "channel" / "sum" / "auxsend" / "aux" / "bus",
     "num": < channel/aux/bus number, 0 for sum >,
     "num2": < aux number (if target is "auxsend") >
     "value": < fader value, 0-255 >
}

On-button

Triggers a broadcast of the new value to all other connected clients

Channel groups: Has to be send only for one channel. Broadcast to other clients contains all channels in the group

{
    "type": "on",
     "target": "channel" / "sum" / "aux" / "bus",
     "num": < channel/aux/bus number, 0 for sum >,
     "value": < true for on, false for off >
}

Additional notes

Third party software

NPM modules

Libraries

01v96-remote's People

Contributors

kryops avatar marekhavel avatar

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.