Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide UI for improvisational assistance #96

Open
16 of 39 tasks
oubiwann opened this issue Mar 14, 2021 · 1 comment
Open
16 of 39 tasks

Provide UI for improvisational assistance #96

oubiwann opened this issue Mar 14, 2021 · 1 comment
Assignees
Labels
Milestone

Comments

@oubiwann
Copy link
Contributor

oubiwann commented Mar 14, 2021

When undertone is being used for generative or improvisational work, a randomly generated stream of chord / mode / key transitions is played, with no real ability to see these ahead of time, nothing that allows the user to prepare for the changes and properly improvise accordingly.

We need a solution for this. And since a terminal is really too small to be looking at from across the room when playing an instrument other than undertone at the laptop/workstation, we need something which can be displayed on on a large screen/monitor. A dynamic web page (JS-powered) would be ideal for this.

Ideas in support of and related to this include:

  • a chord view that displays the upcoming chord transition
  • a view of the total beats for the chord and the current beat being played
  • the view of the current beats should be animated
  • display of volume/velocity
  • current/next key
  • current tempo
  • system (OS) info
  • backend info (Extempore/Bevin)
  • Erlang node info (monitoring data)

Tasks:

  • Investigate possible web servers/frameworks
  • Add support for serving static pages
  • Create quick-and-dirty long-polling solution
    • create a web API module
    • return sample JSON
    • using XHR in the browser, hit ESI resource for JSON
    • populate DOM with JSON data
  • Get backend data into undertone ...
    • send parsable data from Extempore to LFE
    • write parser/regex for data passed via Erlang Port stdout
    • create utility functions for converting Extempore format into LFE format
      • tempo
      • chord pitch and type
      • beat
      • beats per note
      • note
      • note duration
    • explore how to best capture current / changed chord sequence or progression data
    • update the ESI function to query the source of truth
    • format the queried data for consumption by the browser
    • create a gen_server for maintaining sequence / progression updates
    • add a function for writing to the state
    • add a function for reading the state data
    • update the ESI function to call the gen_server's read function
  • Pull data from sequence / progression gen_server into UI
    • ensure data is converted properly for use on a web page / in JS
    • update progress bar based upon current beat
  • Convert gen_server state data to ETS table
    • write this data to current phrase ETS table
    • update the ESI function to query the ETS table
  • Make HTTP servers configurable / swappable
  • Convert long-polling solution to WebSocket
  • Codify in LFE
    • create LFE wrappers for sequencer functions
    • including the formatting/writing of data to the Erlang Port for parsing by LFE
@oubiwann oubiwann added the epic label Mar 14, 2021
@oubiwann oubiwann added this to the 0.4.0 milestone Mar 14, 2021
@oubiwann oubiwann self-assigned this Mar 14, 2021
@oubiwann
Copy link
Contributor Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant