--- /dev/null
+I've got a travel-size violin (by [Bill Whipple]) that I mess around
+with. I like a lot of traditional and celtic music, and I wanted
+something that would provide both a visual and aural rendition of a
+song to help me learn it.
+
+Looking around, I found [ABC][] (see John Chamber's [page][JC] and
+[tutorial][]), which is a simple, ASCII notation for sheet music.
+There are lots of [software tools][] for processing ABC; my favorite
+is [abcMIDI][] (which I've packaged in my [[Gentoo overlay]] and is
+also packaged in the [Sunrise overlay][]). `abcMIDI` provides several
+useful programs:
+
+* `abc2midi`: ABC to MIDI conversion, to listen to your music.
+* `yaps`: ABC to PostScript conversion, to look at your music.
+* `midi2abc`: MIDI to ABC conversion, when you can't find ABC source.
+
+My favorite ABC tune repository is [The Session][], but there are also
+search tools and repositories listed on the [ABC homepage][ABC] and
+[JC's page][JC].
+
+To make playing ABC files as easy as possible, I've written a little
+script, [[abcplay.sh]], which uses `abc2midi` to generate a MIDI file
+for each tune and then plays them with [timidity++][].
+
+[Bill Whipple]: http://www.wiplstix.com/
+[ABC]: http://abcnotation.com/
+[JC]: http://ecf-guest.mit.edu/~jc/music/abc/
+[tutorial]: http://ecf-guest.mit.edu/~jc/music/abc/doc/ABCtutorial.html
+[software tools]: http://abcnotation.com/software
+[abcMIDI]: http://abc.sourceforge.net/abcMIDI/
+[Sunrise overlay]: http://overlays.gentoo.org/proj/sunrise
+[The Session]: http://www.thesession.org/
+[timidity++]: http://timidity.sourceforge.net/
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2009-2010 W. Trevor King <wking@drexel.edu>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+MIDI_FILE=`mktemp --tmpdir abcmidi-XXXXXX`
+
+USER_INTERRUPT=13
+LAST_SIGINT=0
+# Clean up and exit on SIGTERM (default signal from kill command)
+trap 'rm -f "$MIDI_FILE"; exit $USER_INTERRUPT' TERM HUP
+# Clean up and continue to next song on SIGINT (^C)
+# If two SIGINTS come in the same second, exit.
+trap 'rm -f "$MIDI_FILE"; TIME=`date +%s`;
+ let "DELAY = TIME - LAST_SIGINT";
+ if [ "$DELAY" -eq 0 ] || [ "$DELAY" -eq 1 ]; then exit $USER_INTERRUPT; fi
+ LAST_SIGINT="$TIME";' INT
+
+for ABC_FILE in $*; do
+ grep '^X:' "$ABC_FILE" | cut -d: -f2 | while read REFNUM
+ do
+ abc2midi "$ABC_FILE" "$REFNUM" -o "$MIDI_FILE"
+ timidity "$MIDI_FILE"
+ rm -f "$MIDI_FILE"
+ done
+done