locating the chorus in a MIDI song?

J

Joe Strout

We've got a need to generate short "samples" of songs that are in MIDI
format, to provide a preview function in a web app. We'd like to do
something more clever than just taking the middle 20 seconds (or
whatever) of the song -- ideally, we'd like to find the chorus, since
that's likely to be the most easily recognized part of the song.

I believe this could be done fairly reliably by looking for patterns
in the MIDI file, though I'm sure there are plenty of complications to
this simple idea.

So:

1. I see at <http://wiki.python.org/moin/PythonInMusic> there are
quite a few MIDI libraries for Python. Are any of them particularly
well suited to this task?

2. Anybody have an interest in music theory, as well as mad Python
skills? Want a paying contract job? If so, please contact me off-
list. I'd enjoy pursuing this myself, but if you think you can do a
better job at a reasonable rate, I'm happy to let you do so.

Thanks,
- Joe
 
A

alex23

We've got a need to generate short "samples" of songs that are in MIDI  
format, to provide a preview function in a web app.  We'd like to do  
something more clever than just taking the middle 20 seconds (or  
whatever) of the song -- ideally, we'd like to find the chorus, since  
that's likely to be the most easily recognized part of the song.

I believe this could be done fairly reliably by looking for patterns  
in the MIDI file, though I'm sure there are plenty of complications to  
this simple idea.

My first thought is that would be incredibly difficult, but a quick
google search pulled up a couple of papers:

"Music Scene Description Project:
Toward Audio-based Real-time Music Understanding"
http://ismir2003.ismir.net/papers/Goto.PDF

The RefraiD (Refrain Detecting Method) detects sections
being repeated and identifies the chorus (refrain) sections
of songs in popular-music CDs. Most previous methods
detected as a chorus a repeated section of a given length
(Logan and Chu, 2000; Cooper and Foote, 2002) and had
difficulty identifying both ends of a chorus section and
dealing with modulations (key changes) (Peeters et al.,
2002; Dannenberg and Hu, 2002). By analyzing relation-
ships between various repeated sections, RefraiD can de-
tect all the chorus sections in a song and identify both
ends of each section. It can also detect modulated chorus
sections by introducing a similarity measure that enables
modulated repetition to be judged correctly.

The paper doesn't go into much detail beyond that, but does refer to
more that do.

"A chorus-section detecting method for musical audio signals"
http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?tp=&arnumber=1200000&isnumber=26996

By the same authors, I believe. Although they're talking about audio,
I would expect the technique used could be readily applied to midi as
well (probably more easily, in fact).

Note that: "Experimental results with a popular-music database show
that this method detects the correct chorus sections in 80 of 100
songs." So it's going to be wrong 1 in 5 times, if that's an
influencing factor in trying to do this programmatically. How many
MIDI files are you talking about here? Could it be easier to just
manually mark the chorus for each?
2. Anybody have an interest in music theory, as well as mad Python  
skills?  Want a paying contract job?  If so, please contact me off-
list.  I'd enjoy pursuing this myself, but if you think you can do a  
better job at a reasonable rate, I'm happy to let you do so.

Give me a few days to see what my upcoming schedule is like and I may
get back to you on this. I have a friend who has worked on
computationally generating emotional expression with MIDI just
recently, I'll pass this on to him as well.

Is Python a strict requirement for this?
 
T

Tim Rowe

2008/11/4 Banibrata Dutta said:
Without pretending to be an expert on the subject of music-theory or
audio-processing, my n00b'ish doubt is -- MIDI, unlike MP3 would be devoid
of voice... and in my overtly simplistic thinking -- presence / absence of
which (i.e. voice) could be a "brute-force" way of detecting refrain/chorus

I think you're right. After all, The melody of the verse repeats
between verses, so without the words repetition is no longer a good
indicator of the chorus, and a shift in style is as likely (maybe more
likely) to find the bridge than find a chorus.. By the way, some of
the papers referenced seem confused between refrains (which form part
of the verses) and choruses (which are separate musical units).
 
A

Aaron Brady

We've got a need to generate short "samples" of songs that are in MIDI  
format, to provide a preview function in a web app.  We'd like to do  
something more clever than just taking the middle 20 seconds (or  
whatever) of the song -- ideally, we'd like to find the chorus, since  
that's likely to be the most easily recognized part of the song.

I believe this could be done fairly reliably by looking for patterns  
in the MIDI file, though I'm sure there are plenty of complications to  
this simple idea.

Hi Joe, nice to hear from you from earlier discussion.

Would it be applicable to mark one chorus by hand, and the program
finds all the others?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top