locating the chorus in a MIDI song?

Discussion in 'Python' started by Joe Strout, Nov 4, 2008.

  1. Joe Strout

    Joe Strout Guest

    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
    Joe Strout, Nov 4, 2008
    #1
    1. Advertising

  2. Joe Strout

    alex23 Guest

    On Nov 4, 2:20 pm, Joe Strout <> wrote:
    > 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?
    alex23, Nov 4, 2008
    #2
    1. Advertising

  3. Joe Strout

    Tim Rowe Guest

    2008/11/4 Banibrata Dutta <>:
    > 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).

    --
    Tim Rowe
    Tim Rowe, Nov 4, 2008
    #3
  4. Joe Strout

    Aaron Brady Guest

    On Nov 3, 10:20 pm, Joe Strout <> wrote:
    > 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?
    Aaron Brady, Nov 6, 2008
    #4
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Hugo Villeneuve

    Java MIDI output device to MIDI Yoke.

    Hugo Villeneuve, Jul 4, 2003, in forum: Java
    Replies:
    0
    Views:
    931
    Hugo Villeneuve
    Jul 4, 2003
  2. bunch92
    Replies:
    11
    Views:
    1,061
    Neredbojias
    Aug 5, 2005
  3. sam
    Replies:
    0
    Views:
    277
  4. Gilly
    Replies:
    6
    Views:
    415
    Ken Starks
    May 4, 2008
  5. Asbjørn Bjørnstad
    Replies:
    0
    Views:
    428
    Asbjørn Bjørnstad
    Oct 9, 2008
Loading...

Share This Page