Yearly Archives: 2010

pianoPed

(pianoPed) Notes about Web Site Projects

It seems kind of weird for me to be adding a piano pedagogy category, but I think it is good to post online all the teaching info that I can, and it might be of use to others.

I want to summarize a few tips I went over in class, and provide a few helpful hints as you’re working on your web projects (projects 1 and 2). read more »

computerMusic3 lectureNotes_cm3

(maxmsp) Gain slider, delay line intro

2/24/10 patchers are in iLocker.

(It can be easier to grab multiple files using Fetch, available for free from UCS, or some other Windows/Mac FTP program. The server is ilocker.bsu.edu, and the directory is /users/kkothman/BSU_SHARED/242/examplePatchers.)

New patchers:

  • MSPBasic1f – a different way of sending target value and ramp time to line~
  • MSPBasic2b – gain~ slider, also including the scale object to map incoming MIDI CC to different ranges of values.
  • MSPBasic3a – adc~ and ezadc~ in an audio monitoring patcher. In class, soundflower was used as my Mac Core Audio driver, iTunes radio was playing, and the adc~/ezadc~ used soundflower as its input (set in the DSP status window)
  • MSPBasic3b – tapin~/tapout~ for delay lines. Very simple intro.
lectureNotes_musth2 musicTheory2

(musTh2) Sequences and recent work

I’m in the process of catching up.

The handouts from Dr. Oravitz should be the most helpful thing you have on the topic of sequences. I’ve posted them in my iLocker 112 folder (Common harmonic sequences, sequence repertoire) if you need to get another copy.

A few words about sequences to reinforce some key points.

Know the common sequence types by root movements.

  • descending fifth
  • Pachebel (descending fourth, ascending second, resulting in an overall descending third)
  • 5 -6 exchange
  • descending second 6 – 3

The descending second with 6 – 3 chords is the only sequence that is usually comprised of a one-harmony segment.

The Pachebel sequence is obviously a two-harmony segment, since the driving movement of the sequence is to descend by thirds. The third descent is why I refer to it as a descending fourth/ascending second sequence, rather than an ascending fifth/ascending second. The root movement is the same, but the latter way of describing it suggests the sequence ascends by sixths.

The descending fifth sequence is less obviously a two-harmony segment, but usually the melodic segment will traverse two harmonies to emphasize a descending second movement. For example, starting on i in c minor will give root movements of C – F, Bb – Eb, Ab – D, most likely moving to G (V) and breaking the sequence. Notice the descent comprising the first root of each pair of harmonies: C – Bb – Ab, followed by G. Creating a two-harmony segment allows for a melodic sequence with each segment a second below the previous one.

A descending fifth sequence using all seventh chords requires an alternation between complete and incomplete seventh chords. Upper voices move either by common tone or step-wise descent, with the root doubled in the incomplete seventh chords.

Inversions are always possible in a sequence. Using inversions doesn’t change the basic sequence type (classified by root movement, not bass movement), but it may change the voice leading. With descending fifth progressions of seventh chords, alternating between a root position seventh and a second inversion seventh (4 – 3 chord) allows for every chord to be complete AND have EVERY voice move either by common tone or descending second.

assignments_cm3 computerMusic3

(maxmsp) MSP reading and tutorial assignment 1

The documentation and tutorial text is online at:

http://cycling74.com/docs/max5/vignettes/intro/docintro.html

You can read online without having the application.

Read the following sections of the documentation for MSP:

  • MSP Introduction
  • How MSP Works
  • Audio I/O

Go through MSP Tutorials 1 – 5.

These tutorials do not require you to modify anything, but I want you make a list of concepts and objects covered as a study guide for yourself. Turn in the study guide to me via email by 3/1/10.

computerMusic3 lectureNotes_cm3

(maxmsp) MSP basic demo patchers

Demo patchers from yesterday’s lecture are in iLocker. Look for patchers MSPBasic1[a - e].maxpat.

Outline of topics covered:

  • Digital Audio basics relating to how computers generate audio samples (in blocks, or vectors). The larger the vector sample size, the less strain on the computer, more latency.
  • Audio Rate and Control Rate, pertaining to patch cord connections and the rate at which they are computed.
  • ~ denotes audio objects (tilde looks like a sine wave)
  • dac~ and EZdac~ (and their related messages: start, startwindow, and stop)
  • basic objects: cycle~, *~ (gain).
  • The reliance on floating point numbers for messages, rather than integers
  • audio discontinuity leading to clicks requires use of line~ for smoothing message changes, especially for amplitude
  • replacing the sine wave table used for cycle~ with an audio signal of your choice (as long as it is 512 samples).
assignments_cm3 computerMusic3 lectureNotes_cm3

(maxmsp) More Tips for Assignment 2

Following up on previous set of tips, I’m offering up some more help for translating the assignment into programming tasks.

The second part of the problem asks for a “gesture generator” with several options. It is best to pursue each option as a separate patch. All versions must start with a MIDI key press, use the MIDI key as the first note of the gesture, and use a single durational (time) value. These instructions mean that all versions of the patchers will:

  • Only a noteon message can start the timing unit (ok, by now we know it is a metro). You need a combination of two objects to get rid of noteoff commands.
  • The metro object must use musical time values, which requires the use of a transport object and specific attribute arguments for the metro. I’m willing to waive this requirement if you’re still struggling with this patcher. You can use a metro with millisecond timing.
  • The gesture plays in order, so you need to count bangs.
  • You need to pass the MIDI note number to an add box to add to the output of the stored intervals in the table (like the arpeggiator).

The first version of the patcher shuts off at the end of the gesture (or stored interval sizes). To do so, you need to count events, determine when you reach the maximum number of events, and use that determination to stop the metro. It doesn’t matter how long you hold the MIDI key, so the noteoff message can be ignored.

The second version repeats the last note until you release the MIDI key. This version of the patcher will require you to keep the metro running, but bypass the counter once you reach the maximum number (end of gesture). There is a graphic object that performs this function. Use the result of the counter maximum to trigger the switch to route bangs away from the counter. You should know from the tutorials that an integer number object displays the last number passed through, and also stores it. A bang to a number box will cause the number box to re-output its stored number (the last number that passed through). In this version of the patcher, you hold the MIDI key down to play the gesture, and release it to stop. You already know from the first part of the assignment how to stop a metro using key velocity. Make sure you control a toggle leading to the metro so that you can pass the message to another control device for routing.

The third version of the patcher “repeats the last note with variable durations, chosen from a limited set (2 to 4) of values, related by multiples of the durational value used for the gesture.” This version requires that you change durations in the metro once you reach the maximum count. You can use the same determination that you use to switch the routing of bangs to also turn on a random object that bangs a table with stored multiples of the base value (1, 3, 4, 8, for example).

If you haven’t figured the third version, I’ll go over it in class on Friday.

The third part of the assignment is remarkably similar to one of the Day05 demo patchers.

assignments_cm3 computerMusic3 lectureNotes_cm3

(maxmsp) Notes on Assignment 2

Given the scarcity of finished assignment 2′s in my possession, I’m assuming you’re having a lot of problems getting started with your first guided Max patchers. My experience leads me to believe that there are a couple of reasons for these troubles:

  1. You need to take notes in class. I don’t see anyone writing anything down, and I don’t know how you expect to remember where to even start if you don’t take notes. Specifically, you’re not sure where to go among my class demo patchers to see examples that work similarly to what the assignment is asking for you to do.
  2. Similar to translating word problems into math equations, you need to work at translating program descriptions into Max code – understanding what objects perform what basic functions.

To help, I’m going to break down the first patcher – the arpeggiator – into some basic Max objects and tasks.

An arpeggiator play an arpeggio based on a given root note at a specified rate of time. The arpeggio does not have to be limited to an octave range. It can span whatever musical interval you would like. So an arpeggiator needs:

  • the intervals of a given arpeggio stored in its memory,
  • a MIDI note input for the root note,
  • to add the intervals to the input MIDI note,
  • to send the arpeggio notes (input + intervals) to an output,
  • and a timing device that triggers the arpeggiated notes.
  • Your assignment also asks that the input MIDI note be sent out to play along with the arpeggio.

So let’s look at each step and figure out what MIDI objects perform the necessary functions. (I’ve left off some of the assignment – starting and stopping the arpeggio – that I’ll come back to later.)

The intervals of a given note stored in memory. Intervals are expressed in integers representing how many half steps in the interval. You can store integers in a table object. The table object can hold as few intervals as you like, but it can also store by default 128 values.

A MIDI note input for the root note. Getting a MIDI note into Max usually involves the notein object.

Adding the intervals to the MIDI input note. Adding should be obvious (+ object). Be sure that you are adding the note number from notein to the output of the table object to get the desired note number for the arpeggio note.

Send the arpeggio notes (input + intervals) to an output. To output MIDI notes based on MIDI note number alone requires two objects: makenote and noteout. The duration of the note argument in makenote should be based on the speed of the object triggering the arpeggio notes.

A timing device that triggers the arpeggiated notes. An object that sends out bangs at specified time intervals is the metro. The metro needs something to start and stop it (generally a toggle, but it could also be linked to the transport for musical duration values). The metro needs a time argument, by default in milliseconds.

Input MIDI note be sent out to play along with the arpeggio. Connections for note number and velocity need to run from notein to noteout. Remember, you can have multiple connections out of and in to objects.

The main functions for what has been described so far exist in the Day02.maxpat. I’ve also posted a Day02more.maxpat that has an additional comment about a random generator being sent to the velocity input of makenote. For example, you need to send an index number (the y value) to table to get the value stored at that index. You can use a counter object or a random object to do this. Both operate based on bang messages from the metro object.

The only things that the Day02 patcher do not do are:

  • echo the input notein to noteout. These messages (note number and velocity) have to bypass (not go through) stripnote. Stripnote is being used to only send noteon MIDI note values to be added to the arpeggio intervals.
  • start and stop the timing device (the metro object) with noteon and noteoff messages.

This last step is fairly easy. In class, and in the Day02 example, the metro turns on manually with a toggle object. Metro starts with a non-zero integer, and stops with 0. A toggle sends a one when clicked on, and a zero when clicked off. MIDI noteon messages have a non-zero velocity, and noteoff messages have a zero velocity. All that is required then is an additional connection from the notein velocity outlet to either a toggle connected to metro, or to the input of metro itself to start and stop with the pressing and releasing of a MIDI key.

A final hint, you don’t have to limit yourself to one notein object, with many long patch cord connections. You can have multiple noteins within a patcher. They will all send the same messages (if they are listening to the same devices). You can even have multiple noteout objects. Adding multiple objects for the same function can produce cleaner-looking patchers.

The second and third parts of the assignment are based on each previous patcher. Consider a “gesture” to be a collection of note numbers, like an arpeggio. Expressing time in musical values requires use of the transport object. Decide if you want the transport to run all the time, or to start and stop when you press a MIDI key. The latter is easier to program. Shutting off the metro after a certain number of events requires a counter object with the proper arguments. The Day05-TableStore.maxpat file has an example of how to do this with metro. You need to connect the select – bang output to the toggle controlling a transport object.

Deciding whether to advance a counter with bang messages, or to simply repeat the last value means you need to switch the route of the bang from the counter directly to the last number at a given count. Graphic switches perform this function.

I’ve laid out a lot of what is needed to complete parts one and two. Part one requires minimal changes to the Day02 patcher. You need to try your hand at connecting the rest.

lectureNotes_musth2 musicTheory2

(musTh2) Phrases, Periods, Sentences, Motives and more

Chapter 6 of the Roig-Francoli lays out the material fairly well. I’m going to put it a bit more hierarchically.

At the smallest levels of organization you have motives and phrase segments (sub-phrases). Motives are the smallest recognizable musical elements, with identifiable rhythmic or rhythmic and melodic characteristics. You recognize motives partly by their repetition and development. Think Beethoven’s Fifth Symphony. Not all music makes use of motives, or motivic development. Phrase segments are units of phrases, most often found in sentence structure, but sometimes just dividing a phrase in half.

Phrases are complete melodic and harmonic statements. By complete, I mean that they end with a cadence and usually some sort of melodic/rhythmic stoppage. Remember that half cadences end on the dominant triad (V), not the dominant seventh chord (V7).

Sentence structure is built upon phrase segments. The form is a + a’ + b, in the proportion 1 + 1 + 2. The phrase handout outlining Schoenberg/Caplin ideas calls the structure basic idea, repeat of the basic idea with some variation (usually transposition), contrasting idea.

Sometimes one phrase will end at the same point that another phrase begins. This overlap of ending and beginning is called an elision. With an elision, it is possible that two four-measure phrases will only take up seven measures of music.

Phrases can be organized into group relationships. If two or more phrases show a weak – strong relationship we can talk about these phrases forming a period. A period is generally formed by two phrases in an antecedent – consequent relationship. The antecedent phrase has a weaker cadence than the consequent phrase. Usually the relationship is half cadence to perfect authentic cadence. The IAC to PAC relationship happens less frequently.

Period relationships in classical music are most often in the form of a parallel period. A parallel period has two phrases that begin with the same melodic and harmonic material (usually the first two measures) before diverging to end with different cadences. Contrasting periods (phrases start with different material) are found less often, but can occur in some earlier classical composers (Hadyn, for example) and Baroque composers.

Periods can sometimes be three phrases, with two antecedent phrases and one consequent phrase. You can also find double periods, with the first and third phrase being the same, and the second phrase having a weaker cadence than the fourth. Modulating periods will often be parallel in form, ending the first phrase on a HC, and the second phrase with a PAC in a new tonal area. In major keys, almost always the PAC will be on the fifth scale degree. In minor keys the PAC will usually be on the third scale degree (the relative major).

Phrases that don’t form period relationships, but still go together musically, are called phrase groups.

Phrase diagrams will show phrase marks/slurs for each phrase; phrase labels designating the phrase relationships (a, a’ for parallel periods; a, b for contrasting periods, indicating relationship of melodic material); a period marking/slur if a period is present; measure numbers for the start of each phrase, and the end of each phrase; the key the music is in; and each cadence will be labeled as for type. If there is a modulation, your diagram will indicate that as well.

assignments_musth2 musicTheory2

(musTh2) Assignment 2: Phrases

EDITED!

Due Friday, 1/29/2010

From Chapter 6 of the Workbook:

Exercise 6.1 (pp. 60 – 62), numbers 1 – 3, and 5 – 6 (6a, 6b, 6c).

  • For number 2, only do measures 1 – 8.
  • Number 5, the Trio starts on p. 314.
  • Number 6b, look at the first 20 measures.

For numbers 1 – 5 you do not need to do a chord-by-chord harmonic analysis, although it is good practice and can help you see cadential points more easily. You are not turning in copies of the music, so it does not need to be clean and formal.

Numbers 1 – 5 asks for a form diagram and discussion based on the information listed on p. 60. Points 1 – 5 in that list will provide the material for your discussion. The form diagram will include some material from the discussion as well (cadences, phrase relationships, etc.)

  • Discussion point 1 asks if the fragment is based on a motive. Also include in your discussion if any of the phrases are built in sentence structure, discussing what constitutes the a, a’, and b elements. These designations should also go into your diagram.
assignments_cm3 computerMusic3

(maxmsp) Assignment 2: MIDI patchers

Due Monday, 2/1/2010

As a warm-up exercise for your first project (an interactive MIDI performance patcher), program patchers based on the following directions:

1) An arpeggiator that

  • starts with the playing of a key on a MIDI keyboard,
  • uses the MIDI key pressed as the bass note of the arpeggiator,
  • plays the MIDI key pressed
  • and stops the arpeggiator when the MIDI key is released (and stops playing the note associated with the MIDI key).

2) A gesture generator that

  • is triggered by a note on from a MIDI keyboard and uses that note number as the starting note of the gesture,
  • uses a single durational value specified in musical time (musical note value)
  • and includes the following three variations (either as separate patchers, or as selectable options in a single patcher):
    • gesture generator shuts off at end (a finite gesture)
    • repeats the last note until the original MIDI key is released
    • repeats the last note with variable durations, chosen from a limited set (2 to 4) of values, related by multiples of the durational value used for the gesture.

3) Randomly plays notes that have been stored from MIDI keyboard input, with durations chosen from a limited (3 to 5) set of values.

You should be able to make liberal use of the class demo patchers in iLocker. None of them will do exactly what I have asked for, but some of them do a lot of what is needed.

Nothing specific has been asked for in terms of key velocity. Once your patchers work as required, consider adding components to provide musicality through changing key velocity.

Guard against over complication in your patchers, and consider saving versions of your work with incremental naming (arp1, arp2, etc.). This protects you from overwriting a version that works in a limited way with a version that not only doesn’t work at all, but is too complicated for you to debug your mistakes.