ryanlaws / pigeons Goto Github PK
View Code? Open in Web Editor NEWMessage logistics for monome norns
Message logistics for monome norns
We should have a grid handler, similar to what already exists for enc
and key
.
More message sources and targets means more gear to connect to. The grid is a popular tool for use with the norns and opens up exciting plisp possibilities.
Also, a lens might not be needed, and the grid API is already nice, but a lens could "smooth out" or "pave over" differences between it and other hardware for the purposes of a lingua franca.
AST expression tables can already be generated from plisp sexprs stored in strings via plisp's expr_to_table
function. However, the current implementation of expr-to-sexpr
which converting in the other direction (AST to sexpr) lacks any kind of indentation, so while the sexprs it generates should be parseable by plisp, they are not human-readable.
Persistence - saving and sharing. This will be needed once the UI is ready to start manipulating expressions, in order to save them. It will also be needed in order to share them if and when we integrate e.g. norns.online sharing.
#table == 0
) should be changed to (: key1 value1 key2 value2 ...)
format.screen.text_extents()
) would be ideal. This assumes the expressions will be displayed on the UI. This may not be the case and is completely irrelevant in the case of file persistence - only line length matters there. Could be pulled into a wishlist issue.Add a debug mode that logs developer-centric information to the maiden/matron console.
This can be useful for troubleshooting. Also it is fun and educational to see plisp work its magic on an AST maze.
Add a scheduler to the app, and a way for expressions to plug into it.
Provide a means for user scripts to expose configurable parameters. These could be e.g. MIDI channels, CC numbers, sequence lengths, timing values, etc. These could be stored in user configuration along with the loaded scripts, or set/changed on the fly.
This would improve utility, discoverability, and accessibility of user scripts and make them feel more "modular".
Configuration is currently saved in the repository. This completely defeats the purpose of configuration.
It is useful to have an example configuration so users can figure out how the heck to use pigeons. But the live configuration doesn't belong in the repository. Simply copying an example configuration to the real configuration path would do the job.
Accordingly, a .gitignore
should include whatever the path of the live configuration the app uses, ends up being.
Users will modify the configuration. Without a UI, this is an absolute necessity. When they do, Git will think they might want to commit to the repository. This is not necessarily true, and even if it was, they likely do not want to commit their configuration.
Configuration is separate from code for a reason, and after all, this is lisp - configuration is code!
.gitconfig
is a must.Expose the parameters declared in a defn
.
Related to #14, this improves utility, discoverability, and accessibility of user functions and makes them feel more "modular".
defn
function already gathers these parameters from the definition (of course) so this would likely be a matter of creating a store of these parameters associated with the function names, rather than these residing within the closure of a function within its environment.MIDI ports for lensing and I/O are currently expressed as port IDs. These aren't even virtual IDs, they are low-level ALSA IDs. Let's not do this. Human-readable names are better.
Most importantly, this is the kind of ephemeral, cryptic, machine-specific gobbledygook that means doodly squat to humans and runs directly counter to the pigeons design goals. We want to get (very) nerdy but this is the wrong kind of nerdy.
Secondly, these port numbers change all the time. Get real crazy with plugging and unplugging, restart your norns, and you'll find the port IDs have utterly changed. No bueno.
expr_to_table
) treats all whitespace as a delimiter between tokens. I have considered tweaking the tokenizer to convert underscores to spaces for string tokens, and this would be a good use case. This would likely be just about the last tokenizing step. Naturally, anything accepting user input to select such a port would require the opposite conversion (space to underscore) for serialization to plisp.This is a whole can of worms. I haven't really begun to wrap my head around it. I think @tyleretters has a heck of a lot more ideas on this than I do.
Reconsider lenses: why they're good, what they could be, what they are and how that could better serve the idea.
The implementation of lenses is a hacky mess right now. It does not do justice to the idea.
range
that already exists in the Octatrack lens.We should have a helper (DSL) function to easily change the channel of an incoming MIDI message.
This is a very common MIDI processing use case.
n
and v
for channel-bound or "channeled" messages like notes, CCs, and program changes, where n
is e.g. note or number and v is e.g. velocity or value, but this implementation is incomplete.@ngwese's sky
library in the core norns platform library is supposed to achieve a lot of the same things pigeons does. It is a good idea to leverage the norns platform and use this. However, sky
documentation is scarce-to-nonexistent and @ryanlaws is the first to admit that he has had much difficulty groking this library, even with the recommended tambla example source.
We want to leverage the norns platform where it makes sense, and this seems like a great place to do it.
This could greatly reduce the footprint and responsibilities of the pigeons code, so we can focus on lispy, lensy, UI-y goodness.
The educational experience required in developing this understanding could prove valuable in precipitating documentation for sky
itself in order to give back to the norns community.
sky
are in very awkward, messy parts of the pigeons code.As described in #2, MIDI are currently expressed as port IDs. Let's not. Human-readable names are nice. Platform-supported identifiers are just as good. Support the virtual ports (the 4 you select in the system menu).
These are a well-established platform idiom and we should use them. The norns platform already provides a good UI for selecting these and that saves us work - we get port selection for free, users will "get it", and that's a UI problem we don't need to solve.
We should have a function to express inclusive contiguous ranges like (1 2 3)
or (37 38 39)
.
I'd suggest the name ..
as this is used in norns's own SuperCollider and some other languages.
This is a very common pattern, especially in MIDI processing. This is valuable for things like channels, note ranges, and indexing, as well as many other use cases. Lensing would make this even more useful for e.g. setting a row or block of LEDs at a time.
The Octatrack is the only MIDI lens at the moment. We need more.
The more tools we lens, the more interesting this project becomes to folks who have MIDI problems to solve. Also, the more things we can connect.
This also helps road-test our DSLs and reveal gaps and improvement opportunities.
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.