This is the repository of String Tools site. It is built with Vue 3.
This tool calculates multiple-stop fingerings for the provided notes.

Features:
- Four instruments: violin, viola, cello and double 5-string double bass.
- Note input by text (e.g.
D5 G5) or MIDI input. The octave can be omitted (e.g.CorC#); all valid octave combinations within the instrument's range are shown. - Can select how far down the fingerboard can the player reach.
- Optionally, calculates fingerings with gaps (skipped strings in the middle) which are useful for pizzicato.
- Optionally, can include fingerings with finger stretches that are too wide.
- Optionally, it includes fingerings with natural harmonics.
- The instrument is shown with a superimposed diagram with the selected fingerings.
- Can select/deselect fingerings for display in the diagram.
- Each found fingering is displayed in a card with a detailed description.
- The notes are displayed in score view.
VSCode + Volar (and disable Vetur).
TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need Volar to make the TypeScript language service aware of .vue types.
From the repository root (npm workspaces: packages/* and website):
npm installThis links the local string-fingerings package into the website and runs its prepare script so dist/ exists for imports.
npm run web(or cd website && npm run dev)
npm run buildRun Unit Tests with Vitest
npm run test:unitRun End-to-End Tests with Playwright
# Install browsers for the first run
npx playwright install
# When testing on CI, must build the project first
npm run build
# Runs the end-to-end tests
npm run test:e2e
# Runs the tests only on Chromium
npm run test:e2e -- --project=chromium
# Runs the tests of a specific file
npm run test:e2e -- tests/example.spec.ts
# Runs the tests in debug mode
npm run test:e2e -- --debugLint with ESLint
npm run lintThese are instructions on how to work with a Github issue with number <ISSUE>. If you don't remember the issue number, you can use gh issue list to see all the open issues.
gh issue develop <ISSUE> -c [-n <BRANCH_NAME>]- Development and commits (can push but not needed).
- The site uses the local
string-fingeringsworkspace package (npm installat the repo root links it intowebsite). gh pr create --body "Fixes #<ISSUE>" -egh pr view <PR> -w: Review PR and push what's needed.gh pr merge <PR>
Use gh pr list to remember the PR number.