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

'Composite slopes' for output library #67

Closed
trentgill opened this issue Feb 20, 2019 · 1 comment
Closed

'Composite slopes' for output library #67

trentgill opened this issue Feb 20, 2019 · 1 comment
Assignees
Labels
design Issue needs design consideration feature new features yet to be added

Comments

@trentgill
Copy link
Collaborator

trentgill commented Feb 20, 2019

Composite slopes would be composed of three elements:

  • offset with a dedicated slew time
  • actions with an assignable modulation added to offset
  • pulse functionality overlaid on all of the above

The general use-case in mind here is an extended version of teletype commands:

OUT
OUT.SLEW
OUT.PULSE
OUT.SHIFT

So an output has a offset(commonly a pitch) which it moves toward at the slew rate, while a modulation (typically an lfo for vibrato) is applied. then atop this a triggered event can be added too. In TT the .SLEW parameter is used across both 'offset' and 'pulse' functionality. For a pulse it becomes the attack & release times. Here we allow a completely customizable pulse which need not be a square wave smoothed by slew, but rather a generic envelope which can be triggered by a physical input or otherwise.

For example, the slew section could be articulating a generative melody with portamento, while having a fast but subtle vibrato added by mod/action, with the pulse section instantly jumping up an octave every 4th note, then gliding back down every 8th.

All three of these functions will be implemented as ASL slopes, composed together in the IO_BlockProcess() function. This requires some small extensions in the C-layer, but primarily requires development in the lua Output library.

consider the existing syntax:

output[n].asl.action = {asl}
output[n].asl:action()

to make this clearer in the 3-layer setup we could use:

output[n].pulse = {asl}
output[n].mod = {asl}
output[n].slew = {asl}
output[n]:pulse(bool) -- nil or true begins the pulse, false ends it / goes to release
output[n]:mod(bool) -- restarts the modulation if nil or true, else goes to 'held' if it exists
-- slew() need not be called explicitly, it will be automatically called when the .offset param is updated

pulse uses the .width param for the pulsewidth in ms.
mod uses .level, .speed, and .shape params
slew uses .offset and .rate params. note that changes to .offset (and .rate?) will trigger a new ASL breakpoint, causing the slew effect.

there is clearly a great deal of ambiguity in the naming when it omes to the three speed-based parameters. i've tried to make them work with the traditional nomenclature, ie: slew.rate, modulation.speed, and pulse.width though perhaps these aren't intuitively obvious.

could prepend with P, M and S but this feels like a hacky solution. thoughts?

@trentgill trentgill added feature new features yet to be added design Issue needs design consideration labels Feb 20, 2019
@trentgill trentgill added this to the 1 milestone Feb 20, 2019
@trentgill trentgill modified the milestones: 1.0, 1.1 Mar 1, 2019
@trentgill trentgill modified the milestones: 1.1, 1.2, 2.0 Oct 6, 2019
This was referenced Apr 11, 2020
@trentgill trentgill removed this from the Major (2.0) milestone Jun 22, 2020
@trentgill
Copy link
Collaborator Author

A "Nice Idea", but ultimately requires a different style of ASL usage. While this could be revisited in the future, it shouldn't cloud the redesign of ASL2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
design Issue needs design consideration feature new features yet to be added
Projects
None yet
Development

No branches or pull requests

2 participants