Additive Synth Upgrade

Before, the synth was hardwired with a band-limited saw wave. I’ve removed this restriction by allowing users to pass a table filled with information about the harmonic spectra. For each overtone, the table stores three bits of information, in this order: frequency ratio, amplitude and phase. For example, the following two lists represent the data for a 3 tone band-limited saw wave and square wave:

1, 1, 0, 2, 0.5, 0, 3, 0.333, 0 ; saw
1, 1, 0, 3, 0.333, 0, 5, 0.2, 0 ; square

Typing all of this is tedious, so I went ahead and created a handful of GEN Instruments to create and fill tables automatically for the saw, square and triangle. I’ll do one for the buzz wave and one that mimics GEN10 down the road. Though my examples are harmonic in nature, the design also allows for inharmonic overtones.

I made one other upgrade, which technically isn’t an upgrade to the synth, and is probably more of a proof-in-concept. In the previous example, I use a table filled with noise for the EQ of the acoustic body. This works really well, though it lacks the resonant peaks and dips one would expect from a real instrument. I created a GEN Instrument, GEN_Multiply, that takes two tables, multiplies their content (with interpolation if necessary), and produces a new table. So now I can create a table with envelope-like shapes to simulate peaks and dips, and multiple that with a noise table, producing a resonant noise table.

Download: add_synth_upgrade.csd

u-p-g-r-a-y-e-d-d

Bowed String Additive Synth

About 12 years ago, someone told me that additive synthesis will never be practical. My initial reaction was, “we’ll see about that.” This person’s background was that of modular subtractive synths, and was quite knowledgeable. From that perspective, I could see their point. Who want’s to take the time to create complex envelopes for each individual harmonic? My mind has often wondered back to this incident.

Today, additive synths are becoming more common thanks to faster computers. Many of their UIs do help programmers with the large amounts of complexity additive brings to the table. And there are many useful and valid approaches, each with their own strengths and weaknesses.

Download: bowed_string.csd

My approach has been floating around my head on and off for about a decade. The first iteration was completed around 2002, and was shelved until recently. Today’s csd is a continuation of the second iteration of the design, which I had originally intended to use with Fragments (see here), but ran out of time. For the next couple of weeks, I plan on taking this instrument to its illogical conclusion (I have no idea what it’ll be like when it’s done.) When I am finished, I’ll write an in depth article for The Csound Journal on the final design.

The premise for my approach is to use f-tables as a shortcut for specifying and controlling additive synth data. In today’s example, the audio generator produces a 32 band-limited sawtooth wave. However, before the sine waves are generated with oscil, the synth data is run through two transfer functions, stored as f-tables. One transfer function changes the amplitudes of the harmonics, emulating the EQ of a virtual acoustic body. The other bends the frequencies, causing frequency distortions. Frequencies continue to be processed by the transfer functions, even as they are modulated, which I believe is key to convincing acoustic viability.

The reason why this sounds similar to a bowed stringed instrument is because the amplitude transfer function is filled with the right amount of bipolar noise. The truth is, I had no intention of creating a string-like sound. I was just toying with it and thought I’d try something drastic like using a table filled with noise. After the discovery, I spent considerable time tweaking the values trying to get it to sound a little bit more expressive.

I should warn you, there are some clear cases of aliasing occurring in today’s example. I think I know what’s causing it, but I’ll have to go back and run some tests to be certain. In the mean time, I hope you enjoy.

Fragments of a Bohlen-Pierce Composition (Pt 13)

If something terrible happens between now and tomorrow’s deadline, such as my secondary computer spontaneously combusting, I’m happy to say that it won’t get me down. As I have finally completed a version for which I’m more than satisfied with.

That said, there are many still many little things I want to fix up. I’ll tidy it up this evening. Listen to it in the early morning. Send it off to Dr. B. And then go see Alice in Wonderland as my personal reward. (I actually have no interest in seeing it, but they’ll be previewing the new TRON Legacy trailer.)

Download: fragments_13.csd

Fragments of a Bohlen-Pierce Composition (Pt 11)

The piece is due this Friday, and of course, that means my computer had to die yesterday.

*shakes fist at deadline gremlins*

So I lost 5 hours of composing time. The good news is that I have a backup computer. It runs a bit slower, but I can move forward.

I appended another fragment to my outline. This section is inspired by two sources. The first is Mozart’s Beethoven’s Moonlight Sonata. I’ve had this piece on my mind ever since playing the “Lost in Nightmares” expansion mission for Resident Evil 5. The second is Khachaturian’s Gayane Ballet Suite, though it’s influence is perhaps subtle.

Have you ever seen Connections? I’m about to make a few.

The Gayane Ballet Suite was used in the film 2001: a space odyssey. The author, Arthur C. Clarke, “was the first to propose geostationary communications satellites.” John Pierce, of the Bohlen-Pierce scale, “arrived at the (same) idea independently and may have been the first to discuss unmanned communications satellites. ” (source)

Also in 2001, we hear HAL sing the tune Daisy Bell as he is dying. The film’s director, Stanley Kubrick, was visiting with Pierce at Bell Labs to get a sense of what a telephone booth in space would look like. Pierce used this opportunity to show him the computer music program, which included a synthetic vocal arrangement of Daisy Bell by Max Mathews, the father of computer music. Here’s a video of Mathews telling the story; Dr. Richard Boulanger is also in it.

Stanley Kubrick passed away on March 7th of 1999. The first day of the Bohlen-Pierce conference starts on March 7th. I originally heard of Kubrick’s passing around the corner and down the street from where Monday night’s event takes place. I was at a gathering at Elaine Walker‘s apartment, who has been a composer of Bohlen-Pierce music for years, and is presenting both music and a lecture at the Symposium.

Download: fragments_11.csd

Fragments of a Bohlen-Pierce Composition (Pt 10)

I wrote an event capture utility that writes events generated by a MIDI keyboard to a text file.

Download: fragments_10.csd
Download: fragments_10_playback.csd

How to use it: Start fragment_10.csd, and play your MIDI keyboard. When you are done playing, press control-c, or whatever key combination stops the Csound process. This will have generated a file called fragments_10_captured.csd. Now run fragments_playback.csd.

It doesn’t work perfectly, as the amplitude envelope in the playback file is off. However, this utility fits my needs since I’ll be re-orchestrating the output for different instruments. Since I have a deadline, I’ll squash this bug later when I revisit this topic.

Fragments of a Bohlen-Pierce Composition (Pt 9)

The program notes and biographies for the for the Bohlen-Pierce Symposium are now posted; Here’s mine.

I’m currently blocking out the structure of the piece, and would like to take a moment to discuss what’s bouncing around the confines of my skull. From the program notes:

“This direction emulates the way in which a hacker approaches the challenge of dissecting a piece of software or electronic device.”

Second:

“There’s always a rhythm to the space between things. Pause, hold the thought, check the moment. Repeat. Wait. There it goes again. Another thought, another pause in the stream of conscious in another abstraction–the reader, the listener. Speak these words out loud, and the same logic applies–there’s always a rhythm to the space between things.” – Paul D. Miller (aka DJ Spooky, That Subliminal Kid), Sound Unbound

I believe there is a rhythm to computer code. The way it reads, the way the computer reads it, the way logical expressions are grouped, how it functions as a whole, how data is pumped in one side, translated, and then poured out the other side, etc.

Since I’ve adopted a hacker-like approach to the Bohlen-Pierce scale, I felt compelled to translate elements of coding into aspects of the composition. Each line of code is a statement. A grouping of related code is a statement. Each feeds off and into other statements. And there is a rhythm to be found in between all of them.

The title Fragments also implies multiple things. I have a collection of various musical statements and processes. I’m trying to figure out how to hack these individual ideas into single functioning work. I want the listener to be able to hear each fragment individually, while hearing them together as a functioning unit. This idea is a lot like code. Any single function or subroutine can be analyzed individually, ignorant of everything else. Though this same subroutine is still part of a larger functioning unit, the program. Am I making any sense?

What this all boils down to is that I want the piece to be perceived as discrete, yet having a natural flowing rhythm to it. This is what I’m trying to achieve. I’m now trying to establish that rhythm. I’m about half way through. And when I’m done, that’s when real fun starts.

Download: fragments_9.csd

Fragments of a Bohlen-Pierce Composition (Pt 8)

Since discovering my opening statement, I’ve been itching to place it within a musical context. I developed a rough outline of what the first minute of the piece may sound like, ending with a possible transition into the second part of the composition.

Download: fragments_8.csd

There is a lot of space in there, which will give me a lot of head room when I go back to this section to flesh it out and polish it up. Especially with spatial elements, like panning, reverbs and echos.

I need to bring up something else. Turns out that the chn opcodes are broken on some platforms, which is preventing people from not being able to render these csd files. Unfortunately, I don’t have time to go back and convert my effects routing to zak or similar system. So in the mean time, if you aren’t on OS X, you won’t be able render the csds. However, I’m told that the bug has been fixed in CVS, so these files should work in the next release of Csound. Sorry for the inconvenience.

Fragments of a Bohlen-Pierce Composition (Pt 6)

What this piece needs is a simple motif. Simple, but capable of making a strong impression from the get-go. Sounds like a no-brainer, right? After all, the concept of “the hook” is straight out of music writing 101.

Since most people have little to no experience with Bohlen-Pierce, myself included, the music can sound alien. A strong recurring motif that is established in the first few seconds of the piece may give the audience a sense of familiarity by the end, as opposed to a series of seemingly random frequencies.

Over the last few days, I’ve been spending my time in front of my MIDI keyboard, trying various phrases and chords, and listening to the results while letting the tonality of Bohlen-Pierce sink in. I had been flirting with the just intonation. I’m now of the mind to go with equal temperament. With just intonation, I had a tendency of writing melodies that were akin to badly tuned 12-tone music.

Here is the Bohlen-Pierce tuned MIDI synth I’ve been using for the last couple of days:

Download: fragments_6.csd

I’ve split the keyboard into two voices, where c-3 and c-5 are two octaves apart. There is a split somewhere in the middle.