Code Monkey home page Code Monkey logo

midimech's Introduction

midimech

midimech

Buy Me A Coffee

IN DEVELOPMENT

Midimech is an alternative musical note layout system for the LinnStrument and LaunchPad X. It uses a wholetone-based isomorphic layout. I was surprised to find out this layout and its variants were not in common usage, despite being incredibly convincing. This project intends to help popularize the layout and bring it to more people.

Midimech supports:

  • Using the mech layout on LinnStrument and LaunchPad X
  • Vibrato detection on LaunchPad X (wiggle your notes!)
  • Bigger range than the default LinnStrument layout
  • Synthesia/DAW visualization for learning songs
  • Diagonal split
  • Transposing and Octave shifting
  • Chord Analyzer
  • 130+ Scales/Modes
  • Custom Lights
  • Great for playing fast arpeggios and piano runs

Please read the setup instructions and important notes before usage. Have fun!

License: MIT (see Attributions)

Copyright (c) 2023 Grady O'Connell

This project is not affiliated with Roger Linn Design.

LinnStrument Community Discord: https://discord.gg/h2BcrzmTXe

Screenshot

Video

Video

Advantages

  • Notes that sound good together are closer together. Notes that sound worse are furthest apart. Mistakes will be less likely and less obvious!
  • Like the LinnStrument's layout, it is also isomorphic (the same chord and scale shapes can be played anywhere)
  • The most common chords and scales are far easier to play and remember than other layouts.
  • Extended range compared to standard +5 tuning, making room for using a split.
  • Less finger stretching than other layouts when playing chords, which may help ergonomically.
  • Arpeggios are quite smooth, as you're simply walking stacked shapes.

Cheat Sheet

Page 1 Page 2

View PDF

What is the Mech Layout?

When I originally discovered this layout, I didn't yet have an isomorphic controller, so my friends and I would map it to my mechanical keyboard to play. Because of this, we referred to it as "playing the mech". After getting a LinnStrument and LaunchPad, I've continued using this name for the layout itself. It could also be referred to as the "wholetone layout" or "grid-based Wicki-Hayden" but I still prefer calling it mech.

In the layout, each row consists of a whole tone scale separated by fourths. The above cheat sheet document contains many common chord and scale shapes.

The more you play, the more you'll notice it is much easier than other instrument layouts to learn and play, making it quite fun. Its relation to the circle of 5ths makes certain music theory concepts easier to visualize and apply as well.

Important Notes / Troubleshooting

So far, this has mostly been tested on the LinnStrument 128 and LaunchPad X. If you own the LinnStrument 200, it might be less stable, so let me know if you run into any issues. I'm saving up for a LinnStrument 200 so hit that donate button if you want to help out. :)

Midimech sends midi commands to your midi controller and does not replace the firmware of your device. It changes certain settings for the program to function and resets them to common values after ending the program.

This program is in development, so some things may be buggy. If a device persists in a different state after ending the program (such as if a crash occurs), try running the program again and closing it. Otherwise try reconnecting or resetting your LinnStrument.

If you have issues with LinnStrument connectivity when the program starts, try recreating the virtual midi device before you start it.

That being said, I hope you enjoy it and have fun!

Getting Started

Windows

After downloading, make sure to follow the instructions under Setup.

Note: These builds are not always up to date.

Mac, Linux, and Running from Git

  • Download the project by typing the following commands in terminal:
git clone https://github.com/flipcoder/midimech
  • Switch to the new project folder:
cd midimech
  • Install the dependencies:
pip3 install -r requirements.txt
  • Follow the Setup instructions described in the section below.

  • When running the program, you can use:

python3 midimech.py

Setup

  • First create a midi loopback device. You can do this easily with LoopMidi on Windows or using "Audio MIDI Setup / MIDI Studio" on Mac. Then set your DAW to use this device instead of the linnstrument. Make sure the virtual device you set up has "midimech" in its device name, since this is how its detected by the program.

  • If you're using the LinnStrument 200, set size=200 in your settings.ini. If you don't have a settings file, copy it from settings.ini.example.

  • Run midimech. You should see a window pop up with the layout.

  • Your Linnstrument or LaunchPad X should show the colors of the layout and be playable in your DAW.

  • To enable the split, create another midi loopback device called "split" and restart midimech. Click the SPLIT button. One side should turn blue.

How to Play

Scales

By default, the C major scale is colored. You can highlight different notes by cycling the scale (SCL) and mode (MOD) buttons. Notice how only the colors change, and not the note positions.

You can change the starting note of the scale by using the transpose (TR) buttons, as well as positioning the board using the move (MOV) buttons.

Chords

Refer to the cheat sheet for a listing of many common chord shapes.

To play a chord, simply position the dotted black square of the chord on the note you want to play, and make the shape with your fingers. For example a C major chord is made by playing the notes:

 G
C E

Velocity Curve

You can modify the velocity curve using a decimal value. Lower values are more sensitive. The default is 1.0.

velocity_curve=0.5

You can also clamp the midi velocity value to a min (default: 0) and max (default: 127).

min_velocity=0
max_velocity=127

Launchpad

Supported launchpads are automatically detected on program start. Support for these will improve over time.

If you're on the LinnStrument and don't want your launchpad used, simply set it to false:

launchpad=false

Vibrato

Midimech adds a cool feature to the Launchpad where it can detect wiggling a note to create a vibrato effect. This is enabled by default and mapped to CC0. If your synth supports CC0 vibrato, you should hear the vibrato activate by rocking your finger back and forth from left to right while pressing the note down.

You can disable it in settings.ini using:

vibrato=off

There is also experimental support for pitch wheel vibrato using:

vibrato=pitch

Color Schemes

LinnStrument Colors

LinnStrument colors can be changed in the settings using lights and split_lights for each split respectively.

lights=1,9,9,2,2,3,3,5,8,8,11,11
split_lights=4,7,5,7,5,5,7,5,7,5,7,5

The color numbers here are the values used by the LinnStrument.

LaunchPad & App Colors

You can change the colors of the launchpad and in the app by setting colors and split_colors similarly as above. This supports both hex values (starting with #) and common web color names.

colors=red,darkred,orange,goldenrod,yellow,green,darkolivegreen,blue,darkslateblue,indigo,darkorchid,pink

Lite Mode (low GFX)

To activate lite mode, run midimech with --lite on the command line or set lite=true in your settings.

This disables extra graphics and chord analysis in the app to reduce latency on low end systems.

One Channel Mode

MPE mode can be toggled in the app using the MPE button.

To send to a specific midi channel, set one_channel to the specific channel number. The default is 0, which indicates using MPE. Clicking MPE in the app toggles this between 0 (MPE) and 1 (first channel), otherwise the value in settings is used.

Visualizer

DAW visualization

Using this program, you can visualize the midi playing in your DAW on both the screen and LinnStrument. You do this by creating another device in LoopMidi called "visualizer" then use a Midi Out plugin on the track you want to visualize and set the plugin to use the visualizer midi device.

Synthesia

To use the visualizer with Synthesia, create a new MIDI loopback device called "visualizer". In Synthesia settings, set it as an output device for note lights.

Future Plans

  • Touchscreen support
  • Find a way to adjust vibrato sensitivity without affecting slides. Roger Linn has indicated that this is probably impossible, but I have a few ideas to try.
  • Better velocity curve settings (right now its only basic options in the settings.ini).
  • Better GUI and integration with the settings file.

Attributions

This program is built using the following projects and libraries:

Thank you!

Contact / Questions

I'm on the LinnStrument Discord at https://discord.gg/h2BcrzmTXe. Come hang out!

midimech's People

Contributors

flipcoder avatar

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  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

midimech's Issues

Other layouts possible?

I was wondering how much it'd be to have more the option for more than one layout. Your software looks good, and I rather not redo the work to get my preferred layout working.

Specifically, I was thinking of this: https://www.le-nouveau-clavier.fr/english/#1a-new-evolution-of-the-keyboard-is-still-possible-or-the-grand-return-of-the-symmetrical-piano

So it's two whole tone scales, the bottom one starting at c and the top starting at c#. The resulting layout is isomorphic. Given that there are 8 rows in the linnstrument, this pattern could be repeated four times on top of each other, shifted by 2 octaves each time, so there's no overlap. This arrangement would cover 8 octaves in the 200 model. So it'd be like having four pianos stacked on top of each other, with the benefit of an isomorphic layout. The layouts could be shifted by one octave as well, so that octaves are two squares above.

To be honest, I find all the layouts I've seen so far deficient due to the ergonomics of the linnstrument. Anything that requires a lot of vertical movement is going against the natural angles of the wrists. Not an issue if one could hold it like a guitar, which I've tried but is not exactly ergonomic either. And I own an eight-string guitar also tuned in fourths like my linnstrument, and it's a world of difference. So I am wondering if this layout could be an answer to have a more horizontal way of playing while keeping the isomorphic properties of the linnstrument. The main disadvantage mentioned in the article is getting lost due to the symmetry, but this issue is not an issue with the linnstrument because of the LED lights.

Option to have the layout start from the top left corner

So I was today years old when I realized that you can have a negative offset in the linnstrument (go to global settings > row offset > hold octave + > select -5 in the screen that appears). So this means the lowest note is in the top left corner and the highest note is in the bottom right corner. With the default layout, chords become a lot easier because they fall where the fingers naturally want to go. Basic minor and major chords become trivial. 7ths are still a little bit awkward but much less than with the default layout.

So I haven't tried your software because I saw there are some issues with the 200 version, but I was wondering what happens to the chord shapes in your layout if you similarly start from the top left corner.

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.