Quick Links:
Background
Shimi is a project that I originally started working on several years ago, not long after my move to Canada. I'd done a pretty light move when coming over here, and my instruments were back home. I was actually kind of glad to have some space between myself and them though, because I'd felt like I was in a bit of a musical rut for a while, where I'd learnt to play a bunch of songs that I enjoyed, but I didn't feel like I was really able to use my instruments to actually express myself, or experiment.
Not wanting to straight away go out and buy some more instruments to repeat the same bad practice habits I'd built for myself up to that point, I instead decided that I should try building an instrument, one where I could easily and creatively map keyboard strokes, game controller wiggles, mouse movements, or even MIDI inputs into new MIDI output. The idea was that this would allow me to think about how I play music in a new way. From this, shimi was born, the idea being that it's a shim for all these separate inputs to themselves become MIDI controllers.
Development
The application was originally designed as a standalone desktop application using vue + electron, with an eye towards being a low-code tool, to be easily accessible for anyone to pick up and play around with. However, the deeper I got into the project, the more I realised that to unlock some of the truly creative possibilities, there was no alternative for having an actual fully-featured programming language, so I made the switch to making the project a javascript library instead. This not only made development much simpler, it also made it more portable, since now anyone with a web browser could play around with it.
Features
The project is currently in a state where it has components that support many common musical concepts, for example:
- - Metronomes, for representing the passing of time in terms of bars & beats.
- - Time Signatures, for defining how bars and beats are counted.
- - Clips, for holding melodic, or repeating musical ideas.
- - Arpeggios, for defining how a chord should be articulated.
- - Clip Recorders, for recording some musical input into a clip, which can then be played back.
There is also the companion project, shimi-wc, which is a collection of web components, aimed to support easy user-interaction with a number of shimi's objects. You can find this project here.
Future
While I'm happy with the stable state that shimi is currently in, my plans are to now to take it in a bit more of an experimental direction. I've always been fascinated by the idea of computer generated music. In 2017 I won an award at my university for Melodist, a system I was writing to generate new melodic ideas out of existing ones. I would love to incorporate some of the work from that into shimi.
Here's a video showing what melodist was, how you could have a bunch of melodies saved in a library, and drag different ones into different fields within a 'warp' panel, that would use specific aspects of a melody to contribute to a new output melody.
Park, Coach and Chemistry icons created by Freepik - Flaticon