The review drew each line's notes as thin bars in a 20px strip, with no
pitch axis or beat grid, so it was hard to tell where a note sat. Add a
sheet that shows one line at a time the way an UltraStar editor does: a
row per semitone, shaded like piano keys and named in a gutter, the
chart's own beat grid with bars every 4 and 16 beats, notes as blocks
styled by kind (golden, freestyle, rap) with low-confidence ones outlined,
neighbouring lines faded in for context, syllables and aligned words
beneath, and a playhead that follows the transport, paging with it.
The detected pitch curve is drawn over the notes, served by a new GET
/api/jobs/{id}/pitch in note semitones, so a note off the sung pitch
stands out. The sheet is its own ES module; its geometry is unit-tested
with node --test, run from pytest and skipped where Node is absent.
16 lines
496 B
Python
16 lines
496 B
Python
import shutil
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
|
|
def test_static_js_unit_tests():
|
|
"""The page's own logic, run under Node's test runner."""
|
|
node = shutil.which("node")
|
|
if node is None:
|
|
pytest.skip("node is not installed")
|
|
tests = sorted(str(p) for p in (Path(__file__).parent / "js").glob("*.test.mjs"))
|
|
proc = subprocess.run([node, "--test", *tests], capture_output=True, text=True)
|
|
assert proc.returncode == 0, proc.stdout + proc.stderr
|