I'm looking for a way to represent chords in a MIDI file.

Note that I'm not looking to represent chord voicings. That can be trivially done with multiple note-on messages. But if I do that, then I have to do some sort of note-on to chord analysis every time I read the MIDI file back in, and that's a major nuisance especially since I already know the chord structures when I write the file.

Rather, I'm looking for something more akin to guitar tablature or fake books. That is, I want to record "C" or "Cm" or "I" or “iii7" at a particular point in time.

So my questions...

Is there a standard way to do this? (I'm not finding one, but I don't know the current spec thoroughly.)

Is there a non-standard way of doing this?

I'm considering using the "tag" facility of the lyric/display meta event. It appears as though I can invent {@chord=Cm} and that should be transparent to any reader, past, present, or future, who doesn't understand this usage. Am I reading the standard right? Would this be a reasonable, essentially private, non-standard extension?

2 Answers 2


yeah, you're on the right track. that should way should do fine.

all you need is the time, root, chord quality. (maybe /bass)

although midi is a standard format, it's a really loose standard.

there's no standard way of storing fingering, for example.

so pick the best text event you can (which ya did).

other midi sequencers don't store chords exactly the same way, either. which, i mean, really is pretty dumb. you'ld think by now they could agree on a standard. midi has been around since the 80s shoish.


The text event in a midi file does not contain absolute position of the text. It just contains text. Squeezing them between note events could work or you could also mark the position of the start of the chord with the text event each time you have a chord change, but that is going well out of the way for this format. Midi strong suit is that it's lightweight and compact. The basic information about the instrument used, each note, the duration, and velocity are all at the core of midi. Any extra (meta) info is outside of the scope of what midi is for. Even key and time signature which are important for notation doesn't have an affect on the midi events themselves. Notation programs typically use them to display the midi events in a way that makes sense to musicians.

There are other file formats out there that may work better for you depending on what your goal is. If you just want to notate this then there are plenty of notation softwares out there that can do chord symbols fine in time like Finale, Sibelius, Musescore, and Lilypond. If you really just want a file format to hold this information for a project, MusicXML has a much better representation for chord symbols.

  • 3
    not sure what you mean by absolute position, but it has time for the event, and that's all ya need for a chord event, really Commented Aug 23, 2016 at 4:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.