aburd / beats-with-friends

A piece of software where beatmakers can make beats with each other.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add Synths

basileberjot opened this issue · comments

Feature Request

Is your feature request related to a problem? Please describe.
As stated in the roadmap (https://github.com/aburd/beats-with-friends/wiki/Roadmap#beat), we need synths to add melodies to the beats we're creating.

Describe the solution you'd like
First, I'd like to create a basic UI and audio engine implementation for the basis of the synth that can be expanded afterwards.

I'm imagining we can have a selection of instruments that could be separated by their utility to make it easy to use, eg: ambiance/pads, bass synths, leads, bells, etc...

We need something like a piano roll that is common in most DAWs (ex: https://www.researchgate.net/profile/Luca-Ludovico/publication/334365559/figure/fig4/AS:779094790787075@1562762081979/Piano-roll-view-in-Cockos-REAPER.png) to enable inputting notes.

Describe alternatives you've considered
I'm interested in https://www.elementary.audio/docs/ audio engine, but I'm not sure how pertinent it is compared to the current tone.js we have installed.

Teachability, Documentation, Adoption, Migration Strategy
Ability to select a synth instrument
Piano roll to make notes (click or keyboard input)
Integration into the current beat tracker/main page

@basileberjot
More than welcome to have you start working on a feature, but make no mistake this is a very large feature with a lot of moving parts. Here are the different parts to this, that I see:

  1. Add support for playing different notes and persisting them to the DB
  2. Adding support for persisting synth settings
  3. Adding a synth to the list of instruments supported
  4. Adding a piano roll interface
  • Adding draggable, scrollable, resizable windows
  • Piano roll window
  • Interface for the instrument on the "Sequencer" when the piano roll window is not showing

Any one of these may be non-trivial and could be their own issue, so just be aware you might be in a lil over your head. But anyway, give it a shot!

I'm interested in https://www.elementary.audio/docs/ audio engine, but I'm not sure how pertinent it is compared to the current tone.js we have installed.

At this stage, I don't think it's a good idea. I've read some of the docs and it looks like you have to pay for non-trivial functionality. Also, I'm not sure how we'd combine both Tone and Elementary. I'm not sure, but it looks like it may be hard to schedule sound playing with Tone.Transport and an outside lib. We might have to rewrite all the audio in Elementary. I dunno, it would be pretty difficult. Best to get out the ideas you can at this point in a generic way. Then at a later time, we can adapt it to some other library if necessary.

@aburd Thanks for adding your understanding of the issue here!
I guess I'll start small with one of the points you mentioned and update this issue accordingly.