Cloned from Grissess on Github, Loose bundle of software to broadcast midi files to computers and make a computer organ
|
|
hace 8 años | |
|---|---|---|
| .gitignore | hace 9 años | |
| README.md | hace 10 años | |
| broadcast.py | hace 9 años | |
| client.c | hace 10 años | |
| client.py | hace 8 años | |
| drums.py | hace 9 años | |
| drums.tar.bz2 | hace 9 años | |
| make_patfile.sh | hace 9 años | |
| mkarduino.py | hace 10 años | |
| mkiv.py | hace 9 años | |
| packet.py | hace 9 años | |
| piano.py | hace 10 años | |
| shiv.py | hace 9 años | |
| voice.py | hace 10 años |
The ITL Chorus is a very simple, loosely bundled package for playing MIDI in real time over a network. Presently, it consists of three different frontends:
mkiv.py: Makes an *i*nter*v*al (.iv) file from a MIDI (usually .mid)
file. The interval file is an XML document (easily compressed) consisting of
the necessary information required to play back voices or streams such
that no notes overlap (and duration information is available).client.c: A bare-minimum C program designed to run on even the most spartan
Linux systems; it basically implements beep over UDP.client.py: A far-more-functional Python program with advanced options,
using the pyaudio API.broadcast.py: Accepts an interval file, assigns clients to streams, and
plays a piece in real time.In general, you would use the tooling in precisely this order; generate an
interval file with mkiv.py from a good MIDI performance (of your own acquiry
:), either compile and run ./client as root or run python client.py on all
the machines on a LAN that you would like to beep along, and then run
broadcast.py with the generated interval file on any machine also on that LAN
(potentially also one of the clients).
In my experience, the most annoying errors come about as the following:
client doesn't really check for any LAN, happily listening
on whatever interfaces it can find at the time. Many very basic installations
of Linux seem to not dhclient properly, even if the link is up, so you will
want to make sure that your ip information is set up how you like it before
running client.build-essential works.)Please submit an issue if something else seems off!
All the scripts here (except the C program) have a plethora of options, most
of which are documented both at the beginning of the source and if you simply
pass --help or -h to them. Feel free to experiment!
The .iv file format that is used extensively in communicating information is certainly not any standard that I am aware of, but it seems like a rather convenient standard for simple authorship. While I have no plans to write an IV editor at the moment, that may change; in the meantime, whosoever would like to do so should know the following about the IV files:
broadcast.py uses this for routing).time + dur not greater
than its next note. Additionally, all notes in such a stream should be
sorted by time. Breaking either of these standards is not an egregious violation,
and may prove to be interesting, but (at the moment) it will prevent broadcast.py
from working properly. In addition, it should be noted that the clients are
designed to overwrite one incoming note with the next, regardless of whether or
not this interrupts the duration of the previous one--this is how "live mode" and "silence" work.