/amusimatic

Python/Kivy midi-editor

Primary LanguagePythonMozilla Public License 2.0MPL-2.0

What is it:

Amusimatic is, primarily, a midi-editor. While there are already plenty of those available, many of them for free, this editor's particular ambition revolves around various forms of "usability". Having an extensive, and, hopefully, well-behaved user interface is one. Giving users the ability to see and tweak the most minute things, down to the individual message and its timing, is another.

A less obvious form of usability for a midi editor is its lack of focus on "music production". This editor isn't meant for professional musicians, DJs, studios, etc, in fact, it's meant for people (like myself) who have very little idea of what music professionals actually do or what their workflows are like (and therefore have a hard time making sense of the kinds of controls presented in software packages meant primarily for that kind of work). This midi editor is more for playing around with and exploring the characteristics of a piece of music, or open-ended exploration of music theory concepts in general, by the un-initiated.

Why I'm making it:

It's taken me a long time to learn that my particular musical malfunction, while uncommon, isn't absolutely unique, and, in fact, has a name: "amusia". The specific quirks of my neurological wiring may be of little interest to anyone besides myself, but my perceptual limitations with respect to music left me very curious about what it is people meant when they said that "music is all [about] mathematics". Unfortunately, it turned out that people often repeat this statement without understanding what it actually means either, so asking for clarification didn't leave me with anything resembling a satisfactory explanation. I did, eventually, learn enough about both mathematics and music (the latter entirely by reading about it), to understand why someone might say that music is all math (technically not entirely true, because, at least at some point, physics must get involved -- otherwise there would be no sound, and most people would be just as "deaf" to music as I am, which is not the case in reality). However, I was still curious to see if there was a way to perceive and understand the variety of mathematical patterns behind music in a more experiential (as opposed to purely abstract and theoretical) way, and decided to try exploring music with software.

Unfortunately, I didn't get very far by using the available freeware, which appears to become more specialized towards the needs of actual musicians as it becomes more feature-rich. I also ran into some unexpected technical problems while trying the "blind probing" approach: that is, creating stand-alone python modules to "extract" and analyze data from my personal collection of midis (downloaded mostly in the 90s). Midi files can apparently contain a great variety of "glitches" (depending on how they were generated, I guess), while still being playable, that make it very difficult to write code that can extract even fairly simple data dependably from a given midi.

I decided that, if I were going to get anywhere with this, I needed to make a graphic interface -- and while I was at it, it needed to be one that would allow one to take a closer look at (and fix) whatever "glitches" came up, as well as provide all manner of tools for looking at what a particular piece of music is doing, and to make it do something else -- to see and hear the difference. So I started working on "Amusimatic" -- a (hopefully) amusing way to play with the mathematics of music, possibly most helpful to someone with amusia.

How it's made:

In a nutshell, python and Kivy. I considered a few candidate languages, and python seemed like the best choice for this project, so I decided to learn it (as I haven't used it extensively in the past). I also looked into a variety of packages for creating a user interface, and Kivy stood out as a fairly mature and flexible one -- I also really like the kv design script, for the separation of concerns.

Midi-specific functionality is handled using Mido: again, after looking at available libraries, it seemed like the most mature and flexible one.

This application is intended for a non-mobile platform: mobile applications rely primarily on the use of a finger as a pointing device, which, given the relative sizes of most fingers and mobile screens, neccesitate interfaces I personally find both esthetically unappealing and feature-poor (only my opinion)-- more than adequate for a multitude of applications that require little depth or complexity, but fatally limiting in some cases. I made a conscious choice to build the kind of interface that requires a much more precise pointer for this application.

Status Quo:

While I've devoted the majority of my spare time to working on this project, it's still nowhere near complete, and, as of right now, is only barely functional as a midi "player". I've intentionally devoted the lion's share of development time to the functionality of the user interface itself (as opposed to processing midi files, because it is my observation that existing software's functionality is most severely limited specifically by the design (and sometimes execution) of its user interface (as opposed to any other factor). At one point, it simply became necessary to create the exising midi-related functionality to continue defining and expanding the interface. It is, of course, my eventual goal to "catch up" the two, but for now, most of the available controls don't actually "do" anything except attempt to be well-behaved visual elements.

Contributing:

Please do! I'm learning (both python and music theory) as I go, so pointers and corrections are very welcome. Moreover this is entirely a passion project, competing for limited free time with a large number of other interests and hobbies. While I intend to keep working on it for as long as it takes to complete, I'd prefer to actually see it finished (and use it!) sometime before the heat-death of the universe.

screenshot1 screenshot2