Composition Blog 2

This composition is a continuation of the small example from the orchestration tutorial. It documents incremental updates, additions and improvements while building a larger piece. The tutorial example started like this.

function Main()
{
  @span = 20;
  @scale = [0, 2, 4, 6, 8];
  @Split(
    () => {
      @release += 2;
      @Split(
        () => @chord = [0,2,4,7],
        () => @chord = [0,3,4,6],
        () => { @chord = [0,2,5,6]; @release += 8; }
      ).Then(i => @harmony -= i);
      //add the bass
      @Clone(() => {
          @octave -= 1;
          @Slice().Then(i => {
            if (i > 1) @Rest(); //take the lowest two chord notes
            //writing @chord = [0,2] instead would be wrong as the 2nd chord has [0,3] as the lowest notes
          });
      });
    },
    () => {
      @instrument = "flute";
      @chord = [0];
      @Split(
          () => @SetMelody([5,6,5,4]),
          () => @SetMelody([5,6,5,4]),
          () => @Slice(() => @degree = 3, () => @instrument = "piano"));
    },
    () => {
      @release += 4;
      @octave -= 1;
      @Split(
          () => @chord = [0,3,4,6],
          () => @chord = [0,4,5,6]
      ).Then(i => @harmony -= i);
  });
}

function SetMelody(IList<int> melody) => @Split(melody.Count).Then(i => @degree = melody[i]);
23.00 s

In the first place I decided to extend the motive a little bit, giving the solo instrument a different motive. The chords in response stay about the same with just a little change.

function Main()
{
  @span = 24;
  @scale = [0, 2, 4, 6, 8];
  var soloInstrument = "flute";
  @Split(
    () => {
      @release += 2;
      @Split(
        () => @chord = [0,2,4,7],
        () => @chord = [0,3,4,6],
        () => { @chord = [0,2,5,6]; @release += 8; }
      ).Then(i => @harmony -= i);
      //add the bass
      @Clone(() => {
          @octave -= 1;
          @Slice().Then(i => { if (i > 1) @Rest(); });
      });
    },
    () => {
      //@instrument = soloInstrument;
      @chord = [0];
      @Split(
          () => @Motive([5,6,5,4]),
          () => @Motive([5,6,5,4]),
          () => @Slice(() => @degree = 3, () => @instrument = "piano"));
    },
    () => {
      @release += 4;
      @octave -= 1;
      @Split(
          () => @chord = [0,3,4,6],
          () => @chord = [0,4,5,6]
      ).Then(i => @harmony -= i);
    },
    () => {
      //@instrument = soloInstrument;
      @scale += 10;
      @Split(
          () => @Motive([0,1,2,3,4,5,6,7]),
          () => @Motive([8,7,6,4]),
          () => @Slice(() => @degree =  2, () => @instrument = "piano"));
    },
    () => {
      @release += 4;
      @octave -= 1;
      @Split(
          () => @chord = [0,1,4,6],
          () => @chord = [0,3,5,6]
      ).Then(i => @harmony -= i);
    });
}
27.00 s
Search for something