Giter VIP home page Giter VIP logo

undermidi's People

Contributors

oubiwann avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

ioolkos

undermidi's Issues

Don't require Golang

Users shouldn't need to have Go installed in order to use the midiserver

Tasks:

  • ut-proj/midiserver#7
  • Add Go bin directory in priv
  • Add target to download correct binary
  • Update LFE code to build correct binary name
  • Update docs on how to build midiserver from source and how to run it from pre-compiled binaries
  • Testing
    • macos amd64 bin
    • macos arm bin
    • linux amd64 bin
    • linux arm bin
    • macos go src
    • linux go src

Support external clock-based orchestration

Part of epic:

Tasks:

  • Allow changes to time signature while running
  • Change single start/stop data to a list of starts/stops
    • update the map for tracks to remove started_at and stopped_at
    • add new key transport that's an empty list by default
    • every call to start-track and stop-track will append to the transport field, e.g., #(stop ,now))
  • #46
  • Receive start/stop messages from midiserver
  • Support callbacks based upon changes in timeclock data (e.g., sending MIDI messages, leaving room/time for message transmission -- should be delivered before the target beat, but after the beat prior to the target beat), e.g. at:
    • a given beat by absolute count
    • a given beat for a given measure
    • next beat
    • next nth beat of the next measure
    • next nth beat of the next nth measure

Add batch IDs

All messages in a give batch should get the same id. This will require a change to how messages are batched.

Set the BPM explicitly from LFE

Tasks:

  • Figure out how to get values of 30-300 BPM from MIDI CC to VCV Rack clocks
  • Write an LFE function that maps desired BPM value to the appropriate combination of MIDI CC values (see table and screenshot below, in the comments)
  • Add API support for setting the BPM
  • Remove all code that dynamically calculates the BPM

Part of #42

Add VCV modular synth support

Features / Tasks

  • Investigate interop to determine if any new MIDI CC messages need to be supported
  • Experiment with existing MIDI CC support to see if any VCV Rack-specific convenience functions / macros are warranted
  • Add the ability to send realtime messages to the Go midiserver (and thus to VCV Rack)
  • ut-proj/midiserver#26
  • #41
  • #42

Resourrces

VCV is a free, open source modular synthesis framework (Eurorack emulator):

Specific support: MIDI control of the synth. See the MIDI plugins for more details:

Original issue created here:

Add support for scales in keys

I.e,. transposing the MIDI conversion of the scales. This might simply entail adding another arity for um.scale:midi ...

Create new gen_servers in support of external MIDI clocks

This gen_server will be in charge of:

  • updating state according to an external clock source
  • a remote-callable API for setting and getting data related to an external clock source

Tasks:

  • Test eprc calls from LFE REPL (separate, non-undermidi node)
  • ut-proj/midiserver#26
  • Create new gen_server in undermidi/clock/ext.lfe for tracking clock ticks
    • Implement basic gen_server functions
    • add state for tracking clock counter and last-n times (timestamps for when ticks received
    • add functions for incrementing clock tick, total ticks
    • keep a queue of last N tickets and ensure that times for each tick are recorded
    • use times to calculate BPM (most recent, last-n, and for total queue size ... the last being useful for curve-fitting calculated BPM polynomial adjustment on different hardware)
  • Create new gen_server in undermidi/clock/ext/beats.lfe for song-specific features built on the clock tick gen_server's data
    • Implement basic gen_server functions
    • add ETS-based state-tracking for song name, start timestamp, time signature, stop timestamp
    • add functions for returning song name, start timestamp, time signature, current BPM (aliased to other gen_server function)
    • add functions for starting and stopping a song
    • add function for calculating current measure
  • Add new gen_servers to the supervisor

Follow-on work:

Resources:

Add beatracker

After looking at photos of Småland this morning, I became inspired and an explicit design for this long-standing wishlist item finally solidified in the old brain pan:

Infrastructure tasks:

Features:

Note that stopping playback on the beatracker and then resuming play will cause everything to be played over again, exactly as originally entered.

This design will be the long-sought union / convergence of live play (a la Extempore, SuperCollider, Overtone) and composition (choose your DAW or music notation software) ... essentially providing a very real REPL for musical composition and live-play/playback.

Allow users to easily provide custom scales

Right now, um:scales performs a lookup in the undertheory scales module. We should let users provide their own sequence of notes (in the form of, e.g., (1 3 |#4| 5 b7), etc.). To do things, we'll need to readjust some things and create some new functions:

  • rename midi to pitches
  • rename get to create
  • add a guard to pitches
    • if scale is an atom, convert
    • if scale is a list, don't do a lookup
  • update create to use new pitches

This need has arisen as a result of investigating implementation ideas for #16 -- chords are much more varied than scales and definitions are not consistent, so users will need to provide their own notes/forms even more there, than here with scales.

That being said, the majority of the logic will be shared between the two. So this change should take that info consideration:

  • what functionality will be shared?
  • move that out of um:scales and into um (or wherever else makes sense)
  • adjust um:scales as necessary

`make build` error

I don't immediately see why, though. I think I have all dependencies.

➜  undermidi git:(release/0.2.x) make build
>> Building Go examples ...
make[1]: Entering directory '/home/afa/Erlang/plekto/undermidi/priv/go/src/github.com/ut-proj/midiserver'
>> Building bin/midiserver ...
# github.com/ut-proj/midiserver/internal/util
internal/util/signals.go:17:9: undefined: signal.NotifyContext
make[1]: *** [Makefile:43: bin/midiserver] Error 2
make[1]: Leaving directory '/home/afa/Erlang/plekto/undermidi/priv/go/src/github.com/ut-proj/midiserver'
make: *** [Makefile:70: build-go] Error 2

Don't block when playing

Right now, when you play a series of notes with timings (timer:sleep) you block; it would be better to have this play in a spawned process ... that's going to take some work, though .. there's a good chance that #14 could solve this.

Add support for cycling functions indefinitely

In order to stop them at will, they'll need to be run by a controller / executor / supervision tree. Probably spawning dynamic children is all that's needed.

  • Update the supervision tree to support spawning children dynamically
  • Create a cyclic cc function for MIDI control
  • Add wrapper for stopping the cycles by killing the child process

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.