views:

83

answers:

1

I need to develop a performance evaluator for piano playing. Based on a midi generated from sheet music, I need to evaluate the midi of the actual playing (midi keyboard). I'm planning to evaluate the playing based on note pitch, duration and loudness. The evaluation is I suppose a comparison of the notes of the sheet music and playing in midi.

But I have no idea how I can visualise (i.e. show where the person have gone wrong) this evaluation process. i.e. maybe show both the notation and highlight which note has gone wrong. But how can I show any of this in some graphical form? Or more precisely on a stave (a music score) itself. I have note details (pitch, duration) and score details (key and time signature) stored in a table, and I'm using Java. But I have no clue as in how I can put all this into graphical form.

Any insight is most gratefully appreciated. Advance thanks

+3  A: 

What you're talking about, really, is a graphical diff tool for musical notation. I think the easiest way to show differences is with an overlay of played notes (and rests) over "correct" score symbols. Where it gets tricky is in showing volume differences, whether notes are played (or should be played) staccato, marcato, tenuto, etc. For example, a note with a dot over it is meant to be played staccato, but your MIDI representation of a quarter note might be interpreted as an eight note followed by an eight rest, etc.

You'll also have to quantize the results of the live play, which means you will have to allow some leeway for the human being to be slightly before or after the beat without notating differently. If you don't do this, the only "correct" interpretation of the notes will be very mechanical (and not pleasing to the ear).

As for drawing the notation and placing it on the correct lines or spaces on the staves, that is not hard if you understand how to draw graphics. There are musical fonts available that permit you to use alphanumeric characters to represent note bodies, stems, rests, etc. you will also have to understand key signatures, accidentals, when certain notes are enharmonic, etc.

This is not a small undertaking you are proposing, and there is already a lot of software out there that does a lot of what you are trying to do. Maybe some exists that does exactly what you want to do, so do research it before you start coding. :) Look at various work that has already been done and see if there is anything you can use or which would put you off your project.

I made my own keyboard player/recorder for QuickTime's MIDI implementation a few years ago and had to solve a number of the problems you face. I did it for fun, and it was fun (and educational for me), but it could never compete with commercial software in the genre. And although people did enjoy it, I really did not have time to maintain it and add the features people wanted, so eventually I had to abandon it. This kind of thing is really a lot of work.

Robusto
Thanks a lot. So there's a lot I need to work out. Can you pls explain this quantisation process? I didn't get it there. Thanks for giving me some insight.So can these musical fonts be integrated in to java code? And another problem is I'm having troubles finding the exact key words to search about visualising this performance process. What can be the likely keywords?
Dolphin
First, let me say that you should at least upvote the responses here that you have found helpful. This will motivate people who have taken time to respond. Second, quantization is the way of "guesstimating" how to map what was actually played to a perfect mathematical representation of the score. No actual performance is mathematically perfect. Anticipating beats or retarding them is what's called "expression". See http://www.soundonsound.com/sos/mar06/articles/performertech.htm, which talks about quantization in the software I use.
Robusto
Third, if you search through the link I gave you on "work that has already been done" you should be able to find concepts and even links you can use to find out more about the process.
Robusto
I'm sorry, wasn't aware that you can upvote - really sorry. Really your response was helpful -thanks.So can I visualise score and note details using music fonts? So what I should basically do is to draw the correct score (i.e. what should be played), along with the played score - using the note and score details I have stored in a table - and do some score tracking and maybe highlight the incorrect notes and instances (e.g. where the person played additional notes, missed notes, wrong timing, wrong dynamics). Is it really do-able?I'll search about quantisation and about what you said. Thanks
Dolphin
If I were doing this I would perhaps overlay "correct" notes (shown in black) with "what you played" shown in red. There should be a Java library somewhere that lets you draw graphics and text together, placing them precisely. If all else fails, there are many programs that let you convert text to vector graphics or bitmaps, which would give you your basic "library" of note, rest, etc. shapes.
Robusto