Hi developers, I want to run my project plan for by you all for updating the structure of EventChord to include semantic information. I believe the better way to do it now (rather than adding a new ‘semantics entry to EventChord) is to add a new property, chord-degree, to the NoteEvents, which can have a value corresponding to the note’s relation to the root, and therefore to the chord itself. This way we can keep the semantic information attached to the note information. This is still a rough idea in progress, of course. Here is my plan with milestones:
- Tuesday May 30 - Friday June 9: Determine the semantics of chords to be captured in the data structure and design the data structure itself. (Do research on more complex chord structures that I am not totally familiar with): - Provide a list of specific semantics to be implemented discussed on the -user list and approved by some of the developers. - Discuss the possible representations on -devel and provide an implementation plan. - Friday June 9 - Friday June 23 Implement the data structure as part of EventChord. - Provide unit test files that employ the use of \displayMusic, which provides console output to demonstrate that each semantic aspect is being captured. The specific output depends on the representation which is yet to be decided. Here is an example of what output might look like if we implement semantics using a new “chord-degree” property of NoteEvents: For a C minor 7 chord: (make-music ‘EventChord ‘elements (list (make-music ‘NoteEvent ‘pitch (ly:make-pitch 0 0 0) ‘duration (ly:make-duration 0 0 1) ‘chord-degree ‘root) (make-music ‘NoteEvent ‘pitch (ly:make-pitch 0 2 -1/2) ‘duration (ly:make-duration 0 0 1) ‘chord-degree ‘third-minor) (make-music ‘NoteEvent ‘pitch (ly:make-pitch 0 4 0) ‘duration (ly:make-duration 0 0 1) ‘chord-degree ‘fifth-perfect) (make-music ‘NoteEvent ‘pitch (ly:make-pitch 0 6 -1/2) ‘duration (ly:make-duration 0 0 1) ‘chord-degree ‘seventh-minor))) - Friday June 23 - Friday July 7 If necessary, edit the EventChord iterator to iterate over the new data structure, creating stream events which will contain both semantic and note information. - Provide a demonstration that shows that the stream events created by the iterator are accepted by the Chord_name_engraver. - Friday July 7 - Friday July 21 Create a new chord name engraver, New_chord_name_engraver, which creates grobs based on semantic information. - Provide unit test files that produce chord name output (on the typeset pdf file) which cover every semantic aspect. - Friday July 21 - Friday August 4 Modify chordmode to work with the new internal representation - Provide unit test files that use \displayMusic on chords entered using chordmode, demonstrating functionality for each semantic aspect: \displayMusic \newchordmode {c:m7} should produce the same structure from output of period 2. - Friday August 4 - Monday August 21 Create a method allowing the user to easily control the chord name display. Work out the details of the specifics after we have a better sense of the chord data structure we're going with. - Provide test files that use this mode to produce chord name output based on the new mode: Lilypond files like this: \newchordmode { g1:maj9 g1:6.9 % some mode allowing user to customize chord name output g1:maj9 g1:6.9 } Where we enter the chords without the new method, then with the new method, and produce output like this: - Monday August 21 - Tuesday August 29 Final Evaluations. - If I end up being ahead of schedule, I will: Create a way to interpret semantics from a list of pitches. This should be based on the way the ignatzek chord namer decides chord names. Let me know what you think about this plan, and voice any concerns you have! I’d love to hear feedback. Thanks, Charles _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel