Assessing my 7th chords with a reaction time test

practice
7th chords
jspsych
assessment
I made a jspsych task to test how fast I can play 7th chords.
Author

Matt Crump

Published

January 19, 2024

Testing myself on 7th chords using a choice-reaction time procedure

This post is about collecting some performance data on my ability to play stuff. I have some longer term plans to improve on these methods for research purposes, but for now, I’m just interested in roughly tracking my own abilities.

In my last post I was about try out some different practice schedules, one of which would require me to randomly pick which keys to practice. That kind of stuff is annoying to do without a computer. Plus, if I’m about to collect a bunch of data in a bunch of conditions, I’d rather not code things and do data entry by hand.

So, I jumped ship and decided to start building little computerized measurement tools.

I put together a really simple choice reaction test using jspsych, the same JavaScript library that I use for online cognition experiments.

To start, I decided to test myself on basic seventh chords in all keys. There are 12 different keys, and for this test, I used ∆7, 7, and -7 chords, for a total of 36 different chords.

The choice reaction time test is very simple. The program takes all of the possible chord names, randomly shuffles them, and then presents each name on the screen one at a time. I put my laptop on top of my piano, waited for the chord name to appear, and then played the chord as fast as I could on the piano. At the same time, I had my left thumb on the spacebar, and I pressed the spacebar roughly at the same time that I played the chord. This allowed me to measure the reaction time for each chord. I also had the program repeat all the chords randomly twice, so that I got two reaction time measures per chord.

I love jspsych. It took like 15 minutes to make this happen (granted, I have a bunch of prior experience using that library, and I was doing something very simple). Still, I already made the program and ran the test, and collected the data as a JSON variable. Woo hoo!

And, of course, this is really messy data. Ideally, I would have the reaction times for each note, say using MIDI or something. But, that’s for later.

I’d really like to take a look at my own performance data. I know all of these chords pretty well, but I have never closely compared my ability to produce them on demand. I expect I’ll be pretty good in C, D, F, G, A, and worse in the other keys. But, I don’t really know what the pattern looks like.

So, let’s get to the data analysis.

I loaded in the data, computed the average chord-reaction time for each chord, and put them all in the following table and graph.

Neat. Close to what I expected in terms of which chords I think I’m better at. All of em could do with some extra practice. I suppose I should do more practice on the slow ones, because the fast ones don’t really need it.


I was too hasty with my jspsych programming and totally forgot to add a few things that would make data analysis much easier. I’d like to be able to easily replot the data in a few different ways. One way is to group by maj7, min7, and dominant 7th. Another is to arrange the keys in ascending/descending order (rather than alphabetically), or in the order of the circle of fifths. I could add the necessary factor levels to the data file by hand, but I think I’ll add this to the jspsych program so that the data file includes this by default.

So, off to fixing the program, and then I’ll collect some more data and try a few different plots.

And, I’m back. I ran through the practice one more time. Now my data file should be easier to plot in different ways.

Here is the mean chord reaction time for each key, grouped by 7th chords.

I wanted to order the keys in terms of the circle of fifths, but there was another bug in the code, now fixed. I’ll need another round of data-collection to get that graph.

In terms of piano practice, I should get a bunch of these chord reaction times lower. Especially Gb, Ab, Bb, Eb, and Db, and B. I thought Bb would be better, but nope.

The program is not currently keeping track of practice attempts per chord, and I should add that.


After some javascript nonsense, the program now runs in a loop. Each loop goes through a set of practice material and records the practice attempt number for each chord.

My loop of practice material is all the basic 7th chords. So, I’m about to practice them for a while and then plot the data.

One detail is whether to do away with the delay between trials. Right now there is a 2 second delay before the next chord. That’s nice and everything, but I feel like chomping through this, so I’ll get rid of that delay.


I practiced all the chords in a random order for about 10 times each. This is a plot of my chord reaction times as a function of practice for all chords. A bit messy to look at.

If I average over keys, did I get any faster?

There’s a downward trend I guess.

Averaging over chords and showing the individual keys:

And, one last summary graph. Let’s average over repetitions, and arrange by the circle of fifths.

I guess I should practice Gb and Db and Bb and flatten out this performance distribution.


Alright, that’s basically all I wanted to accomplish today. Now I have a clunky little tool to relatively quickly assess where I am at on different musical elements. Time to go do something else.


Practicing “Eb”,“Db”,“Gb”,“Ab”,“B” this morning, and plotting the reactions from yesterday (1), and today (2).

Averaging over individual chords, and looking at mean chord reaction time yesterday and today on these chords.

Made a change to the program so that when I load it up I can select which keys to practice. I’m assuming that if I select only Gb and Ab (the slowest), I would be able to get them both under 2 seconds. I wonder if I would then maintain that level of performance when increasing the number of other chords in the test. Need to make breakfast first.

I put Gb and Ab and practiced those 7th chords for a while.

Nice, with 5 minutes or so of banging around those chords, I could get the times way down in the context of this much simpler test (fewer other chords to play, less hand movement between chords etc).

I’m curious whether this improvement for Gb and Ab would persist into a test using all of the keys.

When I added all of the keys back the RTs for Gb and Ab went up a little bit from the last time, but they are over all way down. Almost all of them are under 1500 ms now.

This practice isn’t very musical, but it seems to work out my ability to identify and then play chords on demand. Perhaps speeding up on this test would improve my ability to sight read chord changes.