Wednesday, March 22, 2023

Method Ringing changed my life!

In the 21st century, method ringing isn’t just for bells anymore. By virtualizing the bells, we avoid tempo limits that physical bells would otherwise impose, and more importantly, we’re no longer obliged to use a fixed palette of notes. “Ring in the Odd” uses the seven tones of the harmonic minor scale, with method ringing determining the order in which they're played. However the range of scale tones used is periodically varied by transposing notes up or down an octave. Specifically the notes are clamped to a movable one-octave range, the position of which is controlled by a set of polymeter loops (in 5 and 70). This is accomplished using a feature of the Polymeter MIDI Sequencer called Range Modulation.

The ringing method used here is an ancient one named Plain Bob, and it yields 84 permutations before returning to rounds. A full extent for seven bells would entail 5040 permutations (seven factorial), but the shorter course provides an identifiable repeating structure, around which the modal and bass changes are organized. Method ringing produces stimulating reversals of melodic direction, similar to turnarounds in jazz. The subtleties of the turnarounds become increasingly apparent during the dramatic ritardando towards the end of this composition.

"Ring in the Odd" is from my album “Indirect Methods,” which was released on Kevorkian Records in December 2022. The visual was generated using a visualizer called Piano VFX.

Here are the courses of Plain Bob for seven bells.

And the album “Indirect Methods” is HERE.

And here is Piano VFX.

Sunday, March 19, 2023

Polymeter instructional video: Forgive Yourself

For years it's been on my "to do" list to make instructional videos for the Polymeter MIDI Sequencer, and after some prodding from Yoyaku, I finally made one. This video shows me setting up a bass line, using note modulation and position modulation. It's short, so there are countless things it doesn't cover, but it's a start. The track in question is "Forgive Yourself" which I made in collaboration with André Baum. I will try to find time to make more videos, and better demo files too. Meanwhile there's a slide show that may be helpful, the sequencer is HERE, and the track is HERE.

Monday, December 26, 2022

Version 1.0.12 of Polymeter lets you specify step durations as fractions

Version 1.0.12 of Polymeter is released today. One big change is that in the track view, the step duration (AKA Quant) can now be entered as a fraction, instead of in ticks. An option was also added to display quants as fractions, and show a drop-down list of common quants during editing. Please download the new version HERE. The quant fractions are visible in this screenshot.

If the new "Show Quant as Fraction" option is true, quants are shown as fractions of a whole note; otherwise, quants are shown in ticks. For example using the default timebase of 120, a quant of 120 is shown as 1/4 (a quarter note), 60 is shown as 1/8, and so on. If you're using common quants, fractions are easier to work with than ticks, because the numbers are smaller and the application does the tick arithmetic for you. You can always enter a quant as a fraction, regardless of this option; this option only controls how quants are shown.

Some quants may still be shown in ticks even when this option is enabled. If a quant can be converted to a fraction having a denominator that's either a power of two, or three times a power of two, and the denominator is reasonably small, the quant is shown as a fraction, otherwise it's shown in ticks. For example you may enter the fraction 1/5, but it will be shown in ticks, because the denominator is non-conforming.

If this option is enabled when you edit a quant in the track grid, a dropdown list containing common quant fractions is displayed next to the edit box. To select a fraction from the list, either left-click it, or use the up and down arrow keys to scroll to the desired fraction, and then end the edit. If the desired fraction isn't in the list, type the fraction in the edit box, as two integers separated by a slash. You can alternatively type a single integer, in which case it's interpreted as a value in ticks. Fractions are reduced automatically, for example if you type 6/8 it will be shown as 3/4. If a given fraction can't be exactly converted to ticks, the closest value is substituted.

Friday, September 16, 2022

Heptatonic alterations

Back in February I posted about granular modulation. Since then I have developed a more general method for enumerating the possible alterations of common heptatonic scales. The results are presented in a series of tables. The first table gives the options for altering a single scale tone, the second table gives the options for altering two scale tones, and so on, up to the limit of six alterations. Only four scales are considered (major, melodic minor, harmonic major, harmonic minor) for reasons that are explained in the original article. The tables are HERE.

Sunday, July 31, 2022

Polymeter MIDI Sequencer / Command Line

I've created a command line fork of the Polymeter MIDI Sequencer, with all user interface code removed. This Visual Studio 2012 project builds a Windows command line application which opens and plays a Polymeter (.plm) document. The application can also export the document to a standard MIDI file. Removing the user interface greatly reduces the number of lines of code, which could facilitate porting the sequencer to other platforms. Be advised that this project still depends on MFC, and on the Windows API, and particularly on the MIDI streams API. The MFC dependencies include CArray, CMap, CString, CFile, and CStdioFile, and while these could in theory be replaced with standard library classes, this is a task best suited to a standard library expert, which I'm surely not. The repository is HERE.

Wednesday, March 30, 2022

Demons In My Head

My first vivid memory of NCP [No Commercial Potential, a radio program at WZBC 90.3 in Boston] is of hearing the soundtrack and dialogue of “Apocalypse Now” on my car radio while driving on Storrow Drive at night. I remember being struck by how much more spooky and atmospheric the dialogue was in isolation, without the film’s visuals. I started tuning in more regularly and became more aware of sound collage as a specific genre. I was making experimental music in the late 1980s, and playing guitar and singing in a couple of psychedelic hardcore bands (Iron Kilbasa, Oracles). I vaguely remember Oracles playing a live show at ZBC. Digitally delayed screaming and feedback solos were already routine features of my life. NCP acted like a seed, crystallizing disparate threads of my life into a more coherent whole.

In 1993, Suzan Baltozer was curating an art show called Angels and Demons at U. Mass Boston, and commissioned me to make a soundtrack for it. The result was a 40-minute sound collage called “Demons In My Head.” I had recently acquired a portable DAT recorder and a small stereo microphone, and busied myself exploring the soundscapes of my hometown.

The opening sequence results from me standing casually inside the I-90 tunnel under Massachusetts Avenue, with my microphone pointed towards the oncoming traffic. Such behavior would be almost unthinkable today. I reached out to many Boston area factories and some of them actually responded. By far the best was the Necco candy factory. They had astonishingly complex machines that looked like they’d been invented in the 19th century. The noise was deafening, but beautiful too. The machine that writes cute messages on candy made an especially intriguing sound. I also sampled the New Balance factory, and the gigantic printing presses of the Boston Globe, along with many public spaces such as the Harvard Square Red Line station and a carnival held near Kendall Square, but most of my samples came from around the house: washing machine, sink, water cooler, furnace, oil tank, and of course the toilet.

The sound collage was scripted using a technique I borrowed from David Lynch. I wrote the name of each sample along with a brief description on an index card. The cards were then arranged on the floor, so that their order could be changed easily. This was necessary because the sounds would be assembled on eight track quarter-inch reel-to-reel tape, with no possibility of changing the order afterwards. The index cards could also be arranged into multiple rows, making it easier to conceptualize the overlapping of sounds with each other, or with musical interludes.

I was so pleased with the result that I had it pressed as a CD, my very first musical release. At some point I got invited to play part of the CD on Andrew’s show. I’m sorry I don’t remember his last name, but he was infamous and later got banned from the station. I remember him referring to the Boston rush-hour traffic as a “sea of miserable faces.” Around that time I also put a copy of the CD in the mailbox of every NCP DJ. The results were mixed, but one DJ who really appreciated it was Gary Geiserman. I gather he got a lot of mileage out of that toilet flush. He later invited me onto his show, New Metaphysics. Gary’s inventive mashups of sounds from his suitcases full of cassette tapes influenced me profoundly, so much so that I subsequently wrote a software program (called Mixere) whose only purpose was to emulate his methods in the digital domain. But that’s another story for another day.

In case you weren't one of the lucky recipients of "Demons In My Head," or your copy wore out from overuse, you can download it in its original 16-bit glory from archive.org.

Monday, February 21, 2022

Why I'm not porting Polymeter

Milkii Brewster on GitHub asks "Linux version? Plugin version? Possibly maybe in the future?" and here's my answer:

The Polymeter source currently consists of 47,100 lines of C++ code. Of that, 80% is UI. How do I know that? To facilitate automated testing, I created a command line version of Polymeter, which can open and play a .PLM (Polymeter) document, and optionally export it to a standard MIDI file. After all of the UI is eliminated, 9,447 lines of code remain, and if you were planning to port the project, that would be the right place to start. The UI code is so dependent on MFC (Microsoft Foundation Classes) that it would almost certainly be easier to throw it away and start from scratch.

The sequencer core also depends on MFC, though far less so: it only depends on CString and the CArray and CMap container classes. It’s on my to-do list to make a fork of the command line version that uses the standard C++ library only. That means creating wrappers that emulate the interfaces of CString, CArray, and CMap, and that’s a much bigger job than it sounds. You might think someone would have already done that work, and perhaps they have, but if so they didn’t advertise it very well.

Even supposing those wrappers already existed and worked reliably, my application still depends on the Windows API. In particular, the sequencer is designed around the MIDI Stream API. Equivalent APIs may exist in Linux or MacOS, but even seemingly small differences between those hypothetical APIs and the Windows API could present huge obstacles. I surmise that it’s possible, because my program works correctly under Wine. I’ve never studied the Wine MIDI Stream code, but I wouldn’t be surprised to learn that it’s messy. It’s solving a hard problem that involves multithreading and device drivers.

But these are just technical issues. I’ve done plenty of porting, for example during my professional career I ported software from Windows to embedded processors, so I have a good idea what’s involved. The real issue isn’t technical, it’s temporal. I’m old! I’ve been working on the modern (Windows) version of this project for three years already, and I started the original version in 1998 under MS-DOS. I probably don’t have enough time left in my life to learn UI programming for MacOS or Linux or WxWidgets or Qt, certainly not at the same level of expertise I already have with Windows and MFC.

I didn’t write a polymeter sequencer out of curiosity, I did so because I wanted to compose in complex polymeter. I had hoped to avoid spending so much time writing software. I tried many commercial products before undertaking the Windows version of Polymeter, but sadly none of them had significant support for complex polymeter, and certainly not for polymeter modulation, many types of which I have—as far as I know—invented. I prefer to spend my remaining years actually using my sequencer, which I’ve paid so dearly for, to compose novel and aesthetically pleasing music. Other than composing persuasive examples of complex polymeter, probably the best use of my time would be to write a paper about all this. That’s also on my to-do list.

But even if I had another life to lead, why would I spend it on porting when perfectly good solutions already exist? There’s no significant obstacle to you or anyone else running Polymeter. You could simply obtain a Windows computer. It needn’t be anything fancy. A used PC would set you back a few hundred bucks, surely insignificant compared to thousands of hours of development time. Or you could use PlayOnMac or Crossover or Wine itself to run Polymeter under Linux or MacOS. Sure there are a few issues running in Wine, but 99% of the program works fine. Or you could run a VM, or do dual boot. So in short, the answer is, are you volunteering to port the project? If so, great. Otherwise, it is what it is.

Correct offset modulation for non-modulator tracks

In previous versions offset modulation was signed for modulators and unsigned for non-modulators, because the latter case was implemented v...