Yumeko BPMFinder - My very own human-assisted BPM analyzer written in JavaScript!

On a previous post I discussed about the results of a Windows BPM finder program MixMeister BPM Analyzer. It sometimes produces values that are 2 times or half the seemingly actual value. And then the doubt grew on me, “Is that program even accurate at all?”. So, I was set to program my own BPM finder.
But I don’t know any sound programming stuffs, so I went for the easy path of a human-assisted program in which the algorithm is very intuitive. A human would tap the beats while playing a song and the program will do the simple mathematical calculation (it’s “beats per minute” for a thing, so it’s basically just a division).
First I went for C# (using Winforms for the GUI), my favorite programming language. But when I was about to make the Main function I abandoned the idea. It would just be too easy. I then decided to program using a language which is such a pain to use named JavaScript. (well, probably the real subconscious reason I picked JS is because then people could effortlessly run it)
It’s indeed such a pain. I couldn’t find a function that formats the integer 3 into a string “03″ and had to make my own function (I searched a PDF I have but realized that I could finish the task faster by coding manually). And don’t get me to talk about event handling in IE vs. FF. Anyway it’s an around 1+ hours hack (I’m still not familiar with JS and needed lots of searching, see?).
Features:
- Cross platform! Run in Linux, Mac, and even Windows! (did I get that reversed somehow?)
- Open source, free software, or whatever else you want to call it. GPL 2 (I won’t use GPL 3 until the rough bugs are ironed out and the first update comes).
- Accurate, as long as you have a sense for beat. Oh, and btw you can use it to check whether you can sense beat correctly by comparing it with the output of automized programs!
- Actually enjoy the songs while you calculate the BPM!
To try the program, just visit its page. It has a short and simple usage manual.
Oh, and here’s the result for some songs, compared with the output of MixMeister BPM Analyzer. Note that MixMeister BPM Analyzer actually computes to 2 decimal places also (as displayed in its GUI, but internally probably more), but when stored to the MP3 file the value gets rounded.
Essentially the same or very close
| Title | Yumeko BPMFinder | MixMeister BPM Analyzer |
| Tsukiatteru no ni Kataomoi | 160.82 | 160 |
| AMBITIOUS! Yashinteki de Ii Jan | 160.83 | 160 |
| Koi no Nukegara | 156.38 | 155 |
| Shabondama | 128.85 | 128 |
| Shiroi Iro wa Koibito no Iro | 102.58 | 101 |
Nice results. Either we’re both right or we’re both borking. I’m inclined to believe we’re both right :).
One of the values is (very close to) 2 times of the other
| Title | Yumeko BPMFinder | MixMeister BPM Analyzer |
| Sakura Mankai | 80.40 | 160 |
| Gag 100kaibun Aishite Kudasai | 165.75 | 82 |
| Yuujou ~Kokoro no Busu ni wa Naranee!~ | 208.76 | 104 |
| Kiseki no Kaori Dance. | 170.75 | 85 |
As I have explained on the previous post, a song in n BPM can be easily played on 2n BPM without any change on the speed of the notes, but still the beats will be different. On this area, my program wins hands down. (Sakura Mankai 160 BPM? WT*…) Actually this downside of MixMeister BPM Analyzer makes it useless for my “fast” MP3 iTunes smart playlist because many slow songs are included there.
Btw I’m quite surprised that MixMeister BPM Analyzer handled Yuujou well because the song has a slow intro before proceeding to the fast tempo used throughout the song. Does it ignore the small part that has a different tempo or does the rest of the song averages the value out?
Awfully different (not multiple of twos) values
None :).
Ending
Well, my program works and I’m quite happy for it :). That’s all… The source code isn’t awfully long and if you’re interested in JS feel free to download it.
Tags: algorithm, berryz koubou, bpm, Matsuura Aya, morning musume, Morning Musume Sakura Gumi, v-u-den, W











August 16th, 2008 at 11:19 pm
Well, it sound good. Unfortunately, right now the term ‘BPM’ is still sound strange for me.
August 17th, 2008 at 6:50 am
Hmm. Do you remember the conductor on the choir of school’s monday assembly? She moves her hand, guiding those singing, in a rhythmic fashion right? (e.g. 1, 2, 3, 4, 1, 2, 3, 4, …)
Every hand movement of that conductor is counted as a “beat”. BPM is just “beats per minute”.
August 19th, 2008 at 10:07 am
How could you do that?
Share the algorithm please!!!
In c-like or pascal-like ofcourse. Not that awful JScript.
August 19th, 2008 at 10:10 am
Oooh, my mistake.
I thought you did sound programming.
September 1st, 2008 at 3:06 pm
Thanks for giving me a smile today, fauzan.sa