Giter VIP home page Giter VIP logo

sightread's Introduction

A free and open-source webapp for learning to play Piano. Play music without needing to learn sheet music. Plug in your MIDI keyboard for the optimal experience. See full details on the website.

app screenshot

Contributing

To start the app

npm install
npm run dev

Testing

We use bun for testing

To install, follow https://bun.sh/docs/installation

npm run test

sightread's People

Contributors

bermi avatar bftmoon avatar eloxz avatar emmaoberstein avatar j4k0xb avatar leocaseiro avatar renovate[bot] avatar samouri avatar wywywywy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

sightread's Issues

Wait mode can detect out of order notes as correct

I often use the wait mode to learn some midi files I made of the Hanon exercises. I found that if I have two notes in a row and I accidentally play the second note first, it will show this as wrong, but when I play the correct note, it will play the first note and the second note again without me having played the second note a second time.

For example, if the notes are A, then B. If I play B first, it responds correctly and doesn't accept the note. Then, when I play B I hear the notes A played and then immediately hear B even though I didn't play B.

As a workaround, if I modify the code to set good_range and perfect_range to zero, it seems to fix the problem.

File:
src/features/player/index.ts

New values:
const GOOD_RANGE = 0
const PERFECT_RANGE = 0

Also, I love this project. It has already been amazingly helpful for me.

What is the License?

Hi, I was wondering what is the license for the sightread?
The description says it's open-source, but the package.json has a private: true.

Charted songs (in the style of Clone Hero)

First of all, I know this is quite a hard request being a dev myself (I code on TS too, maybe I could help somehow?) and very out of scope, but also an interesting thought could be made on the long term as there's nothing else like this out there:

As I read you're planning on implementing being able to play local files, what about trying an implementation of MIDI files synced with mp3 files? Kind of what Guitar Hero already before, taking MIDI for the charts and mp3 for the actual music. Keyboard Hero at its fullest.

I get this has some kind of implications that must be studied:

  • Moonscraper does that work for Clone/Guitar Hero charts, but it only works for those games format. How could charts be made then? To develop an external editor its an inmense work so it's not viable, but maybe a workaround could be found?
  • Performance/syncing issues, I don't know how hard could they hit.
  • Not to talk about if the whole project structure already defined can handle something like this.

Sorry for the verbosity, maybe I'm just building castles in the sky but I thought it could be interesting. What's your thought on this?

Difficulty scaling

summary
Learning piano is difficult. I think if you were able to learn on advanced music that sounds fun vs. Twinkle Twinkle Little Star, as well as create a more gradual difficulty curve, the experience would be much more fun.

The idea is that instead of only hearing the notes being played on screen, what if we had a difficulty toggle that could drastically reduce the difficulty of a song. You'd then play the easier notes, but still hear the full song (similar to Guitar Hero & Rock Band). Over time you could then increase the difficulty setting until you are playing 100% of the notes.

Record audio

A button to start recording audio and save in a mp3 file.

Coloured notes and bigger fonts in Sheet Hero

The "Sheet hero" visualization looks like a great approach to familiarize beginners with sheet reading.

However, its current version is completely black (as normal sheet music :) with small letters to show the notes. So, it is kind of unappealing and still hard to read and associate notes with keys.

I would like to use it to introduce my toddlers to sheet music.

They currently have a toy piano that includes sheet music. Each note in the sheet is coded in a different color and each key in the piano has the same color, so it is easy for them to read the sheet and play the song.
20230118_115432
20230118_115409

It would be great if there was an option to enabled "Color notes" in "Sheet hero", so that each note is shown in a different color. That way, they would be easier to identify and learn and more appealing for children. Eventually, the would be prepared to move to the pure black sheet.

Support windsynth

I think it would be great to add support of MIDI Windsynths like https://a.co/d/8qZJhoA (I have this one).

E.g, UI for Sax could look like one from Saxplained videos:
image

I tried to connect my windsynth to sightread and it works, just needs a different UI. When I'll have a free time, will try to add it myself.

Kinda related to #108

Settings for color coding notes

summary
Some systems for teaching kids involve color coding notes on the staff instead of having them all be black. We can pretty easily add a new toggle in the SettingsPanel for enabling this. This should help folks learn to read notes faster, especially when the notes are on ledger lines.

Enable keyboard for Select A11Y for Tracks

I am trying to find a different sound for an instrument, but is very had to search.
First, the element is not keyboard friendly, like an auto-complete for example.
Also, the list is not in alphabetic order.

Eg:
Screenshot 2023-09-18 at 5 45 34 pm

Dual Voice

It's great if our software I can have dual voice like most of Casio Piano, so for each press, we can have both sound together like piano with synth.

atomEffect is never mounted

Hi there ๐Ÿ‘‹

Beautiful library. Super cool.

I just noticed that the atomEffect is not mounted, so it won't run.

atomEffect((get) => {
const pointlessHitsCount = get(player.score.pointless)
if (pointlessHitsCount !== 0) {
playFailSound()
}
})

You can make it run by defining the atomEffect in global scope just like you would an atom and passing to useAtom. atomEffects are atoms after all.

Have a nice day.

MIDI device not detected, but it is detected elsewhere.

My Casio CT S300 is recognized and works on my computer, but Sightread doesn't see it. Here is an example, showing Virtual Piano can see it but Sightread can't. Maybe I'm doing something wrong, but I don't know. I'm using the latest version of Firefox on Windows 10. Thank you for your attention.
ku9lO3w

Cannot read properties of undefined (reading 'left') on too low/high keys

many pianos have a function to transpose +-12 but sightread crashes when rendering a midi note from outside the normal range:

sightread
seems to happen because it tries to access a non-existent lane.

const lane = state.pianoMeasurements.lanes[note.midiNote]
const posY = getItemStartEnd(note, state).end - (state.height - state.noteHitY)
const posX = Math.floor(lane.left + 1)

Compatibility with Acoustic instruments

summary

In order to take full advantage of sightread, one needs a MIDI-compatible keyboard.
It would be great if SR were also compatible with acoustic instruments.
This would require using a mic and converting the raw audio to MIDI notes, which is an incredibly challenging problem.
Our best bet would likely be to use an off the shelf solution.

For example, project Magenta's Onsets and Frames JS API. It seems accurate, but we'll have to see about latency.

Support e-drum

This app is very cool, and it would be nice to also support e-drum. What are you thoughts on it?

PWA: Support offline use

summary

Numerous folks have reached out over email requesting the ability to install Sightread to use it while offline. This includes:

  • Launching freeplay/learn a song mode while offline
  • Having access the soundfont
  • Playing builtin and locally synced/uploaded music

Download recording as MP3

summary
As of #113, we can make midi recordings in Free Play mode.

The only available options are Download MIDI, and copy as url.
This issue is about introducing a third option - download as MP3.

The ideal implementation will somehow go from the midi Uint8Array to sound bytes, without using Media Stream Record API

context

  • Branched off from #110

Offering help

Hello, I've wanted to make an app like this one, so I'd like to contribute. #64 seems a good feature.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

  • chore(deps): update all dependencies (@types/bun, @types/node, @types/react, clsx, eslint, eslint-config-next, fluent-ffmpeg, jotai, next, prettier-plugin-tailwindcss, react, react-dom, sharp, tailwind-merge, typescript)

Detected dependencies

bun
package.json
  • @radix-ui/react-slider 1.1.2
  • @radix-ui/react-tooltip 1.0.7
  • @tonejs/midi 2.0.28
  • clsx 2.1.0
  • jotai 2.7.2
  • jotai-effect 1.0.0
  • next 14.1.4
  • react 18.2.0
  • react-dom 18.2.0
  • react-feather 2.0.10
  • tailwind-merge 2.2.2
  • @ianvs/prettier-plugin-sort-imports 4.2.1
  • @types/bun 1.0.12
  • @types/fluent-ffmpeg 2.1.24
  • @types/jest 29.5.12
  • @types/node 20.12.5
  • @types/prettier 3.0.0
  • @types/react 18.2.74
  • @types/resize-observer-browser 0.1.11
  • @types/webmidi 2.0.10
  • autoprefixer 10.4.19
  • eslint-config-next 14.1.4
  • eslint 8.56.0
  • fluent-ffmpeg 2.1.2
  • jsdom 24.0.0
  • postcss 8.4.38
  • prettier-plugin-tailwindcss 0.5.13
  • prettier 3.2.5
  • sharp 0.33.3
  • skia-canvas 1.0.1
  • swr 2.2.5
  • tailwindcss 3.4.3
  • ts-node 10.9.2
  • tsconfig-paths 4.2.0
  • typescript 5.4.4
github-actions
.github/workflows/validate.yml
  • actions/checkout v4
  • oven-sh/setup-bun v1

  • Check this box to trigger a request for Renovate to run again on this repository

Better Mobile View

HI, I really appreciate your work but it is pratically impossible to play on smartphone even with max zoom out and desktop mode.
Is there a way to make it better?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.