Skip to content

Latest commit

 

History

History
84 lines (62 loc) · 4.21 KB

File metadata and controls

84 lines (62 loc) · 4.21 KB

Two-Week Sprint Plan — AutoTab (Haslemere, UK) — Start: 2025-08-13

Sprint Goal: Deliver an end‑to‑end MVP that converts uploaded audio to playable guitar tablature in the browser, with automated tests and a short eval script. Ready for dissertation demo & write‑up.

Day-by-day (⌛ 10 working days)

Day 1 (Wed 13 Aug): Discovery & Setup

  • Read code, align API contract (/upload-audio), verify deps, create .env for client.
  • Define acceptance criteria per story, triage gaps (CREPE, Music21, VexFlow usage).
  • Definition of Done (DoD) created for sprint.

Day 2 (Thu 14 Aug): Backend upload + pipeline

  • Implement FastAPI /upload-audio route (save → preprocess → detect_pitch → map_notes_to_tab).
  • Add CORS, error handling, file size/type checks.
  • Update requirements.md (crepe, librosa, music21, numpy, soundfile, scipy).
  • tests/test_upload.py green on happy path (local WAV).

Day 3 (Fri 15 Aug): Pitch detection quality

  • Implement detect_pitch (CREPE) with confidence thresholding, return frame times.
  • Add unit test for pitch util (smoke + shape).

Day 4 (Mon 18 Aug): Note→Tab mapping

  • Implement map_notes_to_tab: standard tuning EADGBE, pick-lowsest‑fret heuristic, crude durations.
  • Add test for mapping on a short synthetic scale (E2…E4).

Day 5 (Tue 19 Aug): Frontend uploader

  • Implement TabUploader.jsx: file input, upload progress, status toasts.
  • Render tab with VexFlow TabStave from tab_detailed.
  • ✅ Manual E2E on local dev (WAV).

Day 6 (Wed 20 Aug): UX polish & errors

  • Empty states, big files, timeouts, server-error rendering.
  • .env (VITE_API_URL) and README quickstart.

Day 7 (Thu 21 Aug): Packaging & scripts

  • Add make dev & make test or npm/pip scripts.
  • Pre-commit hooks (Black/ruff/ESLint) optional.

Day 8 (Fri 22 Aug): Evaluation harness

  • CLI: run pipeline on N files and dump CSV with timings + note counts (placeholder for F1 later).
  • Prepare seed audio set (royalty-free).

Day 9 (Mon 25 Aug): Buffer & hardening

  • Bugfixes, boundary cases (mono/stereo/44.1k mp3), memory.
  • Log levels; return richer diagnostics.

Day 10 (Tue 26 Aug): Final QA + handover

  • Verify rubric‑aligned artefact behaviour (demo flow).
  • Freeze versions, tag release, produce “How to run” + “Known limitations”.

Backlog (ranked)

  1. BE‑1 Upload endpoint — As a user I can POST an audio file and get JSON with tab_detailed and a preview VexTab line.
    Acceptance: HTTP 200, keys present; handles .wav/.mp3 under 10MB; errors for bad mime.

  2. BE‑2 Pitch detection — Use CREPE with confidence threshold; return time/frequency/confidence/notes.
    Acceptance: Arrays equal length; notes not empty on pitched audio; timings monotonic.

  3. BE‑3 Note→Tab mapping — Map note names to (string,fret) with EADGBE; include duration and timestamp; format vextab token like "q 5/1".
    Acceptance: For known notes E2/E4 mapping is valid; no fret > 20.

  4. FE‑1 Uploader UI — Drag‑drop or file input, progress 0–100, error states.
    Acceptance: Uploads a demo WAV and shows status.

  5. FE‑2 Tab rendering — Render using VexFlow TabStave from tab_detailed.
    Acceptance: At least 1 measure drawn; no JS errors on empty/malformed notes.

  6. QA‑1 Smoke testspytest passing for upload and pitch utils.
    Acceptance: CI/pass locally.

  7. EV‑1 Eval harness — Script to batch process audio and save CSV with runtime and counts.
    Acceptance: Produces CSV with one row per input.

Risks & Mitigations

  • CREPE performance/compatibility: If install issues, fall back to librosa.pyin as contingency; cache wheel locally.
  • Polyphony accuracy: Keep scope to “single‑guitar dominant” sources; document limitation; expose threshold knob.
  • VexTab vs VexFlow: We render via VexFlow TabNotes directly to avoid VexTab dependency.
  • Large files: Enforce size limits (10–15MB), pre‑trim guidance.

Definition of Done (for Sprint)

  • End‑to‑end demo works locally (Vite + Uvicorn).
  • pytest green for provided tests.
  • README quickstart works on a clean machine.
  • Known‑issues section documents limitations and future work hooks.