Online typing races like Nitro Type and Type Racer can be fun activities with a group of friends or simply when procrastinating on work. The challenge of performing better than others makes players completely forget that they're actually improving their typing ability. Imagine if learning piano could be the same! By going head-to-head against other people, the player is motivated to put their all into every song they play. Additionally, instead of dreading having to continue practicing the piano, this feels like playing one more round of a game!

What it does

We turn sightreading into a game! If you keep getting notes right, your plane will fly past all the competitors who are playing the same piece of music. We track a player’s accuracy and longest streak. It can be played either with a computer keyboard or a piano keyboard hooked up by MIDI cable.

How we built it

We used Unity 2D and Unity UI elements to create the game interface, and Mirror was used for the multiplayer connection. Additionally, we used Krita to create the staff objects. Oh and tons of C#.

Challenges we ran into

Accuracy measures - We had lots of trouble determining how to calculate the accuracy. If someone hits only wrong keys, how do we penalize them for that? What if they hold the note too long, or not long enough?

There were also some issues converting from beats to seconds, and as well as rounding errors when splitting the time spans into segments.

Accomplishments that we're proud of

We practically made a piano keyboard emulator from scratch! From making the note objects and staff, to logging if a key is being pressed for the correct number of beats in comparison to the note shown on screen. We had to dive deep into the MIDI file type and create classes to decompose all of the data we needed.

Multiplayer! We’re quite glad that we managed to get the multiplayer aspect working, especially given that the pvp aspect is what makes the idea different from any other piano-learning concept we could find on the internet.

The final result also ended up looking quite clean visually! We really enjoyed coding the clouds to randomly drift across the scene, the plane to slightly tilt during its flight path, and the camera to smoothly track the local player’s movements.

What we learned

2 of our 4 members had no prior Unity or C# experience, and now they have new, great tools added to their tool belts. None of us had ever worked with sound files before, so it was cool to work with that for the first time. Additionally, three of our members had never worked with multiplayer connections. Lastly, it was 3 of our member’s first hackathon: they learned the invigorating, sleep-defying abilities that come with having a project we’re all excited about and a 36-hour deadline.

What's next for Notes

Besides adding more variety to our songs, here are some of the additions we would make given more time: Data Visualization: There are soooo many metrics we can keep track of for a user. For example dynamics, most commonly failed notes, chords, etc. Collecting these metrics and providing a snappy UI would allow users to visualize their progress over weeks, months, and more. We all love seeing ourselves improve, and numbers provide the best feedback 🙂.

A new game mode: This mode would be focused on learning a specific piece of music instead of sight reading. In this mode, the music would stop until the player gets a key correct. Players would be a little less worried about accuracy and rhythmicality, and more about finishing the song first, while still in tempo—of course.

Class/Group Integration: The skill of sight reading is useful for pianists at all levels of experience and teachers/groups would benefit from having a fun tool to use in order to push themselves.

Cordless Detection- The ability to detect the sounds of the piano without any cords. It would make it much easier to just load up the game and play.

Skill Leagues- Players could be ranked into leagues given their historical performance and then matched into lobbies with people near their same skill level.

Built With

Share this project: