I continue to be astonished by the complexity and rich feature set of the original DOS software the Polymeter project is based on, considering the harsh limitations it contended with: 16-bit pointers, chronic memory shortage (640K max), no GUI support from the OS (I had to write my own menu and window manager), and time-critical MIDI stuff running bare-metal as ISRs (Interrupt Service Routines) painstakingly hand-crafted around obscure details of a particular ISA MIDI card, the manufacture of which vanished without a trace years ago.... read more
Polymeter 0.0.05 is available for download and adds many new features, including velocity editing and controller tracks. Tracks now have a Type drop list, which can be set to note, controller, patch change, aftertouch (key or channel), or pitch bend.
The velocities pane lets you edit step values of any type, not just note velocities. It shows one bar per note, or one bar per step for track types other than note. Just left-click on a bar to change its height, or left-click and drag to edit multiple bars in a row. The bars can be fit to lines, triangle waves, and sine waves, using combinations of the Ctrl, Shift, and Alt keys while dragging the cursor. And you can edit multiple tracks at once of course.... read more
Polymeter reached a major milestone today: note velocity editing! The velocity pane is an optional addition to the step view. It's resizable via a splitter bar, and stays synchronized with the step view's scrolling and zoom. Multiple tracks can be edited at once, in which case their note velocities are merged. Various refinements are still in progress, e.g. a tool tip showing the current velocity, and fancy editing behaviors such as clamping velocities to a line segment or periodic function. The velocity editing pane can be reused to edit other values besides notes, e.g. controller values, and is thus a big step towards the next milestone, which is controller tracks. However controller tracks will require significant changes to the sequencer core, particularly for linear interpolation.
The initial alpha release of Polymeter is now available for download, at both SourceForge and GitHub. It's a fully functional MIDI step sequencer optimized for polymeter. Note however that this version is ALPHA software and many planned features are not yet implemented fully or at all. In particular, while this version is fine for drums or other percussive samples, it's less useful for melodic lines, due to its lack of the crucial "Legato" feature that ties consecutive steps together. Please check the Features list before requesting features, as the thing you want may already be planned.... read more
I got MIDI Thru working! No MIDI sequencer is complete without it. The input side was easy, I pretty much ripped it straight out of ChordEase.
The output side was tricky however, because you can't write events directly to a MIDI device that's been opened for synchronized streaming (as opposed to immediate output, as in ChordEase). Instead your callback function (which is being called at regular intervals by Windows) has to add the events to its next buffer, which it subsequently queues to the output device. My solution was to add a special input queue for "live" events. At the start of each callback, I check the live input queue, and if there are events in it, I dequeue them and add them to the start of my next MIDI buffer, before any events that may get added from the song's tracks. This is quite safe (provided a thread-safe queue is used) and it works pretty well. It does have some limitations though.... read more
After a day spent studying number theory, my Polymeter sequencer has something I always wanted: a "Time to Repeat" command! The command computes how long it would take for the selected tracks to repeat, in both beats and time (along with the greatest prime factor) and displays the results. I tried it on my test track that uses all prime meters less than 32 (except 23). "Only" 22,428 days. That's longer than I've been alive! That's some serious polymeter. During stress testing I made some combinations that would take trillions of years. Thomas Wilfred would be impressed. https://en.wikipedia.org/wiki/Thomas_Wilfred
Last night I got variable track length more fully implemented. It's now unlimited in the sequencer, but the UI only allows 256 steps, which is similar to Bongo's limit (384) and good enough for now. Unlimited steps in the UI will have to wait until the UI redesign that's coming next. Right now the UI is implemented as an array of track dialogs, but that's still no good. The step area needs to be implemented as a single window (a scrolling view), and the configuration area also needs to be implemented as a single window (a grid control). The two windows need to be children of a splitter window, with synchronized vertical scrolling. Probably! But this is where things start getting really hard.... read more
I just finished Polymeter's MIDI export. The export reuses the exact same code that's used for playback, eliminating parallel maintenance along with the utlra-nasty possibility of an export that differs subtly from what's heard during playback. Such behavior would evil and bad, and preventing it at all costs was one of the holy grails of this project.
DOS Bongo also shared the core event processing code between playback and export, though via a relatively crude C-style method. The new version can even export DURING playback, without disrupting playback at all, thanks to crafty pointer magic. I plan to release this version shortly so that people can take it out for a spin.... read more