-
Notifications
You must be signed in to change notification settings - Fork 4
/
plans
129 lines (76 loc) · 3.66 KB
/
plans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Test verovio for interactive applications (rerendering times seem slow?)
Format for storing the induced graphs (MEI)
The basic idea is to have a facility to load a MEI/MXL file, and to render
it to a webpage.
The basic interaction the user does with the score is to select several
notes and reduce them to a subset. This also adds a grouping to these
notes, which in a schenkerian graph likely would be illustrated using a
slur or tie (possibly with P/N/IN notations etc.)
The reduced notes are greyed out as a first step.
After a suitable set of reductions has been made to the score, the user can
click a button to rerender the score with the reduced notes removed, and
can then add a new set of reductions, and repeat until some sort of Urlinie
is achieved.
In the code, this is accomplished by, storing the following information:
The original score (and its rendering).
The reduction sets (essentially directed hyperedges).
The intermediate scores (and their renderings).
And, of course a bunch of other things.
Steps:
1. Load MEI/XML
1.5. Get MEI/XML back
2. Mark notes
3. Mark notes and join them with lines
4. Mark notes and choose some to be more salient
5. Save edge information in XML structure
6. Get saved edge information back from downloaded data
7. Hide some notes and re-render
8. Build dependency DAG of edge relations
9. Automatically choose edges to hide
10. Slide through more or less reduced version of the score
2020-12-18 - Refactoring for multiple views
The idea is to (eventually) have multiple active renderings of different
stages of reduction ("layers"), that the user can all interact with.
Problem: IDs are supposed to be unique in an XHTML file.
Solution: Namespace the SVG id's.
There are a number of further subtleties that need solving. In particular
how different XML documents and XML document sections relate to each other.
For the first few steps below, there will be a number of SVG parts of the
XHTML document that all relate to a single MEI document, and therein a
single score and a single graph. Later versions will likely have also
several MEI elements each containing a new layer the analysis.
We need to consider what operations do at various levels.
Is there only one graph? (Yes)
Does adding a relation in one view/layer add it to the others? (Yes)
Can reductions be done in any layer or just the latest? (Only the latest for now)
Can notes be added in any layer or just the latest? (Only the latest for now)
OK, so this is the plan:
1. Each "view" has an id_prefix, an SVG elem, it's own view of the MEI.
2. a drawing context which is the above
3. draw_* takes an element from the MEI and and a drawing context and adds
the requisite element to the SVG if all notes are present, visible if all
notes are visible
4. shades/non_note_ remains global
Steps:
1. Rerender statically, leave the old.
2. Go back to the initial view of each layer after the reduction has been
rendered.
3. Start working on the XML relations and multiple layers.
* refactor draw_* to read stuff from a <graph> node, and feed it a
"drawing context" containing svg element, potential prefix, etc.
UI ideas:
Highlight (copies of) entities in all views on hover.
Highlight the currently active view(s)
Separate options for "layers" and "views". Add ability to expand/collapse
views from layers. Layers exist in the MEI, views do not.
Code ideas:
Separate global actions from local actions.
Global actions are for example:
* Adding/deleting relations
* Adding views
Local/view actions are for example:
* Reductions
* Merging staves?
(future)Actions local to a layer are for example:
* Adding implied tones
* Shifting notes and tones