JSPM

remidi

0.1.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • 0
    • Score
      100M100P100Q12490F
    • License MIT

    Pipe MIDI messages from one app to another. (Example uses Reason Studio and Resolume Avenue).

    Package Exports

    • remidi

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (remidi) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    ReMidi

    Pipe MIDI messages from one app to another.

    Purpose

    I wanted to connect Reason Studio to Resolume Avenue so that I could create an automated audio/video composition that was controlled by MIDI. I wanted something that was more performant than the clunky IAC Bus and more stable than MidiPipe.

    Pre-Requisites

    • Node.js
    • Two Midi Applications you want to link

    Install

    1. Clone this repository.

    2. Install the Node dependencies.

      npm install

    Usage

    Press Control + C twice, to quite the program.

    1. Start the MIDI server with Node.js.

      node index.js
    2. Goto Reason Studio MIDI Preferences and disable "ReMidi from Reason".

      ⚠️ Important: If you stop and start the program, you will need to go back into Reason MIDI preferences and disable "ReMidi from Reason" again, otherwise your will start an infinite MIDI loop.

      Disable ReMidi from Reason

    3. Create a MIDI Output device in Reason studio. Create Midi Output Device

    4. Choose "ReMidi to Avenue" from the input dropdown.

      Choose ReMidi to Avenue

    5. Move the Mod Wheel on the MIDI output and you should see MIDI messages in your terminal.

      MIDI Output Messages.png

    6. You can select the "ReMidi from Reason" device from another application, and see the same MIDI messages.

      In this case I am using Resolume Avenue.

      MIDI-Input-Avenue.png

    Example Code

    const easymidi = require('easymidi');
    
    const avenue = new easymidi.Output('ReMidi from Reason', true);
    const reason = new easymidi.Input('ReMidi to Avenue', true);
    
    reason.on('noteon', ({_type: type, channel, note, velocity}) => {
        console.log('Output from Reason', {type, channel, note, velocity});
        avenue.send(type, {channel, note, velocity});
    });
    
    reason.on('noteoff', ({_type: type, channel, note, velocity}) => {
        console.log('Output from Reason', {type, channel, note, velocity});
        avenue.send(type, {channel, note, velocity});
    });
    
    reason.on('cc', ({_type: type, controller, value, channel}) => {
        console.log('Output from Reason', {type, controller, value, channel});
        avenue.send(type, {controller, value, channel});
    });
    
    console.log('ReMidi is running!');

    Conclusion

    This simple code allows you to send MIDI messages easily from one application to another.

    In my case, I can write an audio/visual composition in Reason. Reason triggers and changes the video clips and parameters in Avenue, making the music and the music video a single process.

    You can update the code if you want to provide more channels, and change the names.

    Contact me you need help.

    ~ F1LT3R