Beats-per-minute Meter

December 16th, 2011
ideas, music, tech
In general I have a decent sense of how fast to play a tune; I can usually hear if we're going to slow or too fast, and I can look at the dancers to support my intuitions, seeing if they're scrambling. But sometimes, especially on jigs, my sense fails me and I'm left wondering whether we're going too fast. This is hard because "too fast" can be just 3% more than "just right".

To help me out, I want to write software where I can tell it a target BPM and it will let me know non-intrusively where we are relative to it. I think the easiest way to do this is with color [1]: blue if we're below min, red if we're above max, green at target [2]. Between these colors we can have smooth variation.

This needs to have as input the audio signal, either through a board feed (especially if we're also recording) or through the built in mic (which should be plenty good for beat detection). It needs to disable the screensaver. And it needs to write to a giant window. Ideally this would just run in a web browser as javascript, but for that I think I'm waiting on navigator.getUserMedia(), which appears to currently exist only in opera. (If you want, you can check your browser.) So this leaves me with flash, a java applet, or a standalone program. [3]

General fully automated beat detection is a hard problem, but there are two things that make it easier in this case. One is that it only needs to work in the 90-130 range for a nearly constant tempo. The normal problem of "is this 100bpm or 200?" doesn't apply. I'm also not trying to say exactly where the beats are, just how often, so consistent syncopation isn't a problem either. There are some libraries; whether I end up using one probably depends on whether I'm in a browser and needing to use javascript.

Any chance this already exists? [4]


[1] The important thing to me is that this be something that requires minimal mental energy during the performance. Having a colored screen does that. Giant BPM numbers might work too, I'm not sure.

[2] I think the right values are min = 112, max = 122 and target = 118. You could make target adjustable, but I think I'd rather just mentally aim for a blueish color when we were intentionally playing slow and reddish when intentionally playing fast. The goal is for max and min to be set at the bounds of the danceable range.

[3] You could also make some sort of standalone box, like a tuner or metronome. Possibly with a spiffy analogue needle. One advantage of a box is that you could sell them. You'd probably sell it as a "better metronome". Hmm, sales pitch: "Why make the musician adapt to the device? Just as we've replaced tuning forks with tuners that can tell what note you're trying to play and help you adjust to where you want to be, the bpm-o-matic lets you know how fast you're playing without any work on your part. Throw that old metronome away and buy a bpm-o-matic today!"

[4] You could just say: 'learn to use a metronome'. I don't like metronomes; they feel too rigid. The standard way of using one involves playing the downbeats when the metronome says to. This doesn't really combine well with having a group of people play where only one of them is paying attention to it. You could learn to tell whether you are getting ahead or behind of an arbitrary metronome beat, but that sounds hard, confusing, and attention demanding.

Comment via: google plus, facebook, r/WeAreTheMusicMakers

Recent posts on blogs I like:

Development RCTs Are Good Actually

In defense of trying things out

via Thing of Things March 25, 2024

Clarendon Postmortem

I posted a postmortem of a community I worked to help build, Clarendon, in Cambridge MA, over at Supernuclear.

via Home March 19, 2024

How web bloat impacts users with slow devices

In 2017, we looked at how web bloat affects users with slow connections. Even in the U.S., many users didn't have broadband speeds, making much of the web difficult to use. It's still the case that many users don't have broadband speeds, both …

via Posts on March 16, 2024

more     (via openring)