Code Monkey home page Code Monkey logo

midi-transposer's Introduction

Midi Transposer

A VST3 plugin developed with JUCE framework to map chords to a MIDI bass pedal (or any MIDI controller)

General purpose

The idea is to use my MIDI bass pedal (Roland PK5-A) and expand its usage by mapping a root note and up to 12 intervals to each note of the octave. This way I can build a sequence of chords to play with my feet while improvising on any other instrument.

It was mainly a way to start learning how to use the JUCE framework and make an application I can use instead of a dull tutorial. I'll improve it as ideas come and I make progress learning the framework.

It uses version 7.0.10 of JUCE by pulling the master branch from CMake. It builds and run on Windows 10/11, MacOS and Arch Linux so far.

You're welcome to clone it and use it as you want. And if you see stupid code, don't hesitate to tell me, I'll be happy to improve and fix it :)

Build

CMake

To build the project using CMake, use the command line

# Generate
cmake . -B build
# Build
cmake --build build # --config Release

If you want the plugin to be copied in your VST3 folder, change COPY_PLUGIN_AFTER_BUILD to TRUE in Source/CMakeLists.txt

If you don't need JUCE extras (I use AudioPluginHost for debugging in Visual Studio Code), pass the JUCE_BUILD_EXTRAS option to OFF in the root CMakeLists.txt

For a great guide about configuring a CMake project with Visual Studio Code, I advise you to check this great repository.

Features

The interface is almost complete with this design. interface

  • Input Midi Channel : Defines from which channel the incoming MIDI events will be processed
  • Output Midi Channel : Defines to which channel the processed MIDI events will be routed
  • Octave Transpose : If a value other than 0 is selected, the root note will be played at its original height and the selected chord will be transposed to the chosen octave
  • Arpeggiator : Self explanatory :)

When you click on a note, you have access to the intervals panel.

There you can select which intervals will be played for the selected note. You can also decide to transpose the whole chord by a number of semitones. To close the panel, click again on the note.

And that's it, it's pretty straight forward.

Hot Reload and configuration

The project uses Gin for its filewatcher class that allows to configure some GUI values with hot reload. If you want to change some colors, you can edit data/config/colors.json and define different ones.

The values in data/config/positions.json were mostly helpful during the development phase to define the different block sizes and positions and tweak all the coordinates without having to recompile everything.

Next

Some ideas I have in mind to improve it :

  • Shortcuts to add some intervals to all notes
  • Shortcut to reset the intervals of one note
  • Different arpeggiator patterns

Third party dependencies

midi-transposer's People

Contributors

stfufane avatar

Stargazers

 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

Forkers

lisegimenez

midi-transposer's Issues

LICENSE file missing

Thank you for this interesting plugin.

I can't find if the source is released under a license. Is there a license?

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.