This software is totally under development.
The main purpose is to enter 16th century spanish organ tablature and translate it into modern formats. Currently supports layouting, live editing and playback of tablature data and (halfway) export to MusicXML.
Framework: Qt5, License: GPL
Below is some brainstorming, vocabulary and class hierarchy.
Notes
/ \
/ \
|123456|
|
Note
"Bar"
/ \ Note
/ \ | column
|1 2 |5 6 7 8| row \ . .| ...|
|2 |7'' | row > line of score . | .. |
| 4 |p 3 | row / | . |
\ /
\--------------NoteStream----------------/
*top annotation
|1 |p 6 7 8|
| 3 | 8 9|
*bot. annotation
page
|------------|
| |NN|N | | | row/staff/voice \
| |N | | N| | row/staff/voice / line
| |
| |N |N | N| |
| |NN|N |N | |
|------------|
|| || ||
column
- 1,, - 7'', p, space, ..., annotation, newline, newpage, ...
- length (number Notes)
- data[length] of Note
- voices
- data[voice][rows] of Bar
- stream
- bar
- row
- column
- Score::Index from, to
- create NoteStream from selection
- clipboard
- data[] of NoteStream
- Score::Index
- undo/redo
- ScoreEditorCursor
- add/del/change
- setScore(Score)
- insertNote(Index, n)
- insertBars(Index, QList rows)
- changeNote(Index, n)
- changeBar(Index, b)
- deleteNote(Index)
- deleteBar(Index)
- deleteStream(Index)
- Qt signals
- scoreChanged()
- noteValuesChanged(QList)
- barsChanged(QList)
- streamChanged(Index)
- notesAboutToBeDeleted(QList)
- notesDeleted(QList)
- barsAboutToBeDeleted(QList)
- barsDeleted(QList)
- streamsAboutToBeDeleted(QList)
- alignment
- font
- bounding-box
- margin
- Score::Index, ScoreDocument::Index
- note, line, TextItem, ...
- bounding box
- draw()
- TextItem[] (title, header, footer, pagenum, ...)
- PageAnnotation[] (1st, odd, even, last, ...)
- width/height (mm)
- preset
- PageSize
- page margins[odd/even]
- portrait/landscape
- PageAnnotationTemplate
- row spacing
- line spacing
- note spacing
- min/max Bar width
- per-page (or finer) instance of T
- Score
- ScoreEditor
- PageLayout (PerPage)
- ScoreLayout (PerPage)
- PageAnnotation (PerPage)
- createScoreItems(Score)
- updateScoreItems( from_editor_signals )
- ScoreItemForPagePos()
- ScoreItemForScoreIndex()
- ScoreDocument + editor
- renderPage(QPainter*, pageIndex)
- editing