Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add MIDI output support (with some limitations) #7

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

hikari-no-yume
Copy link

Adds support for MIDI output, so you can use the autokalimba to play an external synth! This uses Web MIDI, which is available in Chrome and Firefox currently. In my experience, it works best in Chrome.

I tested this with my Roland SC-7. That's a General MIDI device with no panel controls, hence me adding dropdown and buttons for sending Program Changes for my convenience, but they're useful for other devices too.

Some features aren't supported yet:

  • Tuning. Probably easy to add using the RPN for Fine Tuning.
  • Strumming. This would need a scheduling system so stums can be cancelled without sending a Note Off too late or too early.
  • Changing the voicing of a chord while it is playing, either due to a new bass note or due to bending. This is tricky because, when using just a single MIDI channel, there's no standard way to change a note after it has begun. Restarting the note (Note Off followed by Note On) doesn't sound good. We could add a mode where we use one channel per chord to allow per-note pitch bends, à la MIDI Polyphonic Expression?

In line with many MIDI instruments, the MIDI output is independent of the normal synthesis output. They can play together in a duet! 🎶

Adds support for MIDI output, so you can use the autokalimba to play an
external synth! This uses Web MIDI, which is available in Chrome and
Firefox currently. In my experience, it works best in Chrome.

I tested this with my Roland SC-7. That's a General MIDI device with no
panel controls, hence me adding dropdown and buttons for sending Program
Changes for my convenience, but they're useful for other devices too.

Some features aren't supported yet:

- Tuning. Probably easy to add using the RPN for Fine Tuning.
- Strumming. This would need a scheduling system so stums can be
  cancelled without sending a Note Off too late or too early.
- Changing the voicing of a chord while it is playing, either due to
  a new bass note or due to bending. This is tricky because, when using
  just a single MIDI channel, there's no standard way to change a note
  after it has begun. Restarting the note (Note Off followed by Note On)
  doesn't sound good. We could add a mode where we use one channel per
  chord to allow per-note pitch bends, à la MIDI Polyphonic Expression?

In line with many MIDI instruments, the MIDI output is independent of
the normal synthesis output. They can play together in a duet! 🎶
@hikari-no-yume
Copy link
Author

Ah I made some oversights, some other stuff is missing. The forceFifthInBass/split-keys thing isn't implemented, and also the detuning thing. The former is trivial, the latter I'm not sure, but it's probably doable with pitch bending. Hmm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant