Notes on GrainSynth & GenoaBOT jan 11 2017 /////////////////// PERSONALITY PARAMETERS impatience - when to become active (pass beats along) once beats are received persistence - how long to stay active vitality - whether to add another voice if already active - 1st value in determining how many sections to be active in - on section change, on test if no agents are active, vitality is tested to see if agent has "energy" to cover this emptiness - determines delay time: higher vitality = smaller interonset delays consistency - amount of variation @ newSection in processing (Dry/Wet, FB) - width of activeBands - amount of variation in volume between successive entries - possibiity of pitch change between entries - potential to play across sections, if possibility exists compliance - amount of variation after determining # of active sections - varying active sections based upon other request vs. other agents - on section change, on test if no agents are active, compliance is tested to see if agent has desire to fill in other's mistakes - after deciding which bands to play per section and broadcasting, low compliance will vary this when storing for use. repose - when selecting sections to be active in, repose prefers low activity requested sections. /////////////////// CHECK/FIX - currently broadcasts (ever 2.5 secs on heartbeat) as activeBands its initial proposed bands. These are immediately expanded when stored. Furthermore, held notes across section boundaries allow unpredicted active bands. Thus, NEED TO BROADCAST WHAT IS ACTUALLY ACTIVE. - Genoa can play across sections (determined inside Drony poly). However, volume changes between sections are not taken into account. Is this a problem? - since activeNotes is kept track, shouldn't these be avoided in selecting new pitches? - on launch, Genoa sometimes goes "active" even before a beat is sent. - vary Chorus and Reverb parameters, or set them via Genoa's filterscripts /////////////////// CHANGES - determine_sections_to_play - takes into account other musebots. - second musebot to select will ALWAYS select inactive sections of other musebot. Thus, a musebot (even if only two are present) will play in every section. REPOSE parameter - preference for quiet (rather than active) sections - generates random value and compares it to repose value - if greater, chooses a more active section - if less, chooses a less active section spectrum/AvailablePitches - @newComposition agent chooses barkbands for every section - possibility of wider than single band (based upon compliance) - @newSection, can change this selection based upon other agents, and section request ////////////////// QUESTIONS / To think about - very high chance of agent changing pitches @newSection - @newComposition, it IS known which pitches are consistent between sections - BUT, poly styles determine which actual pitches are to be used ////////////////// EXPLANATION @load - it will create a new track in Live @spectrum (from ParamBOT) - it will load GrainSynth into that track - it will transmit the envelope data (from synth script) to device via device_loader - it will transmit a pitchrange via device_loader. in GrainSynth - when it receives the pitch range, it will select a timbre that can play in that range - it will select two similar timbres for the other two voices, also within that range @new_composition - new envelope data - new pitch range - new timbres @new_section - new pitchRange based upon new spectrum (opposite would be to keep pitch range for composition) - new timbres ? (since current timbre may not be able to play in pitch range) *** this would lead to discontinuities *** ////////////////// BUGS ////////////////// TO DO ////////////////// Reminders impatience: how willing is agent to become active persistence: how willing is agent to remain active vitality: how much an agent is willing to do once active (hdensity) consistency: how often agent will vary its playing compliance: how strict will it interpret requests