Skip to content

mooserson/chordinate

Repository files navigation

Chordinate

Chordinate live

Chordinate is a web-application that offers a light-weight instrument to encourage musical creativity and social play. The project was a chance to grow as a web-developer working under deadline.

Chordinate

BIG THANKS: Chordinate was visually designed by Rachel Needle -- a truly brilliant artist and generous friend (Product Designer @ Apple). Thank you and thanks to those who took time to check out the app.

Design Docs

Keyboard

Keyboard The app is built around the keyboard which determines the URL depending on if it is in recording or playback state.

Songs

Notes are built by mapping a list of keyboard keys through a function that generates frequencies to create AudioContext nodes.

const makeTones = keys => {
  let tones = {};
  keys.forEach((key, idx) => {
    tones[key] = 329.63 * Math.pow(2, (idx/12));
  });
  return tones;
};

Songs are then saved in with note-keys in an array of slices which can be played back by storing the difference from the time the song started and the time the note or chord was played.

slices:
[
  { notes: [ 'a' ], timeSlice: 1250191 },
  { notes: [], timeSlice: 1255000 },
  { notes: [ 'a', 's' ], timeSlice: 1265180 }
  { notes: [], timeSlice: 1279511 }
]

Sharing

Sharing

Songs go to a feed that sorts by age, likes and plays. Songs are searchable and clicking a username will show all the user's songs.

The features for a minimum-viable-product were:

  • New account creation, login, and guest/demo login
  • CRUD Tunes via Synth
  • Share tunes via feed
  • Discoverable tunes
  • User Pages

Future features

I hope to add more to user interaction with friends and follows. I also hope to fill out the keyboard with scales and instruments. Layering songs and also live jam-sessions--plenty of room for growth.