Polychron aims to:
- Develop a system that allows for any musical meter (time signature) in MIDI composition, while still 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.
Current implementation is a relatively simple (although impossible for any human to play) demo of (weighted) random, scales, chords, & modes played at random rhythms, divisions & meters. Tuning to 432 hz with binaural beat effects in the alpha range (8-12hz) have been added, plus random left / right balance variation (must use headphones for binaural effect).
Some settings can be customized in sheet.js
. Timing log markers for each unit can be found in the "marker_t" entries of the CSV file. Log level can be changed in sheet.js
under LOG, from the default 'measure' value to 'all', 'none', or comma-separated unit names. (If you play the MIDI file with Soundfont MIDI Player, you can view unit log markers in realtime by clicking the button on the left for 'MIDI text'.)
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 midiSync
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 (MIDI compatible meter), it returns the original meter with no changes. For denominators that aren't MIDI compatible, it calculates the nearest power of 2. It then determines adjustment factors, used to sync the measure (bar) durations of the actual played meter and the spoofed MIDI compatible 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 my own custom fork of py_midicsv, called CSV Maestro. 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 (spreadsheet) file, run the following (requires Node.js installed):
npm i tonal
node polychron.js
To create the MIDI file from the CSV, run the following (requires Python installed):
py c2m.py
You can convert MIDI files to MP3, WAV, or FLAC with:
LibreOffice is a good program for CSV files.
Here's a list of music related repos I've saved for inspiration.