Category Archives: Compositions

Seq Octet – for electronic ensemble(2023)

Performance by Electronic Music Ensemble of Wayne State (10/25/2023)

Download SeqOctet Logic File and Score

Preparation

  • Gather eight performers and eight computers with Logic Pro.  It is possible to perform the piece with other DAWs or synths as long as they can make MIDI loops and sequences.
  • Download SeqOctet.logicx. Open the file in Logic Pro X (version 10.7 or higher). 
  • Assign one performer to one of the tracks (Arp1, Arp2, Arp3, Arp4, Pad1, Pad2, Drum1, Drum2). One performer should not play all tracks. If there are fewer than eight performers, some performers can play more than one track.

Notation

  • Triangle noteheads: Improvise the sequence patterns. The number of notes per stem indicates the maximum number of notes per quarter note.
  • Rectangle noteheads: Make the sequence pattern similar to the shape of the notation.
  • Fermata: Continue improvising until the conductor’s cue.
  • Make a gradual, well-paced change when moving from one section to another. Do not make a sudden pattern change. The notation indicates the ideal shape/pattern each part should achieve in 30-60 seconds. 
  • 50% and 100% in sections 8 and 9: Improvise with 50% or 100% of all available notes in the sequencer.
  • Sections 10-13: End the piece by gradually eliminating notes in the sequencer. In section 12, all performers should play one note per measure.

Performance Instruction

  • Designate a conductor who can give a cue. The conductor decides the length of each section. Section 9 should be relatively long.
  • At the beginning, performers press the play button in their assigned track’s loop (the yellow square in the live loop grid). Then, they improvise the sequence pattern according to the score. 
  • Aim for a constant change. Improvise with notes. Improvise with effects and plugins. But respect the number of notes per measure.

Elegy No. 2 – live at SPLICE Institute

I performed Elegy No.2, written in 2018 for violin and computer, with melodica at the SPLICE Inistute 2023. It is not a happy song, but I share what I can express only with music. Sarah Plum recorded the original version beautifully, but I have been playing the song as my solo shows since COVID.

If you own a melodica and want to play this, the score and SuperCollider file are available HERE. You don’t need to know how to use SuperCollider. The instruction to run the code is here. Please use the score as a guideline, and feel free to improvise.

847 Twins – Brief Analysis

The production of 847 Twins, the title track in the album Fan Art, is documented in four sections. The first section, Program, is a one-paragraph description of the music written for a concert booklet or album promotion. I share information and thoughts that may help listeners enjoy the music. The second section, Form, is for the creators who want to learn how I used electronic sounds in composition. The third section, Code, is for the technologists who want to learn how I designed the piece in SuperCollider, a code-based audio app. Links to the code are available here. The last part, Anecdote, has extra narrative relevant to 847 Twins but is optional to enjoy the piece.

If preferred, read this article in PDF format.

Program

847 Twins is a two-movement piece based on harmonic progressions of Prelude & Fugue in C Minor by J.S. Bach. An electronic remake of Bach is a well-known practice pioneered by Wendy Carlos and Pierre Schaeffer (Switched-On Bach & Bilude). I learned so much from reading and listening to their works. J.S. Bach is also my hero composer. Therefore, it seemed appropriate to dedicate a song to my musical cornerstones in an album about fandom.

Listen to the tracks linked below before reading the next sections.

The tracks are available on other major platforms at  https://noremixes.com/nore048/

Form

Mvt I. Pluck

Pluck and Blip, the two movements of 847 Twins, algorithms written in SuperCollider use the harmonic progression of the Prelude in BWV 847. The downloadable code, 847_Pluck.scd, generates randomized voicing patterns played by a guitar-like synth. Below is a step-by-step explanation of how the composition process. 

  1. Design an electronic string instrument. Each note of this instrument is detuned at a different ratio every time the string is “plucked.” The note’s duration, dynamic, string stiffness, and pan position also vary randomly. 
  2. Using the instrument in Step 1, strum a chord with notes at a measure in BWV 847. Unlike a guitar, a strum of a chord can have multiple pan, accents, and note durations due to the randomization in Step 1.
  3. Each measure of BWV 847 is played four times before advancing to the next measure.
  4. Add a bass part with gradually increasing loudness. It plays the lowest note in the corresponding measure. 
  5. Add the intro and the outro for a better form. They are not quoted from BWV 847.

In short, the first movement of 847 Twins is a reinterpretation of BWV 847 featuring an imaginary string instrument and a synth bass. I loved how Bach created exciting music with a predictable rhythmic pattern. The key was harmony and voicings. I wanted to emphasize that aspect with an additional layer of dynamics articulations in Pluck. The added bass line, which imitates the “left hand” of basso continuo, fills in the low-frequency spectrum of the piece. The bass part is best experienced with a headphone or a subwoofer. 

Mvt II. Blip

The first movement lacked elements of counterpoint, so I tried to make an electronic polyphony in the second movement. In Blip, each measure has 3-6 parts playing different phrases derived from a measure in BWV 847. The phrase shape, the number of voices, and articulation are determined randomly at every measure and create a disjunct yet relative form. Schaeffer’s Bilude explores this idea by combining piano performance and recorded sounds.   

Below is my process of creating a random phrase generator. Please run 847_Blip.scd to hear the piece.

  1. Create a list of pitch sets by reducing repeating notes in each measure of BVW 847.
  2. Make three different synth sounds.
  3. Make a phrase generator that uses the list in Step 1 and synths from Step 2. The instrument choices, phrase length, note subdivisions, and articulations are randomized. The SuperCollider code also has the option to generate a rhythmic variation (i.e., insert rest instead of a note). 
  4. Make a polyphony generator that spawns the phrase generator described in Step 3. The number of polyphonic voices and their octave transpositions are random. 
  5. Play and record Step 4 twice. Then, import the tracks to a DAW. Insert a reverb plugin on one track. The reverb should be 100% wet. 
explanation of analysis
explanation of analysis

The algorithm described above creates different timbres, polyphonic patterns, and the number of voicings at every measure. Furthermore, every rendition of the SuperCollider code makes a unique version of Blip. One measure can be a duet of two-note phrases, and the following measure can be an octet of eight phrases played in a four-octave range. The room sound created by the DAW reverb plugin doesn’t reflect the source, but it sounds similar enough to be heard as part of a whole. 

Code

Mvt I. Pluck

The SuperCollider file for Pluck consists of seven parts. Please download and use 847_Pluck_Analysis.scd to hear and modify each part. Make sure to run the line s.options.memSize=8192*16 to allocate enough memory. 

  • SynthDefs: SynthDef(“Gtr”) uses a Karplus-Strong physical model with controllable pan, frequency, stiffness, amplitude, and duration. SynthDef(“Bass”) makes a sinusoid tone with a percussive amplitude envelope. The UGen Lag.kr smoothens the sharp transient of the amplitude envelope. 
  • ~onenote: this function uses two SynthDef(“Gtr”) to create a detuned note. The amount of detuning is randomized along with other parameters of the SynthDef.
  • ~stroke: this function creates instances of ~onenote with pitches specified in the ~chords array.  ~chords is a collection of all the notes in the Bach Prelude, categorized and indexed by measure number. The order of the notes in a measure is random.  ~stroke plays the chord in sequence or reverse to simulate a guitar’s up and down stroke motions. 
  • ~strums: this function continuously triggers ~stroke. The global variable ~pulse determines the tempo. ~strumsend function is used once for the ending. 
  • ~clock: this function changes the chord progression at time intervals set by the global variable ~mdur. It also changes the parameters of ~strums by altering the values of global variables ~mm~accent~volume~notedur, and ~stiff. Note that both ~strums and ~clock functions must run simultaneously for a correct chord progression. 
  • ~bassline: this function plays SynthDef(“Bass”) a few seconds after the start of the piece. It uses the if condition to change the rhythmic pattern. The line pitch=~chords.at(count).sort.at(0) picks the lowest note of each measure as a bass note.
  • SystemClock: this scheduler syncs ~strums, ~clock, and ~bassline to play a version of Pluck. Every rendition of SystemClock will make a new variation of the track.    

Mvt II. Blip

The SuperCollider file for Blip consists of four interconnected parts. Please download and run 847_Blip_Analysis.scd to hear each part.

  • SynthDefs: The three SynthDefs, PBeepTBeep, and SBeep, are all slightly detuned percussive instruments featuring a classic oscillator waveform, such as sine, triangle, and pulsewidth. 
  • ~phrase: this function creates a short melodic pattern based on pitch sets received from global variable ~arp. It controls which SynthDef to use, amplitude, phrase length, note duration, and transposition. The last two arguments activate or deactivate that random rhythm generation and arpeggio pattern variation.  
  • ~section: this function duplicates ~phrase. The number of ~phrase and octave transpositions are randomized. The function also makes further variations on amplitude, note duration, and panning.
  • The Routine in the last section uses the ~piece array as a cue list with details on when and how to trigger the ~section. The array ~chords is a list of all the notes in corresponding measures of the Bach Prelude. The Routine also sends a changing pitch set from ~chords to ~phrase via the global variable ~arp.

Anecdote

847 Twins does not use the Adagio section of the Prelude and Fugue. When composing the first movement, I could not transition from a constant 16th-note drive to a free and improvisational ending. I tried to address this incompleteness by writing a complementary movement, Blip, but it did not work out. I made a satisfying solution six months after completing 847 Twins by incorporating an instrument I could improvise aptly and freely. Nim6tet, the sixth track in Fan Art, has six layers of no-input mixer improvisation guided by the chord progressions of the Adagio section. It shamelessly shows off no-input mixer sounds I can not create with other instruments. 

It took many attempts in the period of 1.5 years to finish three tracks about the first half of BWV847. The electronic interpretation of the Fugue part is a puzzle yet to be solved.

More Analysis and Tutorials

Updated on 4/13/2023

Distant Yet Audible

Distant Yet Audible, Commissioned and Premiered by Sarah Plum, VTNMT Festival, December 7, 2022

Link to Score and Performance Audio Files

Hardware & Software Needed

  • A robot vacuum with remote control: the composer used Eufy Robovac 11S
  • Bluetooth speaker: a light but loud model that can go on top of the robot vacuum
  • Audio player app on a phone or a computer: must have shuffle and Bluetooth function
  • A stage with minimum obstacles for the robot vacuum

Performers needed

  • Violinist: on stage along with the robot vacuum
  • Tech operator: controls the robot vacuum and audio player off stage

Hardware Preparation

  1. Pair the Bluetooth speaker and the audio player
  2. Attach the Bluetooth speaker on top of the robot vacuum. Secure it with tape
  3. Download all audio files (mp3) from https://joowonpark.net/distantyetaudible 
  4. Put the audio files into a playlist in the music player app
  5. Turn on the Shuffle mode to randomize the playback order of the files
  6. Place the robot vacuum and its charger on the stage

Score example and explanation 

Cue #

Low Energy / Slow / QuietHigh Energy / Fast / Loud
  • In each cue, the violinist chooses a phrase from 4-6 options. If the sound emitted from the robot vacuum seems to be in the low energy/slow/quiet category, choose a phrase from the left column. Choose a phrase from the right column if the vacuum sound fits the high energy/fast/loud category.
  • The following determines the cue duration.
    • Duration of the audio file. Go to the next cue if a new audio file plays. 
    • Time for the vacuum to take a turn. If the vacuum changes its direction, go to the next cue.
    • Violinist can signal the tech operator to go to the next cue
  • The regular bar line in the notation indicates the duration of the cue. If a cue lasts 30 seconds, play the phrase between the regular bar line for approximately 30 seconds
  • The repeat bar line in the notation indicates that the phrase should be repeated until the next cue.
  • Improvise the pitch and rhythm according to the note shapes and positions
    • Notes within the bar line: play mid-range notes
    • Notes above the bar line: play high-range notes
    • Notes below the bar line: play low-range notes
    • Note durations: interpret according to the current cue
      • Whole notes and half notes: very slow and slow 
      • Quarter notes: not fast nor slow 
      • Eighth notes: fast 
    • Glissando: notated as a  line connecting two notes
    • Rectangular note heads: play airy, noise-like yet-pitched tone
    • X note heads: mute strings

Performance Instruction for the Tech Operator

  • The Tech operator’s main job is to cue the robot vacuum and the audio player.
  • If the audio player plays the next track, go to the next cue by changing the vacuum’s direction 
  • If the vacuum turns to a different direction before the end of the audio file, go to the next cue by skipping to the next audio file on the audio player.
  • At the performer’s signal to go to the next cue, change the direction of the vacuum and skip to the next audio file.
  • Note that the beginning of the piece (cue #0) is a vacuum solo. The audio file starts to play at cue #1
  • Note the specific sequence of turning off the vacuum and the audio player at cues #28-30 

Contact Joo Won Park for questions or inquiries (https://www.facebook.com/joowonmusic/ or https://joowonpark.net/)