Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
Notes on the Algorithm.txt


Elements of an abstract counterpoint - 

The practice of Counterpoint is - at its essence -  a process of evaluating the quality of an accented interval. The motivation behind an abstract counterpoint is to re-introduce complexity into popular idioms by freeing counterpoint from common-practice conventions. 

Counterpoint languishes within these conventions because the alternative tends to be framed as partial or total abandonment of both technique and convention. As European self-concept crumbled during the world wars of the twentieth century, new musical conventions arose as fundamental primitives (eg. rock, R&B. We see the music of the past as somehow irrelevant, but in crafting art music based on new primitives we can't apply the techique as its traditionally taught. Counterpoint was in large part the secret of classical music's fecundity, and yet seemed inaccessible to creators working within the new conventions. The result was a proliferation of alternative primitives, codified by popular markets, as self-expression, being unable to deeply explore a practice, so chose to move to or invent the next one.
What I seek is a counterpoint for contemporary conventions, e.g. a counterpoint for R&B melodies, a counterpoint for country melodies. A counterpoint that is rhythmically free. 

My first step toward this ideal is to treat contemporary melodic and harmonic conventions as modalities. In the process, I want to recover the idea of mode as distinct from scale. Rennaissance counterpoint is based on the medieval modes. They are not scales, in spite of the fact that for the past 100 years or so, they've been treated as alternative scales. Rather modes are sets of tendencies that limit what pitches are likely to follow a given pitch. In fact, medieval chant can be analyzed as being built from collections of melodic motives. A mode is distinguished by its collection of melodic fragments.	An analysis of medeival chant reveals these common fragments, which can then be abstracted into a set of rules for melodic tonal succession, which can then (and have, in fact, been) abstracted even further into a set of tones which is then arranged into a scale. With each abstraction some of the essential character of the mode is lost. The idea that the modes have distinguishing characteristics other than their pitch groups is acknowledged in Rennaissance counterpoint texts. Baroque counterpoint is sometimes taught in terms of major and minor modes as opposed to scales, but the melodic character of Baroque is in fact quite scalar 	as is much of common-practice melody, so there isn't a lot of insight to be gained from treating it modally.

Because common-practice dominance extended for nearly two centuries, there arose a pedogogical tendency to treat music as being essentially scalar in character, a tendency which has prevailed to the point where the notion of mode in music has been nearly forgotten, we find the melodic rules of Baroque counterpoint are treated more as universal absolutes instead of modal tendencies. 

Music after the common-practice period is based on new primitives and these are not scalar in character. However, absent analysis of recordings and transcriptions, it is not obvious that these primitives can be well-described by the notion of mode. Practitioners of these primitives rely on intuition based on immersion in a particular style as the main prerequisite for crafting authentic melodies. The subconscious or fully conscious appropriation of previous material that was successful in the popular music market is what leads to the library of melodic	fragments that constitute the mode. 
Melodies could be formed by stringing together these fragments. A contrapuntal texture can be formed by creating layers of similarly constructed material, beginning with a "cantus firmus", formed by purely melodic concerns, with subsequent melodic layers having the 
selection of fragments informed by harmonic concerns as well as melodic concerns. By melodic concerns I mean that the bridge between two fragments ie the ending notes of one and the beginning notes of the other form a well-known fragment. This is not the method I am using however.
My approach is to go one abstraction further, to the idea of rules of melodic tonal succession. The melodic fragments are analyzed to see what 	pitch classes typically follow other pitch classes. If pitch class b is frequently seen succeeding pitch class a, then we assign it a high probability within the modal rules. If pitch class b never is observed following pitch class a, then we give it a zero probability within the mode. 
The next step is to re-examine the concept of accent aka "strong" vs "weak" beats. Baroque counterpoint texts tend to limit the discussion of accent to metrical structures, ie the "1" count gets the most emphasis, the first subdivision of a beat gets the emphasis, etc. Rennaissance counterpoint treats accent rather vaguely, since the music of Palestrina, which is its main subject of study, is so slow and so layered as to obscure meter altogether. However, they all tend to agree that relative durations play a part in accent, ie that if a note has been preceded by one of shorter duration, it is accented. 

No text of counterpoint that I have encountered adapts the concept of accent to the syncopated music of the 20th century. If you examine that music, you find that dramatic changes in pitch, volume, and texture also contribute to accent, however they also tend to be applied to notes already having metrical and durational accents, so they seem to simply re-emphasize existing common practice notions. Where a note is weak metrically but strong durationally, it is always the durational strenghth that determines the accent. In fact, many of the strongest accents in syncopated music function as rhythmic anticipations of strong metrical accents. The accent is often emphasized even more by a note of extremely short duration	followed by a long rest, a "hole" in the rhythm. But again the rest adds to the duration of the previous note, so again, this is an example of relative duration determining accent.
Finally, we need to abandon the traditional concept of note-against-note "species" technique, which is really only applicable to strongly metrical music. In syncopated music the cantus firmus note can appear before and be held into the counterpoint note. A more situation is when the counterpoint is held over into the next cantus firmus. In classical practice, this sets up the possibility of a suspension. However in syncopated music, the cantus firmus may not last long enough for a suspension to take place. A modern abstract counterpoint has to treat a number of juxtapositions of counterpoint and cantus firmus which don't occur in classical music. 
Rules for smoothness and independence that exist across all the historic schools of counterpoint, into the common practice period, and which in fact persist today in textbooks on jazz improvisation. However these themselves aren't necessarily immutable. One could imagine types of counterpoint that follow completely different rules. In this first experiment, recognizing the need for more flexibility, but unable to come up with a robust abstraction for these rules, I fall back on the old modernist approach of giving the composer the ability to abandon them. There is some slight progress in that I also 
imagine the composer to prefer the violation of a rule at her will. So for example, it is now possible to compose a multivoice texture in which parallel fifths are the rule as opposed to the exception. Also the notions of consonance and dissonance can be changed, so it is now possible to compose a counterpoint in which minor seconds are considered consonant and major thirds as dissonant. 
So at present the idea of an abstract counterpoint juxtaposes "mutable" systems of modal pitch-succession and note-rhythms with a relatively "immutable" system of rules governing melodic and harmonic smoothness and melodic line independence. This effectively allows for contrapuntal textures to be composed from popular melodies, from jazz tonalities, from chromatic tone sets, from serial rows, and from microtonal/spectral frequency/pitches. The pitches of these melodies can be set to drum patterns from Burundi, to 90's jungle synthesizer phrasing, to purely mathematic rhythms.
One insight I obtained here is that counterpoint which follows all of the rules often isn't possible. The art of counterpoint is in choosing what rule shall be broken. The example of the great masters who regularly violated contrapuntal rules for the sake of musical expression comes to mind. 
What the Contrapuntal Texture Generator do?

The generator is a music box that generates a contrapuntal texture based on number and pitch-range of melodies, choice of melodic mode, 
choice of rhythm "mode", and the degree to which the user wishes to emphasize certain rules, possibly at the expense of others. 

The output can go directly to the default midi synthesizer on the computer (in which case it will sound like a piano) or it can be routed to a DAW or to a stand-alone audio generator. The output can be played back immediately or sent to a queue which can then be played back at a future time.
A contrapuntal texture isn't exactly music in that the pitch sequences don't repeat. Repetition and variation along with harmonic modulation are the key features of all baroque and common practice music. The generator will effectively spin out interweaving melodic lines as long as is specified and these, having some component of randomness, will probably not repeat although the rhythms of the melodies often will. The idea is that you generate a particularly "catchy" texture, which then can be subjected to variations/repetitions in order to form a piece of "real" music. The chord progression you hear is itself a melody, determined largely by the harmonic rhythm. 
How to use the Generator: 

Installation - 
The Generator is a self-contained jar file which is available with Windows msi and exe installers. The program will install in the user's AppData folder. I sort of hate this location but haven't figured out how to install in the "normal" ProgramFiles location. 

Generating, playing, saving a texture -  
When you launch the generator, the first thing to notice is the "Run" button. If you press it, you should see a progress report flash briefly, followed by a prompt to Play the texture you have just generated. If you press play, you should start hearing something resembling music and see the Player dialog. The Pause button will stop the music and allow you to Play the music from the point at which you paused it. The Stop button stops the music and rewinds to the beginning of the music. Once the music has finished playing, the Stop and Pause buttons won't have any effect. Close the Player dialog when you are finished listening. You are next prompted to save the texture as a midi file. If you click OK, you will go to a file save dialog. At this point, you should have created, played and saved a short contrapuntal texture. 
Basic  Tab Features:

Mode Module - Choose a mode module to determine the melodic character of the texture. There are 5 mode modules built into this version of the generator. Lydian (the Gregorian chant mode, a sort of test of compliance with Renaissance counterpoint), Blues (an example of contemporary "modality"), Chromatic Tonic ("jazz" tonality, with typical resolutions of tensions), and finally Atonal (no modal consideration) and Atonal Repeat Prefer (which encourages repetition). The mode module determines what notes will be used in a melody and also has some influence on what direction the melody will go in. 

Rhythm Module - Choose a Rhythm module to determine the rhythmic character of the texture. The rhythm models included here are all somewhat "funky" in order that various different time juxtapositions of counterpoint note and cantus firmus can be tested. Note that the harmonic rhythm of the texture (ie the chord progression) is bound into the rhythm module you select. In this version of the generator the chord progressions tend to be rather busy and rapid, again for the sake of testing. 

Tempo -  Here you define the piece tempo in beats per minute. Note that extreme slow and fast tempos won't be allowed. 

Length - Here you define the length of the piece in bars. keep in mind though that a "bar" can vary in length during a piece, depending on the Rhythm Module you have chosen. With a very abstract rhtythm module the concept of bar may lose meaning and you may have to tweak this setting to get the piece length you want. 

Consonances - Here you define what intervals sound "good" ie not dissonant. The traditional consonances have been selected for you, 
but you can expand or reduce the set. Interesting musical textures may result.
Perfect Consonances - These are traditionally the 5th and Octave, but these checkboxes allow you to define other intervals as perfect consonances. You must define at least 1 perfect consonance, as many of the harmonic rules relate to how perfect consonances are handled. 
Out to Midi Yoke - If this radio button is clicked, midi is not sent to the player but to a virtual midi routing port. Midi Yoke and LoopMidi are supported. MidiYoke is older and will not run on 64-bit systems. After installing either a virtual midi routing port, your DAW or standalone synth/sampler should see it as a Midi Input source that you can select. 

MidiYoke can be found at:

LoopMidi can be found at:

Queue Mode - If this button is selected, the Generator saves the pattern to a queue. You are then prompted to play and/or save the queue. This allows you to create a playlist of different textures in the generator. Saving a queue is somewhat problematic, as the jfugue library doesn't support very well the merging of patterns with different voices into a single pattern. When you save a queue, it will save each pattern as a separate midi file in the directory you are prompted for. Once you have saved a queue it is erased. 
Voices Tab:

Voices - The Generator distinguishes between 5 voice ranges: Bass, Tenor, Alto, Soprano, Ultra-Soprano. These were designed to emulate the pitch ranges of their vocal music counterparts. In practice, I find the voice ranges of Tenor, Alto, and Soprano to be lower than normal. A future version of the application will investigate this. You can generate a texture of up to 5 voices. These voices can be in any range. 

Dissonances lighter across distance -  As the distance between two dissonant pitches increases, the ear is less likely to experience the pitches as dissonant. Checking this box will have the Generator take this principle into account, and it will not decrement a dissonant interval if its pitches are more than 2 octaves apart. 
Harmonic Rule Violation Severity Tab:

The generator works by scoring pitches. The best pitch choice has the highest score. On this screen you control how badly a pitch choice is scored if it violates a particular rule. The default is that all violations are equally weighted. By moving the slider you can make a particular rule violation more onerous than the others, thereby making it more likely that the rule will be adhered to. The idea is to move the sliders further to the right for the rules you care about most. If you move the slider to one notch above OK you zero-weight the violation. Move it allthe way to OK and the violation becomes the rule and is slightly positively weighted. 
Melodic Rule Violation Severity Tab: This operates the same as the Harmonic Rule Violation Severity Tab except that melodic rules are now weighted. 
You can’t perform that action at this time.