This update will be to put a menu system in the game. The menu can be accessed and closed out of by hitting ESC. It really doesn't need to be much more than text that appears in the center of the screen, but I would give it a semi transparent black rectangle (no border necessary) to sit within. This should keep the text readable even with the action going on in the background, which will need to continue even while the menu is open.
At the top of the menu can be a simple horizontal list of text items that will function as "tabs" for each of the categories of options. The left and right keys can arrow between them or they can be clicked on. When one of these header tabs is selected menu options in the rest of the menu will change to reflect the new category. The currently selected header should appear white, while the others appear gray. These headers should be as follows:
audio visuals instruments projects analysis
The menus that currently exist can be seen in the following screenshot
Most all of these menu options should be emulated (there will be some adjustments which I will outline below) including the style of having a plaintext sentence with one or two words or numbers from it as the adjustable parameters themselves in bold and a slightly larger font. These bold parameters can be rotated through by using the up and down keys or also by clicking on them directly. I'm not sure what sort of UI elements Unity has available, but I'm imagining these selectable parameters to be the actual number boxes, drop-down menus, etc. littered throughout the otherwise plain text options of the menu. All of the text and items in the main part of the menu should be a light gray, while the currently selected parameter should turn white.
Pressing ENTER or clicking on a parameter will allow the selected parameter to be changed by again using the up and down keys or by simply moving the mouse up and down. Then clicking or pressing ENTER again will choose that value for the parameter and return to rotating through menu parameters.
The current value of the menu parameters will be relayed to you via OSC messages in the format /amanuensis/menu/[parameter name] and selections made by the user will need to be relayed back to the main app by messages in the same format. Since most parameters will need default values, you can send an OSC message of the path in question with …
/get appended to it to request the current value from the main app, which will then be sent to you via the ordinary message.
elow I will detail every menu option:
[set up] audio driver
- no options here, just the words "set up". If clicked or selected and ENTER is pressed send
/amanuensis/menu/driverwith no arguments
use samples found in [path to samples folder] including subfolders [0-9] deep
- 2 selectable options on this line
- the 1st is a file path to display, which will come to you via
/amanuensis/menu/samples s. If clicked or ENTERed on send
/amanuensis/menu/sampleswith no argument
- the 2nd should have options as a range of numbers 0-9. The currently selected option should be relayed back and forth via
use vst instruments found in [path to VSTi folder] including subfolders [0-9] deep
- see above, with an OSC path of
master monitor gain is [-70-6] dB
- options and is a list of numbers (perhaps a simple slider behind them?)
- current choice relayed back and forth via
loop playback gain is [-70-6] dB
- see above, with the path of
[do not compress any tracks/individually compress tracks] when recorded
- this is basically a simple toggle but with 2 text options, "do not compress any tracks" and "individually compress tracks"
- relayed back and forth with
/amanuensis/menu/compress_recording iwhere the argument is 0 on "do not compress any tracks" and 1 for "individually compress tracks"
[do not compress any/compress together] loops on playback
- see above, but with a path of
I won't go into detail about this section, since you're already familiar with the selectable options that should fill it. They will be the adjustable parameters that we've already created in Unity. I'll just have to let you know what label I want on each of them. I'm assuming that just about all of them will make it onto the menu somewhere.
One that I can foresee right now would be:
- this would select between random and ordered targets. With "spiral" selected, additional lines of options would need to appear on the menu for those that pertain to the ordered targets
I'm also thinking that maybe the dynamic camera could be turned on or off regardless of mode, so there might be a line for that. Then it's possible there could be a "fixed dimensions" parameter for when it's off, but I'm not sure how necessary that would be.
[shuffle] the track and sound of [list of active instruments] [manually only, not/only automatically,/after every song, but not/upon player inactivity, but not/after every song and/after every song and upon player inactivity, but not/upon player inactivity and/after every song, upon player inactivity and] every [10-900] seconds
- 4 selectable elements in this sentence
- the 1st Is simply the word "shuffle". When clicked or ENTERed send
/amanuensis/menu/shufflewith no arguments
- the 2nd will be a list of instruments as strings. This might need to be a drop-down menu as I need any or all of the options in it to have checkmarks by them (or something else, like a highlighted background, to denote that they are selected) - the options in the menu will be relayed to you via
- cllicking or ENTERing should open the drop-down. Then the up or down keys/using the mouse should select options from it. Clicking or ENTERing again should toggle the presence of a checkmark by that option then send
/amanuensis/menu/shuffling s iwhere the 1st argument is the string selected and the 2nd is a 1 or 0 for the presence of a checkmark
- messages of the same format will be sent to you as well, relaying changes in checkmarke options. If a message arrives referring to an instrument that doesn't exist, it should be added to the drop-down - at first there will be no instruments in the list and the selectable should simply display "no instruments" - when thestruments" and onts in the list the selectable should always display "the selected instrument" and only reveal the instruments in the drop-down once clicked or ENTERed.
- the 3rd will be a list of 8 preset options (see above). The current choice will be relayed back and forth via
/amanuensis/menu/shuffle_when iwhere the argument is a number 0-7 denoting the option from the list
- the 4th will be a list consisting of integers 10-999. The current choice should be relayed back and forth via
[launch] the Singing Stream
- no options here, just the word "launch"
- upon clicking or ENTERing this selection, send
/amanuensis/menu/singing_streamwith no arguments
export recordings and project files to [path to project folder]
- the path to display will be relayed to you via
- when the path is clicked or ENTERed send the message
/amanuensis/menu/projectswith no argument
cue up [list of project names] to begin working where you left off on it
- when an option is chosen, send it via
- to populate the menu you will first receive
/amanuensis/menu/cue/clearwith no arguments. This should clear all options from the list
- this will be followed in quick succession by the list of options to populate with, each in their own
[select] an audio file to begin a new project with it as the backing track and a gain of [-70-6]
- the 1st selectable is simply the word "select". When clicked or ENTERed send
/amanuensis/menu/backingwith no arguments
- the 2nd selectable is a list of numbers -70-6. The value here should be relayed back and forth via
/amanuensis/menu/backing f. Again, with these types of options the possibility of a simple slider behind the numbers might work better than a huge list of integers
upon inactivity [do nothing/cue up a random project]
- there are 2 possible options in this selectable, "do nothing" and "cue up a random project"
- the current choice should be relayed back and forth via
/amanuensis/menu/feed i, where the argument is 0 in the case of "do nothing" and 1 in the case of "cue up a new project"
[1-48] millisecond tolerance on either side of each beat
- the options here should be a list of integers 1-48, relayed back and forth via
- this new path should actually replace the existing
[1-24] second memory span
- the options here should be a list of integers 1 through 24, relayed back and forth via
- this new path should replace the existing
[0-8] beat lead-in and -out of comp loop
- the options here should be a list of integers 0 through 8, relayed back and forth via
[1-40] fps frame rate for timeline view
- the options here should be a list of integers 1 through 40, relayed back and forth via
One More Thing
It's also become apparent that I need multiple lines of messages displayed along the bottom, not just the one. So for each new message that comes in, the prior messages should be pushed up one line to a max of, let's say, 5 lines. Then when the 5th line is pushed up, it can disappear.