Solving
The Solving card turns your parameters into music.
Click Run and watch the chord progression build up on the graph below.
The status line below the chord graph shows progress.
On completion the status line shows one of:
- <em>Done: X/X parts solved.</em>
- <em>Partial: Y/X parts solved. Overconstrained: ... Try again.</em>
- <em>No solution: Model may be overconstrained.</em>
When the solver gives up
Four things to try when the status reads <em>Partial</em> or <em>No solution</em>:
- Widen a voice's pitch range in Step 3 to at least an octave and a half, or move Dissonance closer to 0.5 (neutral).
- Shorten the part in Step 1 or one voice's Duration in Step 3; a 16-bar part with only whole notes forces the solver into a long path.
- In Step 2, pick Start Chord and End Chord closer together in the chosen Style preset, or add bars in Step 1.
- Lower Variety in Step 3; the solver randomises its candidate order, and a different seed may find a satisfiable corner the previous run missed.
The chord progression graph
Each part's chord sequence appears as breadcrumbs above the graph (<em>Part A: I -> vi -> IV -> ...</em>) and the corresponding path is highlighted below. Nodes are coloured by harmonic function (tonic green, subdominant blue, dominant red, etc.); thicker edges mark cheaper, more cadential transitions in the chosen Style preset.
Looking under the hood
The dropdown next to Run picks which
MiniZinc solver runs the model.
<em>Chuffed</em> is the default and fits the typical model sizes here;
<em>Gecode</em> and others are available but rarely change the musical result.
For the curious, three collapsible sections below the graph expose
the inner workings of each pipeline step:
- Generated Model: the actual MiniZinc model fed to the solver
- Raw Solution: the solver's JSON output before MIDI generation
- Solver Statistics: solving time, nodes explored, etc.
A small >_ link in the status panel opens the debug log,
which captures every status message of the current session in case you missed it.
