ut-proj / undertone Goto Github PK
View Code? Open in Web Editor NEWMaking Music with Extempore, OSC, and SuperCollider in LFE/OTP
License: Apache License 2.0
Making Music with Extempore, OSC, and SuperCollider in LFE/OTP
License: Apache License 2.0
Tasks:
mplay
in undertone with each channelThis is intended mostly as an experiment in feasibility and usefulness. If it works out, then offering an option to start the REPL by default (e.g., #52) may be easier to enable/configure.
Tasks:
gen_server
undertone.repl.extempore
that may be reusedgen_server
With the learnings from Extempore-only REPL (see #33), we might now be in a position to support arbitrary Extempore forms in native-LFE land. This would basically be an LFE REPL, but would have the capability of intercepting user input to check for special, undertone-specific forms, e.g., (xt:define ...)
. Those could use the functionality developed in the undertone.repl.extempore
module.
Tasks:
undertone.repl
xt
REPL command(xt ...)
and dispatch to the Extempore REPL functionsextempore
REPL from the undertone
REPL (and exiting back out to the undertone
one)Note that the approach above doesn't support evaluating LFE expressions inside (xt ...)
forms. That would come later (again, see #22).
Blocked by #3
Tasks:
extempore
There seems to be a mushroom thing going on for the project ;-) (see ceba794) Let's go all-in and add it to the logo, too ...
Tasks:
TUIO is implemented with OSC, and Studio One supports TUIO via TCP.
Resources for investigation:
A continuation of #7
Tasks:
/strip/pan_stereo_position ssid position
/strip/pan_stereo_width ssid width
/strip/select ssid y/n
/bank_up
/bank_down
/toggle_click
/loop_toggle
/loop_location start end
/record_enabled
/transport_frame
/transport_speed
/undo
/redo
Branch:
Resources:
This would allow for Extempore syntax in an LFE session (but in a new REPL).
Tasks:
undertone.repl
undertone.repl.pure-xt
Depends on: #48
Tasks:
release/0.2.x
branch and rebase from remote for latestrelx
entry in rebar.config
release/0.2.x
or merge/push to main
main
and rebase from remote main
Considerations:
Questions:
First thoughts on what needs to happed:
Let's use the new Erlang logger module; this will mean only Erlang 21 and newer will be supported ...
Things to consider:
Tasks:
app/undertone/src
and all the basic supervision tree essentialssys.config
as neededThis is useful for performing critical actions upon which everything else depends (so you have to wait no matter what) or for situations where you need to see the output from Extempore.
Tasks:
After all this exploration, what are the options for the goal "I want to control a MIDI-capable VST plugin from LFE"?
Depends on: #48
This would be for temporary, single-session REPL command management. For history management (persistent storage between sessions), see #55.
Tasks:
Tasks:
/strip/list
/strip/plugin/list ssid
/strip/plugin/descriptor ssid
/strip/select ssid y/n
/goto_start
/monitor/mute
Branch:
Resources:
This wouldn't necessarily be very useful, but would represent an essential first step in addressing #22 and would be a useful feature in #36 and subsequent features for that REPL.
Tasks:
(defxtmsg ...)
which simply generates a full message (including terminator string) and can be assigned to a variable(definext ...)
which mimics Extempore's (define ...)
(lambdaxt ...)
which mimics Extempore's (lambda ...)
(bind*xt ...)
which mimics Extempore's (bind* ...)
Tasks:
displayed-banner?
) to undertone session managerdisplayed-banner?
is not true
Extempore is designed for use in live coding and improvisation; units of composition don't go too far beyond collections of notes. Things to ponder, in order to use undertone as a tool in composition while being backed by Extempore:
This would be persistent storage for commands over the course of multiple sessions, as opposed to the temporary storage of REPL commands in one session (see #40).
Tasks:
gen_tcp
communicationstcp-client
library to send messages to Extempore (replace the naïve experiment above)Right now, there doesn't seem to be a way of capturing the list of MIDI devices seen by Extempore -- the function appears to bd stdout-only.
Tasks:
This may need to be done for both PortMIDI and rtmidi in Extempore ...
Follow-up to #47
Depends upon lfex/tcp-client#7
When timeout sync support lands in tcp-client
, we can make a blocking call with a timeout; if the timeout is reached, failed state can be assumed.
xt.lang
module for functions that generate Extempore's Scheme forms
(xtl:define ...)
without conflict in any of LFE's formsextempore
TCP server
\r\n
Right now the Extempore parentheses balancer function only considers an expression balanced when the parens count reaches zero. An essentially error state may be created when negative parens counts occur (via typos, too many closing parens, etc.). This may be avoided by executing zero-parens logic for any negative parens counts, too.
Tasks:
src/xt
- #21xt
module with all the functions necessary to get started using Extemporeextempore
binary flagsextempore
binary / executable (see #51 and #44)extempore
TCP server
A positive is fairly easy to do: send a blocking message to the server and if a result comes back, you're good. Simply sending a bool like #"#t\r\n"
would do it. However, if the server is not okay, you can be in a bad state. A timeout will help with that (see lfex/tcp-client#7). Until then, an async message that writes a warning to a log should be fine.
This could be done with sending a specific bit of data, e.g., #(health ok)
which will then be resent by Extempore back to undertone. When that specific packet comes back, it can be intercepted and a lot message can be generated.
Tasks:
(check-xt)
REPL function, which will async send #(health ok)
#(health ok)
, logging that at notice-levelWhat will it take to automatically start the extempore
or undertone
REPLs? (once we have the undertone REPL in place, see #36). The goal being that when the system comes up with a rebar3
command such as rebar3 as extempore repl
or rebar3 as undertone repl
, start with that REPL instead of the LFE REPL.
Tasks:
extempore
REPL automaticallygen_server
(see #54)rebar3 lfe repl
and setting a custom ttyrebar.config
that passes the appropriate flags or uses the appropriate profileGeneral health / connection status is probably the single most important factor (see #47), but it would be nice to have access to other info, too:
As a starter, Andrew Sorensen pointed me to the top of this file:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.