diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..08a0b06 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,17 @@ +# Code of Conduct + +When contributing and participating in project development and discussion, +members are expected to act in accordance to this rule: + +Treat others with kindness and decency, as the way you would wish to be treated in their position. + +Please be respectful of the wide range of cultural and religious differences +that exist in the world and be open to apologizing when conduct is unwelcome +or extending forgiveness to those willing to change for the better. + +All involvement on the project should be productive, positive, and welcoming. +Keep discussions project-focused and avoid escalating personal matters. + +If someone has made you feel unwelcome, please contact the developers. + +Thank you and have fun! diff --git a/README.md b/README.md index e517529..904b47e 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,16 @@ + # midimech ![midimech](https://i.imgur.com/iNKaTi3.png) -[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://paypal.me/GradyOConnell?country.x=US&locale.x=en_US) +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. Lacking an isomorphic controller, I used to map this layout to my mechanical keyboard to play. Because of this, my friends and I referred to it as "playing the mech". The layout could also be referred to as Wholetone +5 or Diagonal Wicki-Hayden but I still prefer calling it mech. - -This project intends to bring the layout to wherever it is capable of being played, starting with the LinnStrument and Launchpad X. +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: -- Use the mech layout on LinnStrument and LaunchPad X +- 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 @@ -22,7 +21,7 @@ Midimech supports: - Custom Lights - Great for playing fast arpeggios and piano runs -**Please read the instructions and important notes before usage. Have fun!** +**Please read the setup instructions and important notes before usage. Have fun!** License: MIT (see *Attributions*) @@ -44,25 +43,33 @@ LinnStrument Community Discord: https://discord.gg/h2BcrzmTXe - 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. -- Unlike piano, instrument splits can overlap. - 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 -![Cheat Sheet](https://i.imgur.com/FJgBnh5.png) +![Page 1](https://raw.githubusercontent.com/flipcoder/mech-theory/main/mech-cheatsheet-0.png) +![Page 2](https://raw.githubusercontent.com/flipcoder/mech-theory/main/mech-cheatsheet-1.png) + +[View PDF](https://github.com/flipcoder/mech-theory/blob/main/mech-cheatsheet.pdf) + +## What is the Mech Layout? -[PDF Version](https://github.com/flipcoder/midimech-resources/blob/main/midimech-cheatsheet.pdf) +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. -## Important Notes +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. -So far, this has mostly been tested on the LinnStrument 128 version. If you own the 200-note version, please feel free to test it and let me know how this works for you. +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. -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. +## Important Notes / Troubleshooting -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 it. +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. :) -Because it changes the setup of the LinnStrument during usage, it is only recommended for people that are comfortable with setting up and configuring the Linnstrument. +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! @@ -72,9 +79,9 @@ That being said, I hope you enjoy it and have fun! - [Download (Win)](https://github.com/flipcoder/midimech/releases) -Note: These builds are not always up to date, but they're easier to get working. +After downloading, make sure to follow the instructions under `Setup`. -Alternatively, you can use the process below to run it from the repository. +*Note: These builds are not always up to date.* ### Mac, Linux, and Running from Git @@ -114,147 +121,93 @@ python3 midimech.py ## How to Play -### Layout - -Each row consists of a whole tone scale and each row is separated by fourths. This has a number of advantages you'll see below. - -### Basic Scales +### 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. -The major/minor scales are shaped with the "3-4" pattern. 3 notes on first row, then 4 notes on next row, then repeat moving over 1 space, making runs fit across the fingers easily. -Here's what it looks like: +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. -``` -4567 -123 -``` - -All the modes for this, (such as lydian, dorian, etc.) are accessible by picking a different starting note. - -For example, if you start the scale on 6, it becomes a minor scale. +### Chords -### Pentatonic Scales +Refer to the cheat sheet for a listing of many common chord shapes. -Similarly, the pentatonic scale modes fit the "2-3" pattern: +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: ``` -345 -12 + G +C E ``` -### Melodic Minor Scale +## Velocity Curve -Melodic minor has a "2-5" pattern: +You can modify the velocity curve using a decimal value. Lower values are more sensitive. The default is 1.0. ``` -34567 - 12 +velocity_curve=0.5 ``` -## More Scales - -Once you become comfortable with this layout, you can introduce the harder scales into your playing: - -### Blues Scale - -Here's a fun one. Depending on the virtual instrument used, I prefer to visualize the blues scale as a 2-3 pattern and bending into the "blue note". - -The shape in that case is this: +You can also clamp the midi velocity value to a min (default: 0) and max (default: 127). ``` -345 -12 +min_velocity=0 +max_velocity=127 ``` -The '2' in this shape is the tonic of the blues scale and the blue note is accessed by bending between 4 and 5. When playing the scale, start on the note position labeled '2' above. Note that the numbers here are just the numbers inside the shape in order, so they do not correspond with actual intervals. +## Launchpad -To hold the blue note, simply wiggle your finger between 4 and 5 in the shape above or bend up from 4. That usually sounds cool. - -If you're playing an instrument without bend, the blues scale looks like this: - -``` -4 6 - 235 - 1 -``` - -Or: +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: ``` - 6 -235 - 1 4 +launchpad=false ``` -### Harmonic Major Scale +### Vibrato -This is the same 3-4 pattern, but the 6th note is flat: +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: ``` -6 - 45 7 - 123 +vibrato=off ``` -Or: +There is also experimental support for pitch wheel vibrato using: ``` - 45 7 - 123 6 +vibrato=pitch ``` -### Harmonic Minor Scale - -This one is a little tricky at first: +## Color Schemes -``` - 6 -345 7 - 12 -``` +### LinnStrument Colors -Or: +LinnStrument colors can be changed in the settings using `lights` and `split_lights` for each split respectively. ``` -7 - 6 - 345 - 12 +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. -You might prefer to think about this as a mode of Ionian Augmented intead, which is the 3-4 shape but with a sharp 5: +### LaunchPad & App Colors -``` -5 - 4 67 - 123 -``` - -Or: +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. ``` - 4 67 - 123 5 +colors=red,darkred,orange,goldenrod,yellow,green,darkolivegreen,blue,darkslateblue,indigo,darkorchid,pink ``` -## Circle of 5ths (Advanced) - -### Key Signature - -A benefit of this layout is the ability to identify and switch key signatures easily based on position. As you shift to the left, you add flats. To the right, you add sharps. You walk these in a zig-zag motion between both whole tone scales. Follow the shape of these numbers to see the pattern (from 1 to 7). - -``` - 2468 -1357 -``` +## Lite Mode (low GFX) -If note 1 is C (no sharps or flats in key signature), moving to 3 adds 2 sharps to the key signature. Simiarly if you're moving from 3 to 1, it adds two flats (or subtracts sharps). +To activate lite mode, run midimech with `--lite` on the command line or set `lite=true` in your settings. -### Brightness +This disables extra graphics and chord analysis in the app to reduce latency on low end systems. -Since the layout resembles the circle of 5ths, the further right you go from your tonic, the brighter than sound. The further left, the darker the sound. This is because the layout resembles a staggered circle of 5ths which corresponds with musical brightness. +## One Channel Mode -If you take the 3-4 pattern described above and shift your tonic inside of it, the further the tonic is to the left, the brighter the mode, from lydian all the way to locrian (left to right). This happens with other scale shapes as well. +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 @@ -280,13 +233,14 @@ In Synthesia settings, set it as an output device for note lights. This program is built using the following projects and libraries: -- [Pygame](https://github.com/pygame/pygame) +- [Pygame](https://github.com/pygame/pygame) and [Pygame-CE](https://github.com/pygame-community/pygame-ce) - [Pygame_GUI](https://github.com/MyreMylar/pygame_gui) - [RtMidi2](https://github.com/gesellkammer/rtmidi2) -- [PyMsgbox](https://github.com/asweigart/pymsgbox) - [PyGLM](https://github.com/Zuzu-Typ/PyGLM) - [Launchpad-Py](https://github.com/FMMT666/launchpad.py) by FMMT666 ([CC Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/)) -- [musicpy](https://github.com/Rainbow-Dreamer/musicpy) +- [musicpy](https://github.com/Rainbow-Dreamer/musicpy) for Chord Analysis +- [webcolors](https://pypi.org/project/webcolors/) +- [pyyaml](https://pypi.org/project/PyYAML/) Thank you! diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..8f0916f --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.5.0