- Node (check
.nvmrc
for version) - pnpm
pnpm install
pnpm start
Plays dummy local video instead of YouTube to work properly in offline environments (eg. planes).
pnpm start:mock
Locally the app runs on HTTPS (with dummy cert) so remote microphones work. This makes the Service Worker not work due to untrusted origin. See this document how this can be fixed.
pnpm build
By default, dummy (simulated) microphones are used. You can use whatever other mic.
You can just copy the link and open it in a new browser tab or whole new browser. If you want to connect actual phone
to the dev server, you need to run it with --host
flag, eg pnpm start --host
(and open the actual IP link).
Note that some songs won't work (YouTube will block the access), probably due to the host being an IP.
Running against the dev server if it's running by simply running
pnpm e2e
You can run specific test and specific browser, headed or with debug like so
pnpm e2e --project="chromium" --headed --debug tests/song-list.spec.ts
It's also possible to run the tests against prod build (same as in CI) - it makes the tests run slightly faster:
pnpm e2e:prod
For that you might want to keep following command running separately to not have the app built every time tests are run:
pnpm build:serve
pnpm test
Documentation about specific topics can be found in docs/ folder.
frequency
- a frequency of player's voice in HzfrequencyRecord
- object containing frequency and timestamp (of the song) when it was recordedpitch
- an actual sound (eg A, C, F#) as a number where0
= C0section
- either a verse (containing notes) or a "pause section" - A.K.A instrumental part of the song when nothing's sungnote
- a single singable syllabe with assigned targetpitch
, starting beat, length and lyric. Is also one of several types (see below)distance
- a number of pitches between player's note pitch and target note pitch, disregarding the octave (so for example player's note C0 has distance 0 to note's target pitch of C4). Note a tolerance can apply - eg with tolerance of 1, distance between pitches 66 and 65 will be 0 (while between 67 and 65 would be 2)playerNote
- group offrequencyRecords
recorded directly after eachother, matched (by time) to a note with the same distance to it. Basically represents the player sung lines shown in the game
normal
- regular notestar
- golden note, gives bonus pointsrap
/freestyle
- notes that are always hit if any singing is detected. Gives reduced points