Hi,
for the final project of my computing degree, I have been developing an application that processes MIDI data to improve a keyboard's capabilities. I was inspired after using a MIDI controller and then a keyboard that can be played on its own but is also MIDI compatible. The former only has three small LED numbers making it difficult to change settings and its overall velocity response is too high. The latter has no octave shift buttons so the lowest and highest notes of some instruments cannot be played. Also, the velocity response of some keys, or some virtual instrument notes, are often louder/quieter than other notes, but these note velocities cannot be easily turned down/up (until after playing).
Unfortunately, neither of them could divide the keyboard into separate 'zones' for playing multiple instruments simultaneously, though it seems that most keyboards lack this feature; to achieve it, software is required.
The application (Live MIDI Manager), once finished, will resolve all of these shortcomings. From the outset, I have tried to make it user-friendly and intuitive (the screenshot of the main window has been attached).
The main window:
- allows you to add up to 4 instruments
- displays input MIDI data (from a MIDI keyboard) and output MIDI data (after being processed by the application).
Also for each instrument you can:
- name it
- adjust its note range
- change the output MIDI channel (each instrument will have its own)
- set a custom velocity curve (in addition to the default linear plot, I've added five concave and five convex curves)
- set the octave shift value (the shifted notes will be played even if it overlaps with another instrument's note range).
The application also has additional dialogue windows (feel free to ask for screenshots) including those for:
- connecting it to the keyboard (input) and software (output)
- creating a custom velocity curve
- saving/loading instrument settings
Next, I'll be working on adding a dialogue that allows individual note velocities to be increased/decreased as required. To finish, I'm going to add an accompanying note feature so that an octave, fifth or fourth is added when a note is played.
Any questions or feedback are welcome. If you include your first and last name, I could cite you in the assignment report. 🙂
Thanks for reading,
John Baird.
An on-screen keyboard would make splitting/layering more intuitive.
Is it possible to select notes/channels by playing a note?
Hi Clemens,
thanks for your input. I would say that the current, list widgets and an on-screen keyboard each have their own advantages and disadvantages.
The list widgets provide the user with only the vital values that they will need to change (the lowest and highest notes of each instrument). This allows all instrument note ranges to be seen at once and the purpose of each list widget is clear. Also, to help match the keyboard, the instruments are always ordered from low to high.
I would agree, though that an on-screen keyboard could be more easily related to the actual keyboard. However, in order to display all 128 keys of a reasonable size, scrolling will be needed meaning that the extents of the instrument key ranges cannot all be seen at once; the user will need to scroll. Also, intuitively, a user may think that the keyboard is used to play notes and not to assign keys to instruments. Both functions could be added, but this would introduce its own problems, such as trying to play a note in edit mode or vice versa.
It is not currently possible to set the note ranges after playing a key, though I like the idea! This would require:
- determining which note range value is being set (particularly when there are three or four instruments)
- indicating that the keyboard input should be used to edit instrument note ranges.
Both could be achieved by adding buttons to the Input MIDI widget so that the last note played can be set as highest note of Instrument 1/2/3, or the lowest note of Instrument 2/3/4, depending on the button pressed. I will try and add this after finishing the edit note velocity and accompanying note features. Funnily enough, I have been considering adding list widgets in the form of a keyboard in order to make it easier to edit individual note velocities.
Thanks again for your feedback. I'll credit you in the report and code. 🙂
John.
I'd also bee keen to see fades between splits, so you can blend sounds 🙂
What is the final outcome of this project? Will this be on Github or are you looking to be commercial?
I would be curious to try this out 🙂
Andrew
Hi Andrew,
thanks for your input. I'll see what I can I do. 🙂
I'm hoping to make it open-source on Github in early 2021 after it has been marked. I'll message you after adding it. 🙂
John.