Thursday 10 March 2011

Customizing GNU Solfege

As part of my work on Music Harmony (and ear-training), I wanted to configure GNU Solfege with my own exercises. I didn't realize it would be so easy. Following the instructions online, I just had to do the following things to get my first customized exercise:
  • Figure out where the pre-loaded lesson files are and where the customized lesson files should go. 
Help:File Locations tells me that in my system the pre-loaded ones are in /usr/share/solfege/lesson-files and the customized ones should go inside lessonfiles in my home directory.
  • Copy one of the pre-loaded lesson files (similar to the exercise I want to obtain) into the customized directory and edit. 
Make sure to delete the lesson_id field, since these have to be unique (later on GNU Solfege will create one automatically and will add it to the file). In my case I wanted to get an exercise to discriminate between major, minor, augmented and diminished chords, so I start with the chord-min-major lesson file:


# Solfege - ear training for GNOME
# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Tom Cato Amundsen
# License is GPL, see file COPYING

header {
lesson_id = "38bfaa64-c182-4687-aa41-ed6352017342"
help = "idbyname-chords"
module = idbyname
have_music_displayer = yes
fillnum = 2
random_transpose = accidentals, -5, 5
title = _("Minor and major chords")
lesson_heading = _("Identify the chord")
test = "6x"
test_requirement = "90%"
}

# We do in-file translation to norwegian in this file, just
# to show that it is possible.
question { name=_("major") name[no]="dur" chord("c' e' g'") }
question { name=_("minor") name[no]="moll" chord("c' es' g'") }


and change it to:

header {
help = "idbyname-chords"
module = idbyname
have_music_displayer = yes
fillnum = 2
random_transpose = accidentals, -5, 5

title = _("Minor, major, augmented and diminished chords")
lesson_heading = _("Identify the chord")
test = "6x"
test_requirement = "90%"
}

# We do in-file translation to norwegian in this file, just
# to show that it is possible.
question { name=_("major") chord("c' e' g'") }
question { name=_("minor") chord("c' es' g'") }
question { name=_("augmented") chord("c' e' gis'") }
question { name=_("diminished") chord("c' es' ges'") }


  • Add it to lesson tree in GNU Solfege. I create my own learning tree via File:Edit Learning Tree, then New. First add a toplevel menu, then a submenu, and lastly Add lesson, (the first time I have to click on "Search for new lesson files" so that the stuff I just put in my own directory shows up), and look for the lesson to include. Just like that, I have a customized lesson:


No comments: