Statistical Feedback


Presenting statistical feedback at the 2011 Ostrava Days Institute. Credit: Ostrava Center for New Music — Martin Popelar.

Overview

Statistical Feedback is the name I use for a decision-making method which actively promotes balance among resources. This method is heuristic rather than algorithmic — a distinction I explain further in my 1992 article, “Quantifying Musical Merit”. It operates on a fair-share principle, that is, the resources falling most behind their fair share of usage receive first consideration going forward.

The trail of discovery that led me to statistical feedback is recounted in a 1990 Perspectives of New Music article, “Statistics and Compositional Balance”. That article describes what I now call the special method, which chooses among single items. Subsequently there evolved a general method, which employed the minimax principle to select among groups of items. The general method was originally described in “Quantifying Musical Merit”. The present demonstration applet employs this general method. There is also a third method called the balanced-bit generator; this third method is demonstrated elsewhere on this site.

The graphic demonstration described here was first presented in a non-web implementation at the Ostrava New Music Days Institute in August, 2011. The applet version posted on this site in 2013 included the three original demonstration examples plus two new offerings. These were provided as downloadable XML files which could be run using the applet. The applet also provided a graphical editor, allowing you to design scenarios of your own. (For more details, see the Instructions page.) Since the powers that be on the internet have now abandoned applet technology, the present (2017) update of this page offers MP4 animations of the selection process and MP3 sound examples of generated results. The latter were converted from applet-generated MIDI files at www.online-convert.com.

The graphical editor instructions expose four component types: Chromas, Sounds, Chords, and Events. Each Chord references one or more Sounds, and each Sound references a single Chroma. (My usage of the word “chroma” here follows that of James Tenney in Meta+Hodos.) The collection of Events comprises a sequence, where the duration of one Event determines the starting time of the succeeding Event. The applet animates the process of selecting a Chord for each Event.

Expressed in the jargon of my production framework,

Four of the five examples described below promote balance directly between Sounds, and this is accomplished by creating one-to-one associations between Sounds and Chromas. However in Example #5 the Sounds stand for pitches while the Chromas stand for scale degrees.

Example #1: Simple Uniform Selection

Example #1 balances the three Chroma, Sound, Chord triplets detailed in Table 2.

IndexColorPercussionMIDI ProgramMIDI KeyMIDI Velocity
0BlackfalseOBOEC590
1BluefalseMARIMBAC#390
2CyanfalseBASSOONB290

Table 2: Sounds of Feedback-Uniform.xml.

All three components in the same triplet share a common index. Thus Chord #0 contains Sound #0, which references Chroma #0. The weight contour for each Chroma maintains the value 1.0 statically over the duration of the example. Combining the three contours together yields the profile shown in Figure 1. The example spans 90 Events, each lasting one unit (i.e. one quarter note).


Figure 1: Profile of the Feedback-Uniform.xml example.

You can witness the selection process for Example #1 by playing the following animation. Before you do that, you should first understand the components of the image. These components arranged in three rows:

 
Figure 2 (a): Usage and Balance graphs after Sound #0 has been selected for Event #1.
 
Figure 2 (b): Chord graphs after Sound #0 has been selected for Event #1.

To understand how row 3's Usage and Balance graphs work, refer to Figure 2 (a). This figure assumes that the first decision has already been made, and that the first decision selected Sound #0 for Event #1.

To understand how the Content and Balance graphs work for each chord in row 1, refer to Figure 2 (b).

The goal of statistical feedback is select the option (for this purpose a chord) which gives each resource (for this purpose a sound) its fair share of usage. This situation is achieved graphically when the values in row 3's Balance graph cluster most tightly around the center point.

Neither Chord #1 nor Chord #2 achieves perfect balance, but either option is superior to Chord #0. Which to use?

This is where heterogeneity comes into play. Small random values added into the values shown by the chordal Balance graphs tip the balance whenever it teeters on the knife edge. Thus while Chord #1 and Chord #2 seem equally preferable in Figure 2 (b), randomness tips the balance in favor of Chord #2. Whose selection is indicated by the red rectangle.

Go ahead and play the video now. In the event that your browser does not support my video formats, I present the composed result in Figure 3 (a). Feedback-Uniform.mp3 provides an audio realization of the generated result. A second result, generated using a different random seed, appears as Figure 3 (b).


Figure 3 (a): The Feedback-Uniform.xml example, realized with Heterogenity=0.1 and Seed=0.

Figure 3 (b): The Feedback-Uniform.xml example, realized with Heterogenity=0.1 and Seed=1.

Figure 3 (a) and Figure 3 (b) illustrate the behavior properly expected when the weights are uniformly static, when all Events have the same duration, and when the Heterogenity attribute is small. Notice that the first three Events, among themselves, utilize all three Sounds. Likewise, the fourth, fifth, and sixth Events, among themselves, utilize all three Sounds. So it goes for entire sequence of events.

This is the same behavior one would expect from the SERIES feature of Gottfried Michael König's Project 2 program. Thus are confirmed the antecedents of statistical feedback in European post-serial aleatoric methods.

Later examples will demonstrate how statistical feedback responds to changing durations, and to non-uniform balances. However the current example presents the best opportunity to illustrate what happens when the Heterogenity attribute is substantially greater than unity. Figure 3 (c) shows a result obtained with the Heterogenity jacked up to 10. Notice that the result sometimes lingers on one specific Sound for three or more successive Events, or elsewhere that the result emphasizes two Sounds to the exclusion of the third. The Balance graph after the final decision is certainly out of kilter. Yet the Usage graph demonstrate that over the result as a whole, the proportions of Events allocated to the three different Sounds agree very closely.


Figure 3 (c): The Feedback-Uniform.xml example, realized with Heterogenity=10 and Seed=2.

Example #2: Chromatic Chords with Variable Durations

This example demonstrates how statistical feedback accomodates selection at a group level with changing event durations. Here, selecting a chord for a single Event having a duration of two units affects balances in the same way as selecting the same chord for two Events, each having durations of one unit.

Example #3 employs twelve Sounds, each paired with a Chroma that shares the same index. The sounds represent all twelve degrees of the chromatic scale. Although Table 3 lists the pitches in circle-of-fifths order, this has the effect of distributing pitches which are close on the circle of fifths over disparate registers.

IndexColorPercussionMIDI ProgramMIDI KeyMIDI Velocity
0PinkfalseBASS_ACOUSTICC290
1RedfalseCELESTAG390
2OrangefalseCLARINETD490
3YellowfalseOBOEA590
4GreenfalseCELLOE290
5GrayfalseBASSOONB390
6BlackfalseHARPF#490
7Dark GrayfalseVIBRAPHONEC#590
8Light GrayfalsePIANO_ACOUSTIC_GRANDA!290
9CyanfalseFRENCH_HORNE!390
10BluefalseTRUMPETB!490
11MagentafalseMARIMBAF590

Table 3: Sounds of Example #2.

Like Example #1, the weight contour for each Chroma maintains the value 1.0 statically over the duration of the example. However, the present Example #2 exploits all twelve Chromas. Combining the twelve contours together yields the profile shown in Figure 4.


Figure 4: Profile of the Feedback-Chromatic.xml example.

Example #2 contains 64 events mixing durations of 1, 2, and 3 units. To determine the sequence of durations, I wrote a small Java program that employed statistical feedback with low heterogeneity. This program accorded unit weight to durations of 1 unit, weight 1/2 to durations of 2 units, and weight 1/3 to durations of 3 units. The result had two features:

There are twelve Chords. Each Chord contains four Sound values, chosen to favor dissonant sonorities. Each Sound appears in four Chords; thus the Chord collection gives equal representation to each of the twelve chromatic degrees, which is consistent with the weights graphed in Figure 4. Such consistency helps the decision engine select suitable Chords, but it is no means required.

Choice IndexValue 0Value 1Value 2Value 3Value 4Value 5Value 6Value 7Value 8Value 9Value 10Value 11
001610
10239
20478
301511
41269
53457
636711
728910
834510
91568
1028911
11471011

Table 4: Chords in Example #2.

You can witness the selection process for Example #2 by playing the following animation. In the event that your browser does not support my video formats, I present the composed result in Figure 5. Feedback-Chromatic.mp3 provides an audio realization of the generated result.


Figure 5: The Feedback-Chromatic.xml example, realized with Heterogenity=0.01 and Seed=0.

Look at the Usage graph. Selecting among groups of Sounds posed a challenge, since Chords could potentially mix over-used Sounds with under-used Sounds. Selecting for Events with longer durations posed a second challenge, since longer durations affect balances more radically. Yet despite these challanges the bars in the Usage graph come out remarkably even.

Example #3: Linear Evolution

Example #3 demonstrates how statistical feedback copes with evolving weights. For this example I have chosen to employ percussion sounds. There are five Sounds, each paired with a Chroma that shares the same index.

IndexColorPercussionMIDI KeyMIDI Velocity
0YellowtrueCYMBAL_RIDE190
1MagentatrueSNARE_DRUM190
2CyantrueTOM_HIGH190
3BluetrueTOM_LOW190
4BlacktrueBASS_DRUM190

Table 5: Sounds of Example #3.

The weight contour for the cymbal (Sound #0) holds at unity for the duration of the example. This does not mean that the cymbal participates in every event. I'll explain why after we see the results. The weight contours for the tom-toms (Sound #2 and Sound #3) both start at unity, but both ramp down to zero over the duration of the example. Tom-tom activity is complemented by snare (Sound #1) and bass-drum Sound #4 activity. The weight contours for these latter sounds begins at zero and ramps up to unity. All these contours join together into the profile shown in Figure 6.


Figure 6: Profile of the Feedback-Evolution.xml example.

There are eight Chords. Chords 0-3 are single Sounds not including cymbal strikes. Chords 4-7 are double Sounds including cymbal strikes.

Chord IndexSound IndexColorMIDI Key
01MagentaSNARE_DRUM1
12CyanTOM_HIGH1
23BlueTOM_LOW1
34BlackBASS_DRUM1
40YellowCYMBAL_RIDE1
1MagentaSNARE_DRUM1
50YellowCYMBAL_RIDE1
2CyanTOM_HIGH1
60YellowCYMBAL_RIDE1
3BlueTOM_LOW1
70YellowCYMBAL_RIDE1
4BlackBASS_DRUM1

Table 6: Chords of Example #3.

You can witness the selection process for Example #3 by playing the animation above. In the event that your browser does not support my video formats, I present the composed result in Figure 7. Feedback-Evolution.mp3 provides an audio realization of the generated result.


Figure 7: The Feedback-Evolution.xml example, realized with Heterogenity=0.01 and Seed=0.

Notice the following things about Figure 7:

Example #4: Non-Linear Evolution

Example #4 employes the twelve Chroma, Sound, Chord triplets detailed in Table 3. All three components in the same triplet share a common index. Thus Chord #0 contains Sound #0, which references Chroma #0.

The Sounds represent all twelve degrees of the chromatic scale, which Table 3 lists in circle-of-fifths order. This also happened in Example #2, but this time around the order is directly significant. All twelve chromatic degress are placed within the octave starting at C4 (middle C).

IndexColorPercussionMIDI ProgramMIDI KeyMIDI Velocity
0PinkfalseACCORDIANC460
1RedfalseACCORDIANG460
2OrangefalseACCORDIAND460
3YellowfalseACCORDIANA460
4GreenfalseACCORDIANE460
5GrayfalseACCORDIANB460
6BlackfalseACCORDIANF#460
7Dark GrayfalseACCORDIANC#460
8Light GrayfalseACCORDIANA!460
9CyanfalseACCORDIANE!460
10BluefalseACCORDIANB!460
11MagentafalseACCORDIANF460

Table 7: Sounds of Example #4.

The weight contours for Example #4 follow the non-linear evolution shown in Figure 8. This evolution begins by favoring positions on the circle of fifths surrounding to C. Second in prominence at the outset are G and F. As the piece progresses, the weights favor in turn positions surrounding F, then B!, then E!, and so forth, until coming full circle to C at the end.


Figure 8: Profile of the Feedback-CosExp.xml example.

The weighting formula used here adapts an approach described in my 1986 article, “Two Pieces for Amplified Guitar”. What is needed is a formula that favors positions on one side of the circle at the expense of positions on the opposite side. The cosine function, with its peak at 0° and its trough at 180°, has the right shape. However the cosine function goes negative on the back side of the circle, and there's no such thing as a negative weight.

My solution was to use the cosine function as an exponent to a suitable (positive) base. This works because Rcos(x) proceeds from R when x=0°, through 1 when x=90°, through 1/R when x=180°, back through 1 when x=270°, returning to R when x=360°. Thinking about it, we need to replace x with two angles, θ to indicate the position of greatest emphasis and δ to indicate the Chroma position relative to θ. We also need to accomodate the fact that weight contours only accept values in the range from zero to unity. We can do this by dividing Rcos(θ+δ) by its maximum value, R.

Applying this reasoning with R=3 leads us to the formula:

w(θ,δ)  =    3cos(θ+δ)
3

Where

With 12 Chromas and 100 Events, 1200 weights need to be calculated to generate the profile shown in Figure 8. Naturally, I didn't input all these weights using the weight contour editor. Instead I created a short Java program to generate the file.

You can witness the selection process for Example #4 by playing the animation above. In the event that your browser does not support my video formats, I present the composed result in Figure 9. Feedback-Evolution.mp3 provides an audio realization of the generated result.


Figure 9: The Feedback-CosExp.xml example, realized with Heterogenity=0.1 and Seed=0.

Example #5: Diatonic Chords

Example #5 select chords from the D major scale. There are 11 four-note Chords referencing 22 distinct Sounds. The Sounds in turn reference 7 distinct Chromas. As with the previous examples, balance is the ONLY criterion of selection — voice leading is entirely coincidental! The example comprises 100 Events, all of unit duration.

The Chromas detailed in Table 8 correspond to the seven degrees of the D major scale.

IndexColorDegree
0REDD
1ORANGEE
2YELLOWF#
3GREENG
4BLUEA
5MAGENTAB
6PINKC#

Table 8: Chromas for Example #5.

For this example I chose to define three sets of weights, one set each for the three harmonic functions: tonic, subdominant, and dominant. The tonic degree for D major is D, the subdominant degree is G, and the dominant degree is A. Each of these degrees will be weighted strongly in their corresponding weight sets.

For the other degrees I apply some chord-substitution principles from Michael Rendish of the Berklee College of Music. According to Rendish, in the key of D major:

Table 9 lists the weights I have selected for each Chroma under tonic, subdominant, and dominant functions. D, G, and A have weight 1.0 in their respective groups, since these degrees are often doubled in the chords enumerated below. Other degrees have weight 0.5 when favored by Rendish's principles, weight 0.0 when Rendish excludes them, and weight 0.3 otherwise.

IndexDegreeTonic
Weight
Subdominant
Weight
Dominant
Weight
0D1.00.50.0
1E0.30.30.3
2F#0.50.30.3
3G0.01.00.5
4A0.50.31.0
5B0.30.30.3
6C#0.30.00.5

Table 9: Chroma weights for harmonic functions.

Once these three weight sets were defined, I was able to design the profile not as a bundle of weight contours, but rather as a succession of harmonic functions. This resulting profile is detailed in Table 10 and graphed in Figure 10.

SegmentTimeDurationHarmony
0020Tonic
12010Tonic to Subdominant
23010Subdominant
34010Subdominant to Tonic
45010Tonic
56010Subdominant
67010Subdominant to Dominant
78010Dominant
89010Tonic

Table 10: Harmonic profile for Feedback-Diatonic.xml.

Figure 10: Profile of the Feedback-Diatonic.xml example.

When you build a feedback scenario in the graphical editor, you need to progress from Chromas to Sounds to Chords. However in conceiving of the thing it is better in some cases to plan from the top down. This is such a case: we need to know what pitches the Chords will use before we can go about defining the Sounds. Table 9 lists the Chords, which all derive from the D major scale.

IndexPitchPitchPitchPitch
0D2F#4A4D5
1D3D4F#4A4
2D3G4B4G5
3E2G3B3G4
4F#2A3D4A4
5G2G4B4D5
6G3D4G4B4
7A2G4A4C#5
8A3C#4E4G4
9B3D4F#4D5
10C#3G4A4E5

Table 11: Chord scheme for Example #5.

I used the Musical Calculator to dedup and sort the pitches in Table 11, obtaining the Sounds listed in Table 12.

Scale IndexChroma IndexMIDI ProgramMIDI KeyMIDI Velocity
00PIANO_ACOUSTIC_GRANDD290
11PIANO_ACOUSTIC_GRANDE290
22PIANO_ACOUSTIC_GRANDF#290
33PIANO_ACOUSTIC_GRANDG290
44PIANO_ACOUSTIC_GRANDA290
56PIANO_ACOUSTIC_GRANDC#390
60PIANO_ACOUSTIC_GRANDD390
73PIANO_ACOUSTIC_GRANDG390
84PIANO_ACOUSTIC_GRANDA390
95PIANO_ACOUSTIC_GRANDB390
106PIANO_ACOUSTIC_GRANDC#490
110PIANO_ACOUSTIC_GRANDD490
121PIANO_ACOUSTIC_GRANDE490
132PIANO_ACOUSTIC_GRANDF#490
143PIANO_ACOUSTIC_GRANDG490
154PIANO_ACOUSTIC_GRANDA490
165PIANO_ACOUSTIC_GRANDB490
176PIANO_ACOUSTIC_GRANDC#590
180PIANO_ACOUSTIC_GRANDD590
191PIANO_ACOUSTIC_GRANDE590
203PIANO_ACOUSTIC_GRANDG590
214PIANO_ACOUSTIC_GRANDA590

Table 12: Sounds for Feedback-Diatonic.xml.

You can witness the selection process for Example #5 by playing the animation above. In the event that your browser does not support my video formats, I present the composed result in Figure 11. Feedback-Evolution.mp3 provides an audio realization of the generated result.


Figure 11: The Feedback-Diatonic.xml example, realized with Heterogenity=0.1 and Seed=0.

© Charles Ames Page created: 2013-09-18 Last updated: 2017-07-04