Skip to content

Polychron MIDI patch enables inclusivity of diverse and marginalized time signatures. Take back time from the establishment chronophobes. Other dynamics enhancements include: unrestricted polyphony, ultra-fine note granularity, custom note scaling and randomization, (and more!), all while maintaining accurate adherence to an absolute time grid.

Notifications You must be signed in to change notification settings

PolychronMidi/Polychron

Repository files navigation

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'll need a MIDI player with a soundfont installed to play MIDI files. Standard midi players will likely have playback issues due to data overload, the following have been tested to work:

Soundfont MIDI Player

MIDI Editor

You can convert MIDI files to MP3, WAV, or FLAC with:

Virtual MIDI Synth

LibreOffice is a good program for CSV files.

Here's a list of music related repos I've saved for inspiration.

About

Polychron MIDI patch enables inclusivity of diverse and marginalized time signatures. Take back time from the establishment chronophobes. Other dynamics enhancements include: unrestricted polyphony, ultra-fine note granularity, custom note scaling and randomization, (and more!), all while maintaining accurate adherence to an absolute time grid.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published