Main Index
Tutorials Index
'Groucho' Index
File Formats

Prepare soundfile
Complex textures
Detailed commentary
Each parameter
Composer tips

Procedure Suggestions

CDP circles logo
Composers' Desktop Project

'BIG-ONE' – A GrainMill Example with
Time-varying Breakpoint Files

prepared and annotated by Archer Endrich

CONTENTS

  • Prepare the example soundfile
  • Approaching complex textures
  • Detailed commentary on the example
  • Studying the contribution of each parameter
  • Summary of composer tips

  • Procedure Suggestions

Preparing the Soundfile

Infile (input) & Outfile (result)
Soundfiles .GRN File What you hear:
balsam None Input soundfile: P. Karkut saying 'balsam of nature', mono, 1.9 sec.
bigone bigone.grn Complex, multi-breakpoint example which seeks to unfurl the spoken text into a dramatic, but controlled texture.


NB:  To make the output soundfile Open the balsam soundfile and Load bigone.grn. You will also need to edit the output duration box to 29.5. It doesn't know how to do this itself because it doesn't know what's in the Timestretch breakpoint file. If you find that some of the source material is being truncated, make the output duration longer. Click on Make it and Save As bigone.wav. See Procedure Suggestions.

Return to top of file.

Approaching the Study and Creation of Complex Textures

Bigone has been devised as a way of illustrating the controlled texturing of material.

Firstly, a sound editor was used to display the soundfile and determine where the different consonants and syllables occurred. These time points were then used in the breakpoint files to 'unfurl' the sound in various ways.

Alternatively, you can extract the amplitude envelope of the sound, using File/Extract from sfile in the Breakpoint Editor. You will probably need to cut down on the number of time-points displayed, using Edit/Reduce; then you will have something manageable as a breakpoint file. You can then use this file directly as a starting point for time-contours related to the amplitude profile of the original sound.

The salient features of the sound, the spoken text can be shown as follows, with their time points.

Time-point analysis of sonic features
Time-points 0.0 0.23 0.44 0.69 0.85 1.01 1.11 1.39 1.49 1.63
Syllables Bal .... s ...... sam .... '        of ..... n ...... Na ..... t ...... tu ..... ure ....

To map out what happens and how the various breakpoint files interact, I relate everything to the input file time-points (as above). I haven't worked out how to draw all the parameters graphically on one diagram, so I employ the following compromise solution. (I have template pages on which to make these diagrams, so I don't have to start from scratch each time.)

  1. I write out a grid of regularly spaced time points.


  2. Above that, I spread out the salient features of the sound, as syllables if text, graphically in some way if not.
  3. Above that I place the specific time-points at which these salient features occur.


  4. On the very top I write the Timestretch values, locating them above the parts of the sound to which they relate. In this case, they are timed to match exactly the placement of the syllables.


  5. Below the regular time-grid I draw out the upper and lower pitch transposition time contours, with a central axis at 0.


  6. Below that I write a line of Density values, locating them where they belong against the sound.


  7. Below the Density line I write a line of Grainsize values, also locating them where they belong against the sound.


  8. Then, looking at the Density and Grainsize values, I (as best I can) fill in the space between the upper and lower pitch traces in a way which reflects their values.
This gives me a reasonably graphic representation of what I'm doing, which I can listen to during playback and consider what changes to the parameters might be effective. Taking the trouble to map things out like this will probably only be useful for achieving very precise effects or for study purposes.

Another important tool is the File/Compare with function in the Breakpoint Editor. Using this tool, one can see how one breakpoint file maps against another, whether the upper and lower traces of the same parameter, or the time contours for two different parameters. In practice, this is the quickest and most direct way to 'work' one parameter against another, such as Timestretch and Density.

Return to top of file.

Commentary on each syllable of the example

  • Bal – The (output) sound begins with a high Density set within a tight pitch range, which slowly expands a little bit. The Density gradually lessens (20 to 9.5) during this section, to ease off after the initial 'plosive', and the Grainsize expands from 39 to 91 (ms) to make the texture smoother as the Density lessens. The Timestretch is fairly high (18), but also lessening, as a part of the 'easing off'.


  • s – I wanted to focus on the s's here, creating a whole texture of just s's. Timestretch, Density and Grainsize all increase in order to achieve this, while the pitch range expands just a little more.


  • sam – Timestretch, Density and Grainsize continue to increase as the 's' merges into the 'sam'. The lower pitch trace drops to deepen the tone as the texture thickens.


  • ' – With the closing of the 'm', there is almost a complete gap in the sound, so all parameters immediately drop to lower values. Density drops to 2 and Timestretch to 3, which, relative to the rest of the sound, closes up most of the gap. It is held at 3 during this gap by an additional time-point just before the next section. This keeps it from expanding during the section.


  • of – The pitch contouring is used to place the 'of' grains into an upward rising funnel. Timestretch is changed to 10 and is held there while Density begins a dramatic rise towards 19. At the same time, the Grainsize gradually reduces to 35 ms, making a transition to the next two sections, where many short grains populate a wide pitch range and the longest expansion of material in the sound.


  • n – As is the way with speech, the consonant 'n' starts to appear before the full voiced syllable 'Na', so this becomes a section in itself. In particular, Timestretch starts to move again, going from 10 to 24 in the space of 0.1 sec of infile. This helps make a transition into the texture which follows.


  • Na – This becomes the strongest gesture of the whole sound, with the highest transposition supported by a wide pitch range and the highest values for Timestretch (24), Density (19) and the 2nd smallest value for Grainsize (35 ms).


  • t – Again, the 't' precedes the 'ture' by a little bit, and to make the most of it, Timestretch and Density stay high, though reduced slightly, and Grainsize stays at 35 ms. However, the pitch transpositions begin a descent, moving towards the final 'cadence' of the sound.


  • tu – Now Timestretch and Density are allowed to lessen, to 14 and 12 respectively, while Grainsizes begin to elongate. The pitch traces draw together, moving towards the original pitch level of the sound. These features are all 'cadential' in nature (closing, focusing, easing).


  • ure – With the pitch traces focusing in on 0 and the Timestretch reducing to 9.8, a slight increase in Density (to 10) and in Grainsize (to 14) give a bit of flurry at the end in an attempt to capture and make something of the last bits of the 'ure', which has a tendency to fade away too suddenly.

Return to top of file.

Studying the contribution of each parameter

Ensure that bigone.grn is Loaded and in its original state. How each parameter contributes to the result, and in particular, the role of each breakpoint file, can then be observed by taking it away. You can do this by making the following adjustments in the dialogue box, Making and Playing the result each time. With 'write to named output' NOT ticked in Options/Settings, you can work with temporary files which are only Saved to disk if you explicitly choose to do so.

NB:   Make these changes to each parameter individually, restoring the original value of the previous parameter before moving on to the next parameter. Most of the time this is done simply by re-ticking the breakpoint file(s).

  1. Move Timestretch to 1 – This is the Default value and comes up automatically when you untick the breakpoint file. This wipes out just about every other effect and even truncates the file (whether you leave the long time in place or move the slider, which resets it to the length of the infile. This illustrates how the Timestretch parameter has been honed in bigone.grn to give all the other effects the time they need to unfold.


  2. Move Density to 2 – Having unticked the breakpoint file and moved the Density slider to 2, the resulting sound is stretched out as before, but the even spread of grains takes a good deal of the definition, the sense of 'gesture', out of the pitch shapes. One hears the pitch shapes as more of a steady contour-arc. Density is used here, therefore, to intensify the gestures.


  3. Move Grainsize to 106 ms – This Default value will pop up when you untick the breakpoint file. This has less of a dramatic effect on the result than the previous alterations. However, it does smooth out the texture, whereas the use of smaller grains at key points served to intensify the density and strengthen the gesture.


  4. Move Grainsize to 24 ms –
    Be careful here. Moving the Grainsize slider again has the extra effect of resetting the output duration to the length of the infile. So you need to edit the output duration box, re-entering the desired duration (28.8); otherwise, the soundfile will be severely truncated. Both the Timestretch and the Grainsize parameter sliders operate in this way, because they both affect the output duration in a way which the program cannot know yet. The Rule of Thumb is first to move the slider and then to re-entere the output duration.
    The effect of the small grainsize is to produce an evenly dense texture. The intense, swarming effect can be useful, but again reduces the gestural definition of the sound.


  5. Move Grainsize to 200 ms – Now each grain will contain a bigger chunk of the infile (0.2 sec), long enough to pick up some semantic sense in each grain. The result is, therefore, that of a disjointed, fragmented vocal outpouring. (Increasing the Wander parameter would augment this effect – see below).


  6. Move Pitch to 0 – The original Grainsize breakpoint file is restored now, but both upper and lower pitch traces are disabled and the Pitch transposition value is set at 0. This produces a very interesting result. The source soundfile itself has a natural pitch contour, which is still there. The Timestretch and grain Density time contours are operating, but the dense texture stays focused on the sound's original, natural pitch contour instead of spreading out as before. Thus we hear a resonant, textured, but very focused version of the original, moving along its original contour like a swarm of insects moving in a thin line. Whether this brings out the best in this particular infile is a good question, but it is certainly an effect which will serve a useful compositional purpose.


  7. Move Loudness to a constant -9.6dB – The pitch contours are restored, so everything is as it was, except that now all the grains are equally loud. You may agree that his also 'pulls the texture together', making it sound more even and focused. The previous wide range of grain amplitudes created a more disparate, mottled, effect – a richer texture, yes, but not always what you might want.


  8. Move Space to Centre – The Loudness breakpoint file is restored, and the Space ones disabled. To my ear, this makes the sound too focused and counteracts the presence of multiple grains. Perhaps it seems 'unnatural' to have them all in one place. Spatial diffusion and random values seem to play an important role in multi-event textures, of which so many are known to us through the natural world (e.g., rain). So we notice these things. Fractal processes may bring us even closer to a feeling of 'naturalness' in textured music.


  9. Move Wander to its maximum (1.9) – The Loudness range is restored, so only Wander is different from before. Amazing! This causes a huge increase in the degree of chaos in the texture, because each grain is being taken from somewhere else within a (moving) 1.9 sec chunk (search range) of infile.

Return to top of file.

Summary of Composer Tips

  • Spend some time listening to Nature's many multi-event textures (rain, insects, thunder, running water, frogs, starlings, sparrows and other bird groups, wind through leaves, hooves of herds on the move, crashing waves, etc. Ask: what is the morphology of the component 'grains', and what are some possible psychological analogues of such morphologies? Do any sonic 'gestures' stand out? What pitch and density contours can be identified? Similarly for people-created multi-event urban textures.


  • Prepare a soundfile for input which has the kind of timbral and gestural components and changes which you want to develop in your granular sound. This gives you more of a start than a steady-state sound would.


  • Identify the timing of key events in your infile. This makes it possible to shape this input with precision. (Breakpoint file times relate to the infile.)


  • Where there is a wide pitch range, a low Density will result in very few and very sporadic grains. If you are imagining this wide vertical pitch range filled up with a rich texture, use a Density high enough to achieve this.


  • Similarly, if you place a large pitch range and a high Density somewhere, but your Timestretch is negligible, there may be very little time in which the multi-events can take place. You may therefore also want to give things a little more time by increasing the Timestretch during this passage.


  • Remember the Rule of Thumb about the Timestretch and Grainsize parameters: move the slider first, and then adjust the output duration.

Return to top of file.


Procedure Suggestions

  • Invoke this HTML Study file and start up GrainMill by double-clicking on their name or icon, respectively.


  • In GrainMill, Open the input soundfile balsam.wav.


  • In GrainMill, under Options/Settings:
    • Set the Working Directory to the directory where the .GRN files example (and balsam – or another soundfile of about the same duration (10 secs) are located.
    • You are recommended not to select 'Write to named outfile' (i.e., leave it unticked); then you can try out different parameter settings while writing to temporary files, only saving when you choose to do so (using Save As).
    • Tick 'Keep Dialog Visible' so it's readily available for Loading new .GRN files or making changes to the parameters.


  • In GrainMill, Load bigone.grn, Make the sound, and Save Soundfile as bigone (with the appropriate extension for your system).


  • When loading the .GRN file, in all probability you will be given a message stating that your current directory and the directory named in the .GRN file are not the same, and asked if you want to change to the 'new directory'. The 'new directory' would be the one named in the .GRN file, so the answer is NO, i.e., you want to stay in the working directory you've already selected. If you then re-save the .GRN file, the new version of the file will contain a reference to your own directory setup.


  • Go back to this HTML Play file and play the sound you've just made, comparing input and output: balsam and bigone.
  • You can see all the parameter settings in the GrainMill dialog box, but it might also be useful to print them out. These are the files with the .txt extension. You can also save your own settings as a text file with Save as Text.


  • Hint:  Use File/Compare with in the Breakpoint Editor to see both the upper and lower breakpoint traces for a parameter at the same time. You will probably need to click on the Align Vertical button.


  • Using the temporary file mechanism in GrainMill, you can try out other changes to the parameters in a non-destructive way, i.e., leaving the saved soundfile in tact. You only overwrite it if you Save. You can of course Save As some interesting sonic result to a new soundfile name.


  • You can also use this HTML Play file as a place to edit in your own comments about the example or even to add your own examples.


Last Updated 30 Oct 2021 -- HTML5 version
Revisions: Robert Fraser
Documentation: Archer Endrich
Text last updated: 23 July 1999
Release 5 revisions: 19 May 2005
5 October 2005
mp3 format changes: 21 February 2010 (sources or near sources are kept as wav)
Thanks to Peter Karkut for permitting the use of his soundfile.
Composers Desktop Project
Email: composersdesktop@gmail.com
© Copyright 1998-2021 Archer Endrich & CDP