Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
README.md
beat1.svg
beat2.svg
chunk-1.svg
chunk-2.svg
chunk-3.svg
chunk-4.svg
chunk-5.svg
chunk-6.svg
chunk-7.svg
chunk-8.svg
drum1.svg
drum2.svg
drum3.svg
drum4.svg
drum5.svg
drum6.svg
drum7.svg
drum8.svg
even-invert-chart.svg
fibonacci3.svg
graphics1.svg
graphics2.png
graphics2.svg
graphics3.svg
graphics4.png
graphics5.svg
graphics6.svg
guide.css
hotdog.png
hyperscore.svg
index.html
interactive.svg
interactive2.svg
interactive3.svg
invert-even.png
invert-odd.png
invert-scalar.png
keyboard1.png
keyboard2.png
lilypond1.svg
lilypond2.svg
matrix1.svg
matrix10.svg
matrix11.svg
matrix12.svg
matrix13.svg
matrix14.svg
matrix15.svg
matrix2.svg
matrix3.svg
matrix4.svg
matrix6.svg
matrix7.svg
matrix8.svg
matrix9.svg
mode1.svg
mode2.svg
mode3.svg
mode4.svg
mode5.svg
mode6.svg
note1.svg
note2.svg
note3.svg
note4.svg
note5.svg
odd-invert-chart.svg
piemenu1.svg
piemenu2.svg
pitchslider0.svg
pitchslider0a.svg
pitchslider1.svg
pitchslider2.svg
pitchslider3.svg
pitchslider4.svg
pitchslider5.svg
pitchstaircase0.svg
pitchstaircase1.svg
pitchstaircase2.svg
pitchstaircase3.svg
pitchstaircase4.svg
pitchstaircase5.svg
rhythm1.svg
rhythm2.svg
rhythm3.svg
rhythm4.svg
rhythm5.svg
rhythm6.svg
rhythm7.svg
rhythm8.svg
scalar-invert-chart.svg
silence.svg
status1.svg
status2.svg
status3.svg
temperament1.svg
temperament2.svg
temperament3.svg
temperament4.svg
temperament5.svg
temperament6.svg
temperament7.svg
tempo0.svg
tempo1.svg
timbre1.svg
timbre1a.svg
timbre2.svg
timbre2a.svg
timbre2b.svg
timbre2c.svg
timbre2d.svg
timbre2e.svg
timbre2f.svg
timbre3.svg
timbre4.svg
timbre5.svg
timbre6.svg
timbre7.svg
transform0.svg
transform1.svg
transform10.svg
transform11.svg
transform12.svg
transform13.svg
transform14.svg
transform15.svg
transform16.svg
transform17.svg
transform18.svg
transform19.svg
transform2.svg
transform3.svg
transform4.svg
transform5.svg
transform6.svg
transform7.svg
transform8.svg
transform9.svg
tree-example.svg
tree.svg
voices1.svg
voices2.svg
voices3.svg
voices4.svg
voices5.svg

README.md

Guide to Programming with Music Blocks

Music Blocks is a programming environment for children interested in music and graphics. It expands upon Turtle Blocks by adding a collection of features relating to pitch and rhythm.

The Turtle Blocks guide is a good place to start learning about the basics. In this guide, we illustrate the musical features by walking the reader through numerous examples.

A short Guide to Debugging. is also available.

Table of Contents

  1. Getting Started
  2. Making Sounds
    1. Note Value Blocks
    2. Pitch Blocks
    3. Chords
    4. Rests
    5. Drums
  3. Programming with Music
    1. Chunks
    2. Musical Transformations
      1. Step Pitch Block
      2. Sharps and Flats
      3. Adjusting Transposition
      4. Dotted Notes
      5. Speeding Up and Slowing Down Notes via Mathematical Operations
      6. Repeating Notes
      7. Swinging Notes and Tied Notes
      8. Set Volume, Crescendo, Staccato, and Slur Blocks
      9. Intervals
      10. Absolute Intervals
      11. Inversion
      12. Backwards
      13. Setting Voice and Keys
      14. Vibrato, Tremelo, et al.
    3. Voices
    4. Graphics
    5. Beat
    6. Interactions
  4. Widgets
    1. Monitoring Status
    2. Generating Chunks of Notes
      1. Pitch-Time Matrix
      2. The Rhythm Block
      3. Creating Tuplets
      4. What is a Tuplet?
      5. Using Individual Notes in the Matrix
      6. Using a Scale of Pitches in the Matrix
    3. Generating Rhythms
    4. Musical Modes
    5. The Pitch-Drum Matrix
    6. Exploring Musical Proportions
    7. Generating Arbitrary Pitches
    8. Changing Tempo
    9. Custom Timbres
    10. Music Keyboard
    11. Changing Temperament
  5. Beyond Music Blocks

Many of the examples given in the guide have links to code you can run. Look for RUN LIVE links.

1. Getting Started

Back to Table of Contents | Next Section (2. Making Sounds)

Music Blocks is designed to run in a browser. Most of the development has been done in Chrome, but it should also work in Firefox, Opera, and some versions of Safari. You can run it from musicblocks.sugarlabs.org, from github io, or by downloading a copy of the code and running a local copy directly from the file system of your computer. (Note that when running locally, you may have to use a local server to expose all of the features.)

This guide details the music-specific features of Music Blocks. You may also be interested in the Turtle Blocks Guide, which reviews many programming features common to both projects.

For more details on how to use Music Blocks, see Using Music Blocks. For more details on how to use Turtle Blocks, see Using Turtle Blocks JS.

2. Making Sounds

Previous Section (1. Getting Started) | Back to Table of Contents | Next Section (3. Programming with Music)

Music Blocks incorporates many common elements of music, such as pitch, rhythm, volume, and, to some degree, timbre and texture.

2.1 Note Value Blocks

At the heart of Music Blocks is the Note value block. The Note value block is a container for a Pitch block that specifies the duration (note value) of the pitch.

alt tag

At the top of the example above, a single (detached) Note value block is shown. The 1/8 is value of the note, which is, in this case, an eighth note.

At the bottom, two notes that are played consecutively are shown. They are both 1/8 notes, making the duration of the entire sequence 1/4.

alt tag

In this example, different note values are shown. From top to bottom, they are: 1/4 for an quarter note, 1/16 for a sixteenth note, and 1/2 for a half note.

Note that any mathematical operations can be used as input to the Note value.

alt tag

As a convenience, a pie menu is used for selecting common note values.

alt tag

Please refer to the above picture for a visual representation of note values.

2.2 Pitch Blocks

As we have seen, Pitch blocks are used inside the Note value blocks. The Pitch block specifies the pitch name and pitch octave of a note that in combination determines the frequency (and therefore pitch) at which the note is played.

alt tag

There are many systems you can use to specify a pitch block's name and octave. Some examples are shown above.

The top Pitch block is specified using a Solfege block (Sol in Octave 4), which contains the notes Do Re Me Fa Sol La Ti .

The pitch of the next block is specified using a Pitch-name block (G in Octave 4), which contains the notes C D E F G A B.

The next block is specified using a Scale-degree block (the 5th note in the scale, 'G', also in 'Octave 4'), C == 1, D == 2, ...

The next block is specified using a Pitch-number block (the 7th semi-tone above C in Octave 4). The offset for the pitch number can be modified using the Set-pitch-number-offset block.

The pitch of the next block is specified using the Hertz block in conjunction with a Number block (392 Hertz) , which corresponds to the frequency of the sound made.

The octave is specified using a number block and is restricted to whole numbers. In the case where the pitch name is specified by frequency, the octave is ignored.The octave argument can also be specified using a Text block with values current, previous, next which does as 0, -1, 1 respectively.

The octave of the next block is specified using a current text block (Sol in Octave 4).

The octave of the next block is specified using a previous text block (G in Octave 3).

The octave of the last block is specified using a next text block (G in Octave 5).

Note that the pitch name can also be specified using a Text block.

alt tag

As a convenience, a pie menu is used for selecting pitch, accidental, and octave.

alt tag

alt tag

Please refer to the above charts for a visual representation of where notes are located on a keyboard or staff.

2.3 Chords

alt tag

A chord (multiple, simultaneous pitches) can be specified by adding multiple Pitch blocks into a single Note value block, like the above example.

2.4 Rests

alt tag

A rest of the specified note value duration can be constructed using a Silence block in place of a Pitch block.

2.5 Drums

alt tag

Anywhere a Pitch block can be used—e.g., inside of the matrix or a Note value block—a Drum Sample block can also be used instead. Currently there about two dozen different samples from which to choose. The default drum is a kick drum.

alt tag

Just as in the chord example above, you can use multiple Drum blocks within a single Note value blocks, and combine them with Pitch blocks as well.

3. Programming with Music

Previous Section (2. Making Sounds) | Back to Table of Contents | Next Section (4. Widgets)

This section of the guide discusses how to use chunks of notes to program music. Note that you can program with chunks you create by hand or use the Pitch-time Matrix widget to help you get started.

3.1 Chunks

alt tag

alt tag

Every time you create a new Action stack, Music Blocks creates a new block specific to, and linked with, that stack. (The new block is found at the top of the Block palette, found on the left edge of the screen.) Clicking on and running this block is the same as clicking on your stack. By default, the new blocks are named chunk, chunk1, chunk2... but you can rename them by editing the labels on the Action blocks.

An Action block contains a sequence of actions that will only be executed when the block is referred to by something else, such as a start block. This is useful in orchestrating more complex programs of music.

A Start Block is a chunk that will automatically be executed once the start button is pressed. This is where most of your programs will begin at. There are many ways to Run a program: you can click on the Run button at the upper-left corner of the screen to run the music at a fast speed; a long press on the Run button will run it slower (useful for debugging); and the Step button can be used to step through the program one block per button press. (An extra-long press of the Run button will play back the music slowly. A long press of the Step button will step through the program note by note.)

In the example above, the Chunk block is inside of a Start block, which means that when any of the start buttons is pressed, the code inside the Start block (the Chunk block) will be executed. You can add more chunks after this one inside the Start block to execute them sequentially.

alt tag

alt tag

You can repeat chunks either by using multiple Chunk blocks or using a Repeat block.

alt tag

alt tag

You can also mix and match chunks. Here we play the action block with name chunk0, followed by chunk1 twice, and then chunk0 again.

alt tag

alt tag

A few more chunks and we can make a song. (Can you read the block notation well enough to guess the outcome? Are you familiar with the song we created?)

3.2 Musical Transformations

There are many ways to transform pitch, rhythm, and other sonic qualities.

3.2.1 Step Pitch Block

alt tag

The Step Pitch block will move up or down notes in a scale from the last played note. In the example above, Step Pitch blocks are used inside of Repeat blocks to repeat the code 7 times, playing up and down a scale.

RUN LIVE

alt tag

Another way to move up and down notes in a scale is to use the Scalar Step Up and Scalar Step Down blocks. These blocks calculate the number of half-steps to the next note in the current mode. (You can read more about Musical Modes below.) Note that the Mouse Pitch Number block returns the pitch number of the most recent note played.

In this example, we are using the Mode length block, which returns the number of scalar steps in the current mode (7 for Major and Minor modes).

3.2.2 Sharps And Flats

alt tag

The Accidental block can be wrapped around Pitch blocks, Note value blocks, or chunks. A sharp will raise the pitch by one half step. A flat will lower by one half step. In the example, on the left, just the Pitch block Mi is lowered by one half step; on the right, both Pitch blocks are raised by one half step. (You can also use a double-sharp or double-flat accidental.)

3.2.3 Adjusting Transposition

alt tag

There are several ways to transpose a pitch: by semi-tone or scalar steps. The Semi-tone-transposition block (above left) can be used to make larger shifts in pitch in half-step units. A positive number shifts the pitch up and a negative number shifts the pitch down. The input must be a whole number. To shift up an entire octave, transpose by 12 half-steps. -12 will shift down an entire octave.

The Scalar-transposition block (above right) shifts a pitch based on the current key and mode. For example, in C Major, a scalar transposition of 1 would transpose C to D (even though it is a transposition of 2 half steps). To transpose E to F is 1 scalar step (or 1 half step). To shift an entire octave, scalar transpose by the mode length up or down. (In major scales, the mode length is 7.)

As a convenience, a number of standard scalar transpositions are provided: Unison, Second, Third, ..., Seventh, Down third, and Down sixth, as well as a transposition for Octave.

alt tag

In the example above, we take the song we programmed previously and raise it by one octave.

alt tag

The Register block provides an easy way to modify the register (octave) of the notes that follow it. In the example above it is first used to bump the Mi 4 note up by one octave and then to bump the Sol 4 note down by one octave.

3.2.4 Dotted Notes

alt tag

You can "dot" notes using the Dot block. A dotted note extends the rhythmic duration of a note by 50%. E.g., a dotted quarter note will play for 3/8 (i.e. 1/4 + 1/8) of a beat. A dotted eighth note will play for 3/16 (i.e. 1/8 + 1/16) of a beat. A double dot extends the duration by 75% (i.e. 50% + [50% of 50%]). For example, a double-dotted quarter note will play for 7/16 (i.e. 1/4 + 1/8 + 1/16) of a beat (which is the same as 4/16 + 2/16 + 1/16 = 7/16).

The dot block is useful as an expression of musical rhythm--it is convenient and helps to organize musical ideas (e.g. many melodies use dots as the basis of their rhythmic motifs), however you can achieve the same rhythmic result as dot by putting the calculation directly into note value as well. For example, indicating 3/8 instead of 1/4 will result in a dotted quarter note.

The chart below shows two common examples, dotted quarter and dotted eighth, and how to achieve them with either the dot block or by direct calculation into a note's note value.

alt tag

3.2.5 Changing Note(s) duration via Mathematical Operations

alt tag

You can also multiply (or divide) the note value, which will change the duration of the notes by changing their note values. Multiplying the note value of an 1/8 note by 1/2 is the equivalent of playing a 1/16 note (i.e. 1/2 * 1/8 = 1/16) . Multiplying the note value of an 1/8 note by 2/1 (which has the effect of dividing by 1/2) will result in the equivalent of a 1/4 note.

alt tag

In the above example, the sequence of drum note values is decreased over time, at each repetition.

RUN LIVE

3.2.6 Repeating Notes

alt tag

There are several ways to repeat notes. The Repeat block will play a sequence of notes multiple times; the Duplicate block will repeat each note in a sequence.

In the example, on the left, the result would be Sol, Re, Sol, Sol, Re, Sol, Sol, Re, Sol, Sol, Re, Sol; on the right the result would be Sol, Sol, Sol, Sol, Re, Re, Re, Re, Sol, Sol, Sol, Sol.

3.2.7 Swinging Notes and Tied Notes

alt tag

The Swing block works on pairs of notes (specified by note value), adding some duration (specified by swing value) to the first note and taking the same amount from the second note. Notes that do not match note value are unchanged.

In the example, re5 would be played as a 1/6 note and mi5 would be played as a 1/12 note (1/8 + 1/24 === 1/6 and 1/8 - 1/24 === 1/12). Observe that the total duration of the pair of notes is unchanged.

Tie also works on pairs of notes, combining them into one note. (The notes must be identical in pitch, but can vary in rhythm.)

alt tag

3.2.8 Set Volume, Crescendo, Staccato, and Slur

alt tag

The Set master volume block will change the master volume. The default is 50; the range is 0 (silence) to 100 (full volume).

The Set synth volume block will change the volume of a particular synth, e.g., violin, snare drum, etc. The default volume is 50; the range is 0 (silence) to 100 (full volume). In the example, the synth name block is used to select the current synth.

As a convenience, a number of standard volume blocks are provided: from loudest to quietest, there is fff, ff f, mf, mp, p, pp, and ppp. In musical terms "f" means "forte" or loud, "p" means "piano" or soft, and "m" means "mezzo" or middle.

The Set Relative Volume block modifies the clamped note's volume according to the input value of the block in an added (or subtracted when negative) percentage with respect to the original volume. For example, 100 would mean doubling the current volume.

The Crescendo block will increase (or decrease) the volume of the contained notes by a specified amount for every note played. For example, if you have 3 notes in sequence contained in a Crescendo block with a value of 5, the final note will be at 15% more than the original value for volume.

NOTE: The Crescendo block does not alter the volume of a note as it is being played. Music Blocks does not yet have this functionality.

alt tag

The Staccato block shortens the length of the actual note—making them tighter bursts—while maintaining the specified rhythmic value of the notes.

The Slur block lengthens the sustain of notes—running longer than the noted duration and blending it into the next note—while maintaining the specified rhythmic value of the notes.

3.2.9 Intervals

alt tag

The Scalar interval block calculates a relative interval based on the current mode, skipping all notes outside of the mode. For example, a fifth, and adds the additional pitches to a note's playback. In the figure, we add La to Re and Ti to Mi.

As a convenience, a number of standard scalar intervals are provided on the Intervals palette: Unison, Second, Third, ..., Seventh, Down third, and Down sixth.

The Scalar interval measure block can be used to measure the number of scalar steps between two pitched.

Absolute Intervals

Absolute (or semi-tone) intervals are based on half-steps.

alt tag

The Augmented block calculates an absolute interval (in half-steps), e.g., an augmented fifth, and adds the additional pitches to a note. Similarly, the Minor block calculates an absolute interval, e.g., a minor third. Other absolute intervals include Perfect, Diminished, and Major.

In the augmented fifth example above, a chord of D5 and A5 are played, followed by a chord of E5 and C5. In the minor third example, which includes a shift of one octave, first a chord of D5 and F5 is played, followed by chord of E5 and G6.

As a convenience, a number of standard absolute intervals are provided on the Intervals palette: Major 2, Minor 3, Perfect 4, Augmented 6, Diminished 8, et al.

The Doubly block can be used to create a double augmentation or double diminishment.

The Semi-tone interval measure block can be used to measure the number of half-steps between two pitched.

3.2.11 Inversion

The Invert block will rotate a series of notes around a target note. There are three different modes of the Invert block: even, odd, and scalar. In even and odd modes, the rotation is based on half-steps. In even and scalar mode, the point of rotation is the given note. In odd mode, the point of rotation is shifted up by a 1/4 step, enabling rotation around a point between two notes. In "scalar" mode, the scalar interval is preserved around the point of rotation.

alt tag

NOTE: The initial C5 pitch (as a half note) remains unchanged (in all of the examples) as it is outside of the invert block.

The above example code has an even inversion for two notes F5 and D5 around the reference pitch of C5. We would expect the following results:

Even inversion

Starting pitch Distance from C5 Inverse distance from C5 Ending pitch
F5 5 half steps above 5 half steps below G4
D5 2 half steps above 2 half steps below B♭4

This operation can also be visualized on a pitch clock. The arrows on the following diagram point from the starting pitch, around the axis of the reference pitch, to its destination ending pitch.

alt tag

In standard notation the result of this even inversion operation is depicted in the second measure of the following example. The first measure is the original reference.

alt tag

Underneath the even inversion in the example code is an odd inversion for the same two notes of F5 and D5 around the same reference pitch of C5. We would expect the following results:

Odd inversion

Starting pitch Distance from midway-point between C5 and C♯5 Inverse distance from midway-point between C5 and C♯5 Ending pitch
F5 4.5 half steps above 4.5 half steps below A♭4
D5 1.5 half steps below 1.5 half steps above B4

This operation can be visualized on a pitch clock similar to even inversion except offset in-between C5 and C♯5 (i.e. quarter step above C5).

alt tag

In standard notation the result of this odd inversion operation is depicted in second measure of the following example. The first measure is the original reference. NOTE: The C5 pitch remains unchanged as it is not operated upon in the example block code (above). If it were contained in the operation it would be changed to C♯5 (i.e. C5 is 0.5 half steps below the axis of rotation, so the result of an inversion around C5 and odd would be 0.5 half steps above the axis of rotation).

alt tag

Scalar inversion

Underneath the even and odd inversion blocks in the example code is an inversion block set to scalar. We would expect the following results:

Starting pitch Scalar distance from C5 (in steps) Inverse scalar distance from C5 (in steps) Ending pitch
F5 3 above (C5 --> D5 --> E5 --> F5) 3 below (C5 --> B4 --> A4 --> G4) G4
D5 1 above (C5 --> D5) 1 below (C5 --> B4) B4

This operation can be visualized on a pitch clock similar to odd and even except that all non-scalar pitches (i.e. pitches outside the chosen key) are skipped. NOTE: The scalar pitches are shown in bold in the following pitch clock diagram.

alt tag

In standard notation the result of scalar inversion operation is depicted in the second measure of the following example. The first measure is the original reference.

alt tag

In the invert (even) example above, notes are inverted around C5. In the invert (odd) example, notes are inverted around a point midway between C5 and C♯5. In the invert (scalar) example, notes are inverted around C5, by scalar steps rather than half-steps.

3.2.12 Backwards

alt tag

The Backward block will play the contained notes in reverse order (retrograde). In the example above, the notes in chunk are played as Sol, Ti, La, Sol, i.e., from the bottom to the top of the stack.

An example from Bach is provided. In the example, there are two voices, one which plays the composition forward and one that plays the same composition backward. RUN LIVE

Note that all of the blocks inside a Backward block are reverse, so use this feature with caution if you include logic intermixed with notes.

3.2.13 Setting Voice and Keys

alt tag

The Set Voice block selects a voice for the synthesizer for any contained blocks, e.g., violin or cello.

alt tag

The Set Key block will change the key and mode of the mapping between solfege, e.g., Do, Re, Mi, to note names, e.g., C, D, E, when in C Major. Modes include Major and Minor, Chromatic, and a number of more exotic modes, such as Bebop, Geez, Maqam, etc. This block allows users to access "movable Do" within Music Blocks, where the mapping of solfege to particular pitch changes depending on the user's specified tonality.

alt tag

The Define mode block can be used to define a custom mode by defining the number and size of the steps within an octave. You can use your custom mode with the Set key block.

3.2.14 Vibrato, Tremelo, et al.

alt tag

The Vibrato Block adds a rapid variation in pitch to any contained notes. The intensity of the variation ranges from 1 to 100 (cents), e.g. plus or minus up to one half step. The rate argument determines the rate of the variation.

The other effects blocks also modulate pitch over time. Give them a try.

3.3 Voices

Each Start block runs as a separate voice in Music Blocks. (When you click on the Run button, all of the Start blocks are run concurrently.)

alt tag

If we put our song into an action...

alt tag

...we can run it from multiple Start blocks.

alt tag

It gets more interesting if we shift up and down octaves.

alt tag

And even more interesting if we bring the various voices offset in time.

RUN LIVE

alt tag

An alternative to use a preprogrammed delay is to use the Broadcast block to bring in multiple voices. In the example above, after each section of the song is played, a new event is broadcasted, bringing in a new voice. Note the use of the Mouse Sync block. This ensures that the multiple voices are synced to the same master clock.

alt tag

A special Start drum version of the Start block is available for laying down a drum track. Any Pitch blocks encounted while starting from a drum will be played as C2 with the default drum sample. In the example above, all of the notes in chunk will be played with a kick drum.

3.4 Adding graphics

alt tag

alt tag

Turtle graphics can be combined with the music blocks. By placing graphics blocks, e.g., Forward and Right, inside of Note value blocks, the graphics stay in sync with the music. In this example, the turtle moves forward each time a quarter note is played. It turns right during the eighth note. The pitch is decreased by one half step, the pen size decreases, and the pen color increases at each step in the inner repeat loop.

RUN LIVE

alt tag

Another example of graphics synchronized to the music by placing the graphics commands inside of Note value blocks

RUN LIVE

alt tag

In this example, because the computation and graphics are more complex, a No-clock block is used to decouple the graphics from the master clock. The "No-clock* block prioritizes the sequence of actions over the specified rhythm.

alt tag

alt tag

Another example of embedding graphics into notes: in case, a recursive tree drawing, where the pitch goes up as the branches assend.

alt tag

RUN LIVE

3.5 Beat

The beat of the music is determined by the Meter block (by default, it is set to 4:4).

The Pickup block can be used to accommodate any notes that come in before the beat.

alt tag

Specifying beat is useful in that you can have the character of a note vary depending upon the beat. In the example below, the volume of notes on Beat 1 and Beat 3 are increased, while the volume of off beats is decreased.

alt tag

The On-Beat-Do and Off-Beat-Do blocks let you specify actions to take on specific beats. (Note that the action is run before any blocks inside the note block associated with the beat are run.)

alt tag

Another approach to graphics is to use modulate them based on the beat. In the example above, we call the same graphics action for each note, but the parameters associated with the action, such as pen width, are dependent upon which beat we are on. On Beat 1, the pen size is set to 50 and the volume to 75. On Beat 3, the pen size is set to 25 and the volume to 50. On off beats, the pen size is set to 5 and the volumne to 5. The resultant graphic is shown below.

alt tag

3.6 Interactions

There are many ways to interactive with Music Blocks, including tracking the mouse position to impact some aspect of the music.

alt tag

For example, we can launch the phrases (chunks) interactively. We use the mouse position to generate a suffix: 0, 1, 2, or 3, depending on the quadrant. When the mouse is in the lower-left quadrant, chunk0 is played; lower-right quadrant, chunk1; upper-left quadrant, chunk2; and upper-right quadrant, chunk3.

RUN LIVE

alt tag

In the example above, a simple two-key piano is created by associating click events on two different turtles with individual notes. Can you make an 8-key piano?

RUN LIVE

alt tag

You can also add a bit of randomness to your music. In the top example above, the One-of block is used to randomly assign either Do or Re each time the Note value block is played. In the bottom example above, the One-of block is used to randomly select between chunk1 and chunk2.

Musical Paint has been a popular activity dating back to programs such as Dan Franzblau's Vidsizer (1979) or Morwaread Farbood's Hyperscore (2002). Music Blocks can be used to create musical paint as well. In the somewhat ambitious example below, we go a step further than the typical paint program in that you can not only paint music (a la Vidsizer) and playback your painting as a composition (a la Hyperscore), but also generate Note blocks from your composition.

alt tag

The program works by first creating an array from the heap that corresponds to a 20x12 grid of notes on the screen: 20 columns, representing time from left to right; and 12 rows, corresponding to scalar pitch values, which increase in value from the bottom to the top.

The record action repeatedly calls the paint action until the playback button is clicked.

The paint action tracks the mouse (Set XY to cursor x and cursor y) and, if the mouse button is pressed, marks an entry in the array corresponding to that note, plays the note, and leaves behind a "drop of paint".

The playback action is invoked by clicking on the play mouse, which sets recording to 0, thus breaking out of the paint "while loop". Playback scans each column in the array from left to right for pitches to play and generates a chord of pitches for each column.

Once the playback action is complete, the save action is invoked. Again each column in the array is scanned, but this time, instead of playing notes, the Make Block block is called in order to generate a stack of notes that correspond to the composition. This stack can be copied and pasted into another composition.

While a bit fanciful, this example, which can be run by clicking on the link below, takes musical paint in a novel direction.

RUN LIVE

Widgets

Previous Section (3. Programming with Music) | Back to Table of Contents | Next Section (5. Beyond Music Blocks)

This section of the guide will talk about the various Widgets that can be used within Music Blocks to enhance your experience.

Every widget has a menu with at least two buttons.

alt tag

You can hide the widget by clicking on the Close button.

alt tag

You can move the widget by dragging it by the Drag handle.

4.1 Status

alt tag

alt tag

The Status widget is a tool for inspecting the status of Music Blocks as it is running. By default, the key, BPM, and volume are displayed. Also, each note is displayed as it is played. There is one row per voice in the status table.

Additional Print blocks can be added to the Status widget to display additional music factors, e.g., duplicate, transposition, skip, staccato, slur, and graphics factors, e.g., x, y, heading, color, shade, grey, and pensize.

alt tag

You can do additional programming within the status block. In the example above, whole notes played is divided by 4 (e.g. quarter notes) before being displayed.

4.2 Generating Chunks of Notes

Using the Pitch-Time Matrix, it is possible to generate chunks of notes at a much faster speed.

4.2.1 The Pitch-Time Matrix

alt tag

Music Blocks provides a widget, the Pitch-time Matrix, as a scaffold for getting started.

Once you've launched Music Blocks in your browser, start by clicking on the Pitch-time Matrix stack that appears in the middle of the screen. (For the moment, ignore the Start block.) You'll see a grid organized vertically by pitch and horizontally by rhythm.

alt tag

The matrix in the figure above has three Pitch blocks and one Rhythm block, which is used to create a 3 x 3 grid of pitch and time.

Note that the default matrix has five Pitch blocks, one Drum block, and two Mouse (movement) blocks. Hence, you will see eight rows, one for each pitch, drum, and mouse (movement). (A ninth row at the bottom is used for specifying the rhythms associated with each note.) Also by default, there are two Rhythm blocks, which specifies six quarter (1/4) notes followed by one half (1/2) note.

alt tag

By clicking on individual cells in the grid, you should hear individual notes (or chords if you click on more than one cell in a column). In the figure, three quarter notes are selected (black cells). First Re 4, followed by Mi 4, followed by Sol 4.

alt tag

If you click on the Play button (found in the top row of the grid), you will hear a sequence of notes played (from left to right): Re 4, Mi 4, Sol 4.

alt tag

Once you have a group of notes (a "chunk") that you like, click on the Save button (just to the right of the Play button). This will create a stack of blocks that can used to play these same notes programmatically. (More on that below.)

You can rearrange the selected notes in the grid and save other chunks as well.

alt tag

The Sort button will reorder the pitches in the matrix from highest to lowest and eliminate any duplicate Pitch blocks.

alt tag

There is also an Erase button that will clear the grid.

Don't worry. You can reopen the matrix at anytime (it will remember its previous state) and since you can define as many chunks as you want, feel free to experiment.

Tip: You can put a chunk inside a Pitch-time Matrix block to generate the matrix to corresponds to that chunk.

alt tag

The chunk created when you click on the matrix is a stack of blocks. The blocks are nested: an Action block contains three Note value blocks, each of which contains a Pitch block. The Action block has a name automatically generated by the matrix, in this case, chunk. (You can rename the action by clicking on the name.). Each note has a duration (in this case 4, which represents a quarter note). Try putting different numbers in and see (hear) what happens. Each note block also has a pitch block (if it were a chord, there would be multiple Pitch blocks nested inside the Note block's clamp). Each pitch block has a pitch name (Re, Mi, and Sol), and a pitch octave; in this example, the octave is 4 for each pitch. (Try changing the pitch names and the pitch octaves.)

To play the chuck, simply click on the action block (on the word action). You should hear the notes play, ordered from top to bottom.

4.2.2 The Rhythm Block

alt tag

Rhythm blocks are used to generate rhythm patterns in the Pitch-time Matrix block. The top argument to the Rhythm block is the number of notes. The bottom argument is the duration of the note. In the top example above, three columns for quarter notes would be generated in the matrix. In the middle example, one column for an eighth note would be generated. In the bottom example, seven columns for 16th notes would be generated.

alt tag

alt tag

You can use as many Rhythm blocks as you'd like inside the Pitch-time Matrix block. In the above example, two Rhythm blocks are used, resulting in three quarter notes and six eighth notes.

4.2.3 Creating Tuplets

alt tag

alt tag

Tuplets are a collection of notes that get scaled to a specific duration. Using tuplets makes it easy to create groups of notes that are not based on a power of 2.

In the example above, three quarter notes—defined in the Simple Tuplet block—are played in the time of a single quarter note. The result is three twelfth notes. (This form, which is quite common in music, is called a triplet. Other common tuplets include a quintuplet and a septuplet.)

alt tag

In the example above, the three quarter notes are defined in the Rhythm block embedded in the Tuplet block. As with the Simple Tuplet example, they are played in the time of a single quarter note. The result is three twelfth notes. This more complex form allows for intermixing multiple rhythms within single tuplet.

alt tag

alt tag

In the example above, the two Rhythm blocks are embedded in the Tuplet block, resulting in a more complex rhythm.

Note: You can mix and match Rhythm blocks and Tuplet blocks when defining your matrix.

4.2.4 What is a Tuplet?

alt tag

alt tag

4.2.5 Using Individual Notes in the Matrix

alt tag

You can also use individual notes when defining the grid. These blocks will expand into Rhythm blocks with the corresponding values.

4.2.6 Using a Scale of Pitches in the Matrix

alt tag

You can use the Scalar step block to generate a scale of pitches in the matrix. In the example above, the pitches comprising the G major scale in the 4th octave are added to the grid. Note that in order to put the highest note on top, the first pitch is the Sol in Octave 5. From there, we use -1 as the argument to the Scalar step block inside the Repeat, working our way down to Sol in Octave 4. Another detail to note is the use of the Mode length block.

4.3 Generating Rhythms

The Rhythm Maker block is used to launch a widget similar to the Pitch-time Matrix block. The widget can be used to generate rhythmic patterns.

alt tag

The argument to the Rhythm Maker block specifies the duration that will be subdivided to generate a rhythmic pattern. By default, it is 1 / 1, e.g., a whole note.

The Set Drum blocks contained in the clamp of the Rhythm Maker block indicates the number of rhythms to be defined simultaneously. By default, two rhythm "rulers" are defined. The embedded Rhythm blocks define the initial subdivision of each rhythm ruler.

alt tag

When the Rhythm Maker block is clicked, the Rhythm Maker widget is opened. It contains a row for each rhythm ruler. An input in the top row of the widget is used to specify how many subdivisions will be created within a cell when it is clicked. By default, 2 subdivisions are created.

alt tag

As shown in the above figure, the top rhythm ruler has been divided into two half-notes and the bottom rhythm ruler has been divided into three third-notes. Clicking on the Play button to the left of each row will playback the rhythm using a drum for each beat. The Play-all button on the upper-left of the widget will play back all rhythms simultaneously.

alt tag

The rhythm can be further subdivided by clicking in individual cells. In the example above, two quarter-notes have been created by clicking on one of the half-notes.

alt tag

By dragging across multiple cells, they become tied. In the example above, two third-notes have been tied into one two-thirds-note.

alt tag

The Save stack button will export rhythm stacks.

alt tag

These stacks of rhythms can be used to define rhythmic patterns used with the Pitch-time Matrix block.

alt tag

The Save drum machine button will export Start stacks that will play the rhythms as drum machines.

Another feature of the Rhythm Maker wigdet is the ability to tap out a rhythm. By clicking on the Tap button and then clicking on a cell inside one of the rhythm rulers, you will be prompted (by four tones) to begin tapping the mouse button to divide the cell into sub-cells. Once the fourth tone has sounded, a progress bar will run from left to right across the screen. Each click of the mouse will define another beat within the cell. If you don't like your rhythm, use the Undo button and try again.

4.4 Musical Modes

Musical modes are used to specify the relationship between intervals (or steps) in a scale. Since Western music is based on 12 half-steps per octave, modes speficy how many half steps there are between each note in a scale.

By default, Music Blocks uses the Major mode, which, in the Key of C, maps to the white keys on a piano. The intervals in the Major mode are 2, 2, 1, 2, 2, 2, 1. Many other common modes are built into Music Blocks, including, of course, Minor mode, which uses 2, 1, 2, 2, 1, 2, 2 as its intervals.

Note that not every mode uses 7 intervals per octave. For example, the Chromatic mode uses 11 intervals: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1. The Japanese mode uses only 5 intervals: 1, 4, 2, 3, 2],. What is important is that the sum of the intervals in an octave is 12 half-steps.

The Mode length block will return the number of intervals (scalar steps) in the current mode.

alt tag

The Mode widget lets you explore modes and generate custom modes. You invoke the widget with the Custom mode block. The mode specified in the Set key block will be the default mode when the widget launches.

alt tag

In the above example, the widget has been launched with Major mode (the default). Note that the notes included in the mode are indicated by the black boxes, which are arrayed in a circular pattern of tweleve half-steps to complete the octave.

Since the intervals in the Major mode are 2, 2, 1, 2, 2, 2, 1, the notes are 0, 2, 4, 5, 7, 9,11, and 12 (one octave above 0).

The widget controls run along the toolbar at the top. From left to right are:

Play all, which will play a scale using the current mode;

Save, which will save the current mode as the Custom mode and save a stack of Pitch blocks that can be used with the Pitch-time Matrix block;

Rotate counter-clockwise, which will rotate the mode counter-clockwise (See the example below);

Rotate clockwise, which will rotate the mode clockwise (See the example below);

Invert, which will invert the mode (See the example below);

Undo, which will restore the mode to the previous version; and

Close, which will close the widget.

You can also click on individual notes to activate or deactivate them.

Note that the mode inside the Custom mode block is updated whenever the mode is changed inside the widget.

alt tag

In the above example, the Major mode has been rotated clockwise, transforming it into Dorian.

alt tag

In the above example, the Major mode has been rotated counter-clockwise, transforming it into Locrian.

alt tag

In the above example, the Major mode has been inverted, transforming it into Phrygian.

Note: The build-in modes in Music Blocks can be found in musicutils.js.

alt tag

The Save button exports a stack of blocks representing the mode that can be used inside the Pitch-time Matrix block.

4.5 The Pitch-Drum Matrix

alt tag

The Set Drum block is used to map the enclosed pitches into drum sounds. Drum sounds are played in a monopitch using the specified drum sample. In the example above, a kick drum will be substitued for each occurance of a Re 4.

alt tag

alt tag

alt tag

alt tag

As an experience for creating mapping with the Set Drum block, we provide the Drum-Pitch Matrix. You use it to map between pitches and drums. The output is a stack of Set Dum blocks.

4.6 Exploring Musical Proportions

The Pitch Staircase block is used to launch a widget similar to the Pitch-time Matrix, which can be used to generate different pitches using a given pitch and musical proportion.

The Pitch blocks contained in the clamp of the Pitch Staircase block define the pitches to be initialized simultaneously. By default, one pitch is defined and it have default note "la" and octave "3".

alt tag

When Pitch Staircase block is clicked, the Pitch Staircase widget is initialized. The widget contains row for every Pitch block contained in the clamp of the Pitch Staircase block. The input fields in the top row of the widget specify the musical proportions used to create new pitches in the staircase. The inputs correspond to the numerator and denominator in the proportion resectively. By default the proportion is 3:2.

alt tag

alt tag

alt tag

Clicking on the Play button to the left of each row will playback the notes associated with that step in the stairs. The Play-all button on the upper-left of the widget will play back all the pitch steps simultaneously. A second Play-all button to the right of the stair plays in increasing order of frequency first, then in decreasing order of frequency as well, completing a scale.

The Save stack button will export pitch stacks. For example, in the above configuration, the output from pressing the Save stack button is shown below:

alt tag

These stacks can be used with the Pitch-time Matrix block to define the rows in the matrix.

alt tag

4.7 Generating Arbritary Pitches

The Pitch Slider block is used to launch a widget that is used to generate arbitray pitches. It differs from the Pitch Staircase widget in that it is used to create frequencies that vary continuously within the range of a specified octave.

Each Sine block contained within the clamp of the Pitch Slider block defines the initial pitch for an ocatve.

alt tag

alt tag

When the Pitch Slider block is clicked, the Pitch Slider widget is initialized. The widget will have one column for each Sine block in the clamp. Every column has a slider that can be used to move up or down in frequency, continuously or in intervals of 1/12th of the starting frequency. The mouse is used to move the frequency up and down continuously. Buttons are used for intervals. Arrow keys can also be used to move up and down, or between columns.

alt tag

alt tag

Clicking in a column will extact the corresponding Note blocks, for example:

alt tag

alt tag

alt tag

4.8 Changing Tempo

The Tempo block is used to launch a widget that enables the user to visualize Tempo, defined in beats per minute (BPM). When the Tempo block is clicked, the Tempo widget is initialized.

The Master Beats per Minute block contained in the clamp of the Tempo block sets the initial tempo used by the widget. This determines the speed at which the ball in the widget moves back and forth. If BPM is 60, then it will take one second for the ball to move across the widget. A round-trip would take two seconds.

alt tag

The top row of the widget holds the Play/pause button, the Speed up and Slow down buttons, and an input field for updating the Tempo.

alt tag

You can also update the tempo by clicking twice in spaced succession in the widget: the new beats per minute (BPM) is determined as the time between the two clicks. For example, if there is 1/2 second between clicks, the new BPM will be set as 120.

4.9 Custom Timbres

While Music Blocks comes with many built-in instruments, it is also possible to create custom timbres with unique sound qualities.

alt tag

The Timbre block can be used to launch the Timbre widget, which lets you add synthesizers, oscillators, effects, and filters to create a custom timbre, which can be used in your Music Blocks programs.

The name of the custom timbre is defined by the argment passed to the block (by default, custom). This name is passed to the Set timbre block in order to use your custom timbre.

alt tag

The Timbre widget has a number of different panels, each of which is used to set the parameters of the components that define your custom timbre.

From left to right:

alt tag

  • The Play button, which lets you test the sound quality of your custom timbre. By default, it will play Sol, Mi, Sol using the combination of filters you define.

alt tag

You can also put notes in the Timbre block to use for testing your sound. In the example above, a scale will be used for the test.

alt tag

  • The Save button, which will save your custom timbre for use in your program.

alt tag

  • The Synth button, which lets you choose between an AM synth, a PM synth, or a Duo synth.

alt tag

  • The Oscillator button, which lets you choose between a sine wave, square wave, triangle wave, or sawtooth wave. You can also change the number of partials.

alt tag

  • The Envelope button, which lets you change the shape of the sound envelope, with controls for attack, decay, sustain, and release.

alt tag

  • The Effects button, which lets you add effects to your custom timbre: tremelo, vibrato, chorus, phaser, and distortion. When an effect is selected, additional controls will appear in the widget.

alt tag

  • The Filter button, which lets you choose between a number of different filter types.

alt tag

  • The Add filter button, which lets you add addition filters to your custom timbre.

alt tag

  • The Undo button.

alt tag

  • The Close button.

alt tag

  • The Drag handle.

As you add synthesizers, effects, and filters with the widget, blocks corresponding to your choices are added to the Timbre block. This lets you reopen the widget to fine-tune your custom timbre.

4.10 Music Keyboard

The Music Keyboard is used to generate notes by pressing keys of a virtual keyboard.

When there are no Pitch blocks inside the widget clamp, a keyboard with all keys between C4 and G5 is created.

alt tag

When there are Pitch blocks inside the widget clamp, a keyboard with only those pitches is created.

alt tag

Click on the keys to hear sounds. Click on the Play button to playback all of the notes played. Click on the Save button to output code (a series of Note blocks). The Clear button is used to delete all keys pressed previously in order to start new.

4.11 Changing Temperament

Tempering is the process of altering the size of an interval by making it narrower or wider than pure. It is also possible to change and create different tuning systems.

alt tag

The Temperament block is used to launch a widget that enables the user to visualize and edit notes within an octave.

You can select a temperament system from the pie menu which is passed as an argument to the block. This name is passed to the Set temperament block in order to play the notes in selected temperament system. Starting Pitch is the argument of pitch block inside temperament block. In the above example, starting pitch is C4.

alt tag

In the above example, selected temperament is Just Intonation. Notes within an octave can be viewed in the form of circle. These circles represent pitch numbers. Note that the pitches that are closer together in selected temperament system are visually closer and pitches that are farther apart looks farther.

The information regarding any note can be viewed by clicking on the respective circle. In the above example, circle (pitch number) 2 is D4. The frequency of note can be changed through edit button (left hand side corner of note information popup).

alt tag

Information regarding notes can also be viewed in the form of a table as shown in the above example. The table will show all the information about pitches that lie within an octave. This information includes pitch number, interval, ratio, note, frequency and mode.

The frequency of any note is calculated by Starting Pitch Frequency x Ratio.

The widget controls are as follows:

The Clear button at the bottom of the widget will clear all pitches except for a single 0 from which the user may add pitches.

The Play all button will play through all the pitches in an octave and then it will play backwards down the pitches.

The Save button will save custom temperament for use in your program. It will create a set temperament block. This block will tune the notes attached to it according to the selected temperament.

The Table button is used to toggle between circular and tabular representation of notes.

The Add button is used to edit notes through different tools:

alt tag

The Equal edit tool is used to make equal divisions between two pitch numbers. In the above example, two equal divisions are made between pitch numbers 0 and 1 and the resultant number of notes within an octave are changed from 12 to 13.

alt tag

The Ratio tool is used to add notes of specified ratios in such a way that the resultant pitches wrap inside a single octave. Recursion represents the number of times notes ratio calculation is repeated. In the above example, 2 notes are added in pitch space and the resultant number of notes within an octave are changed from 12 to 14. Frequency of first pitch is (Starting Pitch Frequency) * (16/13) and second pitch is (Starting Pitch Frequency) * (16/13)².

alt tag

The Arbitrary edit tool is used to add a note in an arbitrary position. In this panel, whenever the user hovers over the outer circle, a frequency-slider window pops up, allowing the user to add a note according to a chosen frequency. In the above example, a new note will be added somewhere between pitch numbers 2 and 3 by adjusting the frequency slider.

alt tag

The Octave Space tool is used to edit the octave ratio. The standard octave space is 2:1. In the above example, octave space will be changed to 3:1 after clicking on Done.

The Drag button will drag the widget.

The Close button will close the widget.

Beyond Music Blocks

Previous Section (4. Widgets) | Back to Table of Contents

Music Blocks is a waypoint, not a destination. One of the goals is to point the learner towards other powerful tools. One such tool is Lilypond, a music engraving program.

alt tag

The Save as Lilypond block will transcribe your composition. The output of the program above is saved to Downloads/hotdog.ly. There is also a Save as Lilypond button on the secondary toolbar.

Note that if you use a Print block inside of a note, Lilypond will create a "markup" or annotation for that note. It is a simple way to add lyrics to your score.

alt tag

\version "2.18.2"

mouse = {
c'8 c'8 c'8 c'8 c'4 c'4 g'8 g'8 g'8 g'8 g'4 g'4 a'8 a'8 a'8 a'8 a'4
a'4 g'8 g'8 g'8 g'8 g'4 g'4 f'8 f'8 f'8 f'8 f'4 f'4 e'8 e'8 e'8 e'8
e'4 e'4 d'8 d'8 d'8 d'8 d'4 d'4 c'8 c'8 c'8 c'8 c'4 c'4
}

\score {
<<
\new Staff = "treble" {
\clef "treble"
\set Staff.instrumentName = #"mouse" \mouse
}
>>
\layout { }
}

alt tag

RUN LIVE