Whack them (musical) notes!
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
SIL Open Font License.CrimsonText-Roman.ttf.txt



A game for learning sheet music notation.

Connect your General Midi-enabled musical instrument of choice to your computer. Start Notewhacker and try to hit your instrument’s keys matching the notes scrolling on a staff on your screen.

2017-12-30, version 0.0.3 (See CHANGELOG.org)

Installing and running

Download the software (e.g. clone from git). Modify midi.lisp file so that *midi-device-pathname* points to the OSS-compatible device file which corresponds your General Midi instrument.

Easiest way to get the software running is to use Quicklisp:

  • Install Quicklisp
  • Copy or move the notewhacker directory into quicklisp’s local-projects directory.
  • Run in Lisp repl (ql:quickload "notewhacker"). This will automatically download and compile the dependencies and compile Notewhacker.
  • Start the program with (notewhacker:main).

System requirements

  • Reasonably recent Linux operating system (might work on other Unixes too)
  • OpenGL 2.0 compatible graphics card and drivers
    • Related libraries for Linux
  • Clozure Common Lisp or SBCL implementation of Common Lisp
  • General Midi compatible musical instrument or somesuch

Changing the visible staffs and midi channels

  • To e.g. remove the staff with the f-clef (𝄢) modify file notewhacker.lisp function gen-game-loop by removing the s-expression starting (f-staff (make-instance....
  • By default g-clef (𝄞) only matches events in midi channel 0 and f-clef (𝄢) events in channel 1. To change both recognize all channels, change in the aforementioned file and function the lines with :midi-channel 0 and :midi-channel 1 both to :midi-channel nil.

Keyboard control (mostly for testing or debugging)

  • On (Finnish/Swedish) QWERTY keyboard key C corresponds to C4 note, F to C4 sharp etc. When hit while holding left shift they generate midi channel 1 events, channel 0 otherwise. For testing purposes; game can’t be played reasonably using keyboard.


Short demo of version 0.0.1 at YouTube.


This project includes some parts of code derived from work of 3b (see comments in files notewhacker.lisp function main, and graphics.lisp function with-vecto-canvas-as-texture). The derived code is published here with the original author’s consent.

The font for musical notation (feta.ttf) is copied from project Denemo. The font was originally derived from Lilypond project. See file LICENSE.feta.ttf.txt for more information.

The text font (CrimsonText_Roman.ttf) was created by Sebastian Kosch and licensed with SIL Open Font License and redistributed with Notewhacker in its original version. It was downloaded from Font Squirrel. See file SIL Open Font License.CrimsonText-Roman.ttf.txt for more information.

Finally, this software exists thanks to Lisp In Summer Projects contest.

To do

  • Resizeable window.
  • More intelligence to target chord creation.
    • User configurable note range.
    • Reasonable chords. Now they are totally random within a certain predetermined range.
    • Learning: generate target notes which player finds difficult more often.
  • Key signature changes during game.
  • Accordion-mode (Handling Stradella Bass System).
  • Reading target notes from a midi file to enable practising a piece.

Known bugs

On some graphics cards all of the textures have a thin transparent line going across them. This happens e.g. on Nvidia Quadro NVS 4200M. The software was developed using Intel HD4000 graphics card, and VirtualBox with Windows host OS and Intel HD 530 graphics card, which don’t expose this bug.


Janne Nykopp <newcup@iki.fi>


GNU General Public License Version 3, 29 June 2007