Polychron aims to:
- Develop a system that allows for any musical meter (time signature) in MIDI composition, maintaining compatibility with standard MIDI playback systems
- Provide a flexible framework for creating and manipulating complex metrical structures, offering unrestricted polyphony and note granularity, without compromising timing accuracy.
Polychron is a MIDI composition system that breaks free from traditional MIDI limitations, particularly in the realm of time signatures (A.K.A. meters). The core innovation of Polychron lies in its ability to work with any musical meter through a process called "meter spoofing."
Because MIDI has been around since the 80's, one artifact is that it only allows standard meters like 4/4. (Some less common meters are allowed, but only if their denominator is a power of 2, like 2, 4, 8, 16, etc.)
Using the spoofMeter function allows for playing any meter (yes, even 420/69) within the constraints of MIDI. Here's how it works:
If the denominator is a power of 2 (standard MIDI meter), it returns the original meter with no changes. For non-standard denominators, it calculates the nearest power of 2 (either ceiling or floor). It then determines a tempo factor to compensate for the difference between the actual and spoofed meter.
This approach allows Polychron to represent and work with any meter while maintaining compatibility with standard MIDI playback systems. The result is a composition system that can explore previously inaccessible rhythmic territories within the MIDI framework.
Uses tonal and py_midicsv. We create our MIDI data in CSV format first for a nice human-readable version, which allows easier auditing and more direct data control.
To install tonal and create the CSV file, run the following (requires Node.js installed):
npm i tonal
node polychron.js
To install py_midicsv and create the MIDI file from the CSV, run the following (requires Python installed):
py -m pip install py_midicsv
py midi.py
You'll need a MIDI player with a soundfont installed to play MIDI files. One option is VLC player
Other MIDI players: https://soundfont-midi-player.en.softonic.com/download
https://github.com/jingkaimori/midieditor
Current implementation is a simple demo of random meters, scales, and chords at random divisions. Settings can be customized in config.js
. Timing markers for each unit can be found in the "Marker_t" entries of the CSV file.