Det ser ut til at vi ikke kan endre midi instrument på config page til
chord.

Har subscribed tca@solfege.org til solfege-devel. Skal se hvor mye spam
den får.

jsb-inventions
progression-1
progression-2
progression-atte
progression-x
three-prog-root
two-prog-root

LIST OF THINGS THAT CAN BE WRONG IN CHORD LESSON FILES
* a notename can be invalid in the music:
  InvalidNotenameException chord.py:445
* Added invalid \xx music code:
  ParseError chord.py:445
* Invalid musicformat
  LessonfileException  chord.py:429
* Lessonfile ok at startup, added exctra } after header before starting
  the chord exercise:
  DataparserSyntaxError chord.py:53
* The key variable can be invalid
    InvalidNotenameException chord.py:429
* musicformat=satb in a normal music dictation lesson file
  Not handled yet.

----------------------------------------
gnome.ui.PAD, PAD_SMALL and PAD_BIG has been added. Don't know
what version, but at least is is present in 2.0.3-1 from debian.

How a lesson file can be used by several lesson files:
chord         x
chord-voicing x
id-by-name    x x x   x
dictation       x x x x
harmprog          x x
sing-chord
sing answer

Code that exist to provide backward compatibility
is marked with FIXMECOMPAT.

!Lesson file changes 2.0.5 -> 2.2.0
The variable 'musicformat' in the header block is deprecated. Support
for it will be removed in later release. Music is now represented in
a Music object created by the constructor music. It takes the music
string as the first parameter and an optional second parameter
defaulting to normal that say the type of the music.

Solfege 2.0.5                       Solfege 2.2.0
header { musicformat=chord}         header { }
question {                          question {
  music = "c e g"                     music = music("c e g", chord)
}                                   }

Menu creation is messy. And the menu order is dependent on the order
the modules are imported. 

Maybe, only maybe, should we add a exercise_pretty_name to the
dict we have for each exercise. Also remember that there may
be several dicts with the same exercise_name since we have
many exercises like Scales that use id-by-name. For now, we 
use the menu_path variable, and strips unnecessary info.

Proper names for __exdata__ and __exercise_data__

In src/rhythm.py we have _("Rh_ythm") and _("_Rhythm"). Problematic??

Create install druid that ask you for the command line of a working
midi player program. And then ask you the other sound setup questions
from File->Preferences->Sound setup
----------------------------------------------------

Should exercise names be the same as the module names?

Error handling:
        Errors in lesson files should be handled better. For example if
        musicformat=satb in harmonic-progression-dictation.

        Nicer error msg if an url is faulty: "solfege:id-by-name"

        If I spell 'inversion' wrong in a chord lesson file, when there is no
        error message, but the chord is assumed to be in root position.

Release HOWTO:
        Announce to info-gnu@gnu.org?
        Freshmeat.net
        www.gnomefiles.org
        Update README-(un)stable and INSTALL-(un)stable on SolfegeWiki

2.1.2 Tasks
	lesson-files/chord-all-inv: make good inversions of the last chords.
	
	Fix _i in lessonfiles, see lessonfile.py:90
	
	How should id-by-name statistics be handled. Should users delete
	the files themselved if necessary?

	Localization of chord names.

	Make header.questions_selectable work in harmonic-progression-dictation,
	and possibly other exercises.

2.2.0 TODO
	Improved statistics viewer.

Solfege 2.2 (or 2.4):
	Remove support for include(filename), require include("filename")
	
	Other clefs than C and F for sing-interval.

	Make NotenameSpinButton usable with keyboard only.


TODO and stuff-to-remember file
===============================

Single qouted strings with line breaks works in lesson files, even
if the documentation says it should not.

Does all exercises that should it, use the tempo we set in the
preferences window?

Minor source code cleanup:
        inputwidgets.py could need some cleanup.

	define ERR_PICKY and friends some common place?
	
	selectlessonfilewidget.py: m_ui is inconsistent with g_win
	
	make pydoc and pychecker work on my modules. Test modules with
	pychecker.
	
	MusicDisplayer.show should not require us to specify fontsize.

	Can creation of SelectLessonfileWidget be done in a common function
	used by many classes?

	Finn ut om det er greit å definere SOLVED, UNSOLVED, TOPTONE,
	INVERSTION etc på module level for øvelsene. F. eks for chord.

Build system
	The configure check for gtkhtml only checks for the library, not the
	bindings. We cannot import test it, because this fail without X.
	Maybe just check for the file if the rest of pygnome is present?

Bugs, not release critical.
	Bugs in progression-atte?

Packaging
	The .rpm package leave many empty directories when upgrading the
	package.
	
	random_transpose = key, -2, 2 give is not correct for for example
	the chordvoicing exercise, if the chords entered are not c major or
	a minor. This is documented in lessonfile.xml

pygnome API questions
	Figure out how to use gtkhtml2.jump_to_anchor.

	gnome.ui.PropertyBox is deprecated in GNOME2. What to do?

Exercise TODO
	chords
		On config page, when the focus is on "Change midi instrument for
		this exercise" check button, and we press down, the focus goes
		to the last of three instrument select widgets, not the first.

		i chordvoicing og chord Teacher er new_question helt lik. Den er
		forskjellig i sing-chord, men bør nok bli helt lik. Lag felles
		funksjon?

	Sing-interval
		Make it configurable how many accidentals we want.

	dictation
		Må ikke vise navnet på spørsmålet for enkelte av leksjonsfilene,
		for eksempel three-prog-root. Man kan si at dette ikke er en
		bug, at man ikke må oppgi 'name' til spørsmål til diktat, der
		hvor navnet vil gjøre oppgaven enklere.

	Id-tone
		the config of the exercise is at best confusing.

	compare-intervals
		skal vi bruke .push og .pop istedet for .flash, slik at vi
		skjønner hva som har skjedd, hvis vi ikke får det med oss med en
		gang?

	rhythm
		Ubekreftet: En god del med sensitivity og hva som står i
		flashbar er galt.

	identifybpm
		complete the level-selection code
	harmonic-progression-dictation
		Should we set a limit on how many accidentals solfege is allowed
		to create when doing random transpose?

Programming
	Teacher.new_question should create a new question, but not play it.
	
	Når selectlessonfilewidget velger en lessonfile som ikke lar seg
	parse, så skal vi prøve å sette m_P til None.

	The user should not be able to 'give up' until he has at least tried
	to answer.

Win32 port
	compile with cygwin using -mno-cygwin flag to gcc to compile without
	cygwin.dll.

Misc TODO, checkout etc.
	mpd
		Better error messages:
			[g'8 g],
			
			\stemdown instead of \stemDown should say 'unknown
			keyword' or something instead of Parse error:

		The mpd displayer will be a little confused and generate bad
		looking flags for 1/8-notes if the Question.m_clue_end
		variable points to a timepos in the middle of a beam.

		Better TieEngraver. This will require some reorganisation,
		where we have one engraver that takes care of all ties
		between two chords.

		Get real number-pixmaps from Lilypond. The numbers I use for
		time signatures now are handcrafted.

		"|." bar, maybe also "||"

	lessonfiles
		At least for id-by-name: the file should be able to refer to
		midifiles to be played instead of music entered in the actual
		file. This would be nice if I ever connect to an external midi
		synth to create questions.

	other stuff
		let harmonic|melodic intervall ask the inputwidget how big
		intervalls it can handle. Only button-input is limited to a
		decim. But this will require a change to the config page where
		we select what intervalls to practise.

		some classes, like MultipleIntervallConfigWidget is *very* ugly.

		Check error code when trying to use an external midi playing program.

		The LessonfileManager parses all lesson files at startup. This
		is no real problem now, but with increasing number of lesson
		files, this has to be fixed. (With version 1.2.0, program
		startup takes 3 seconds, parsing takes 0.22)

	Kan jeg bruke vertikal label i statisticsviewer med gtk+ 2.0?

	Lage nye xpm til rhythm exercise, i  for eks 96x96 og bruk scale
	image, slik av vi får mere runde kanter. Kan dette også gjøres for
	feta-fontene, evt for hele music displayer? Jeg har begynt med
	xpm/rhythm-c4.xpm og rhythm-c8c8.xpm

	De nederste 4 tabeller i statistikken er vanskelige. Gjør bedre og
	legg til dokumentasjon.

	I need someone to fix (or give me a hint on how to fix) the sound
	card code so the percussion channel works also for /dev/sequencer
	for other sound cards than Soundblaster AWE. /dev/music (aka
	/dev/sequencer2) works fine but /dev/sequencer is more tricky. SB
	AWE works by by calling AWE_SET_CHANNEL_MODE(devnum,
	AWE_PLAY_MULTI), but I don't know to do this for other soundcards,
	and don't have the hardware to experiment.

	GNOME session management

	I rhythm.py må vi legge til config "disable unused buttons" eller
	noe liknende som harmonic interval har. Deretter se på focus.

Decide on this:
	Should 'correct/wrong answer' feedback be pushed or flashed?

	Should we document that question numbering (and possibly line numbering) in error messages are zero-based?

Stuff to remember:
	Lambda functions can be evil. If you have several lambda functions
	as callback functions to events, for example when defining a menu,
	then each menu item must be created with its own variable name, or
	else hell will break loose. Also we get warnings from compileall on
	many lambdas.

	When making polygons on GnomeCanvas, the points has to be entered
	anticlockwise.

	de_DE is language_COUNTRY

Thoughts about new exercises:
	lag test ala www.earpower.com simple test, avgjør om andre tone er
	høyere eller lavere. 50-10-5-3-1 hz forskjell. Hvor bra er PC til å
	lage så små forskjeller mellom tonene?

	Train perception of modulations: Solfege play a simple progression
	with random modulations to new keys. The user sing the same pattern
	in the different keys. tca: this is similar to one exercise Marit
	uses when warming up her choir.

	Solfege display some notes and play the music. The user should tell
	where solfege don't play the same as the notes.

	solfege play a chord, and you should sing the middle/upper/lower tone.

	Make it possible for the user to take a test, for example in
	harmonic intervals, and see how well he knows them. And then save
	the result so we can track progression over time.




=======================================================================
From giovanni@simplesky.com Wed Dec 5 18:06:23 2001

Tom Cato Amundsen (05/12/01, 17:41) "Re: :-) s o l f e g e":

TCA| Your idea probably makes sense, but I don't understand what you
TCA| describe. Maybe I'm slow...
TCA| 
TCA| Can you try again, and be more detailed in how the lesson files should
TCA| look, what the program should play/display and what and how the user
TCA| should answer.
TCA| 

Sure :-)

goal: ear-train every possible chord voicing for a given chord

problem: there are too many combinations, and writing a lesson files
would take way too long, because you have write down explicitely
every voicing

solution: give solfege the "chord type" and let it "create" the 
different voicing (or let it randomly play a different voicing every time)

solution implementation:
a) how to specify the chord type:
  the chord type is specified by the voices offeset from the root note (
all in one octave, offset in whole tones), e.g.
a min7 b5 chord has : tonic, minor third, flat fifth, and seventh (minor)
since the tonic is always there it's useless to write "0" (difference 
tonic-tonic) so we have
minor third -> 3
flat fifth -> 6
seventh -> 10

so min7 b5 <=> [3,6,10] 
(oh, well, I'm an engeneering, maybe [Eb, Gb, Bb] would make more sense)

7b5b9 (yep, jazzy chords :-)
[1, 4, 6, 10]

these "arrays" would go in the lesson file, together with the chord name

b) how to play a random voicing:
just randomly add a couple of octaves (+ and -) to the voices
for v in voices:
   voices_out.append(v+rand*12)

where -3<rand<3
 

INTERFACE:
the user would have to choose between the chord names (min7b5, 7b5b9),
and then specify the voicings. Let's say the chord was a min7b5, the 
voices
are (tonic, minor 3rd, flat 5th, 7th), so 4 combos (<select><option> 
stuff, oh, wait this is html :-) with the 4 voices each would do it.

of course the possible voicing must be shown *after* the user has guessed
the chord type (oterwise they would spoil the solution).


is this better?

keep in mind that
1) I'm an engeneer
2) I play jazz
3) I play guitar

so this stuff is probably just a bunh of useless crap :-)


But, if can put it in solfege, your karma would greatly improve, 
and in your next life (if any) you wouldn't have to do heartly things like
coding computer software :-)


CIAOOOOOO

Giovanni

===================================================================
vim: textwidth=72: foldmethod=indent:
