Given the Coronavirus, many students taking a music course have an environment that is far from traditional. As students who have experience with music, we have first-hand experience of what this is like. To solve this, our team created Harmony.

What it does

Harmony is a web application that allows near-synchronous collaboration between musicians, with a focus on educational applications. When one arrives at the website, they can either enter a meeting code to join an existing room or create their own room. On creation, they are asked to enter a tempo to provide a standardized metronome for all members in the room. Once in the room, all members can record at their own pace with the metronome in their ear. The creator will have their own custom screen where they can see the various recordings, isolate recordings of their choice, and more giving them the opportunity to provide instantaneous feedback. Additionally, all clips can be played at the same time on the creator screen, so Harmony allows tracks to “merge” where traditionally students cant play together.

How we built it

With: Svelte, JavaScript, HTML, WebRTC, Pug, CSS, Git, Attractions UI Library, Rollup, Peaks.js, SCSS, Svelte Material Icons, Typescript, Chris Wilson - Web Audio Metronome, Kevin Macleod for sounds in the video.

Challenges we ran into

Unfortunately, due to some issues with the library we were using for audio visualization and playing (Peaks.js), so while the audio visualization shows the actual audio transferred, it unfortunately does not play back yet. Instead, a substitute sample audio file is played.

Accomplishments that we're proud of

We incorporated peer-to-peer (P2P) communication using Peer.js, so file transfers bypass central servers and are much faster.

What we learned

We learned Svelte and Peer.js for the first time, along with pretty much all the other libraries we used.

What's next for Harmony

We plan to fix that bug with audio playback, and add more features like synchronous recording, basic audio offset editing, and exporting audio to a file.

Built With

Share this project: