FoscIteration

Returns a FoscIteration.


Description

Iterates objects


Attributes Summary

Instance Properties

client Gets client.
asCompileString

Instance Methods

components
leafPairs
leaves
logicalTies
outOfRange
pitchPairs
pitches
runs
timeline !!!TODO: protoype can not currently be FoscLogicalTie
timelineByLogicalTies
verticalMoments


Usage

  1. Iterates notes.

    a = FoscLeafMaker().(#[60,62,64,65,67,69], [1/8]);
    b = [];
    FoscIteration(a).components.do { |each| b = b.add(each.cs) };
    b.join("\n");
    FoscNote('C4', 1/8)
    FoscNote('D4', 1/8)
    FoscNote('E4', 1/8)
    FoscNote('F4', 1/8)
    FoscNote('G4', 1/8)
    FoscNote('A4', 1/8)


Instance Properties


client

Gets client.

Returns component or selection.

  1. Example

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,65], [1/4]));
    FoscIteration(a).client;
    FoscStaff([  ], 'Staff', false)
  2. Example

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,65], [1/4]));
    FoscIteration(a[0..]).client;
    FoscSelection([ FoscNote(FoscPitch("C4"), FoscDuration(1, 4)), FoscNote(FoscPitch("D4"), FoscDuration(1, 4)), FoscNote(FoscPitch("E4"), FoscDuration(1, 4)), FoscNote(FoscPitch("F4"), FoscDuration(1, 4)) ])


asCompileString


Instance Methods


components

  1. Example

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,65,67,69], [1/8]));
    b = [];
    FoscIteration(a).components.do { |each| b = b.add(each.cs) };
    b.join("\n");
    FoscStaff([  ], 'Staff', false)
    FoscNote('C4', 1/8)
    FoscNote('D4', 1/8)
    FoscNote('E4', 1/8)
    FoscNote('F4', 1/8)
    FoscNote('G4', 1/8)
    FoscNote('A4', 1/8)
  2. Example

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,65,67,69], [1/8]));
    b = [];
    FoscIteration(a).components(prototype: FoscNote).do { |each| b = b.add(each.cs) };
    b.join("\n");
    FoscNote('C4', 1/8)
    FoscNote('D4', 1/8)
    FoscNote('E4', 1/8)
    FoscNote('F4', 1/8)
    FoscNote('G4', 1/8)
    FoscNote('A4', 1/8)
  3. Example

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,65,67,69], [1/8]));
    b = [];
    FoscIteration(a).components(FoscNote, reverse: true).do { |each| b = b.add(each.cs) };
    b.join("\n");
    FoscNote('A4', 1/8)
    FoscNote('G4', 1/8)
    FoscNote('F4', 1/8)
    FoscNote('E4', 1/8)
    FoscNote('D4', 1/8)
    FoscNote('C4', 1/8)


leafPairs

  1. !!!TODO: is this method needed? can just do:

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,65,67,69], [1/8]));
    o = [];
    FoscIteration(a).leaves.doAdjacentPairs { |a, b| o = o.add([a.str, b.str]) };
    o.join("\n");
    [ c'8, d'8 ]
    [ d'8, e'8 ]
    [ e'8, f'8 ]
    [ f'8, g'8 ]
    [ g'8, a'8 ]


leaves

  1. iterate all leaves

    a = FoscLeafMaker().(#[60,62,nil,65,67,nil], [1/8]);
    o = [];
    FoscIteration(a).leaves.do { |each| o = o.add(each.cs) };
    o.join("\n");
    FoscNote('C4', 1/8)
    FoscNote('D4', 1/8)
    FoscRest(1/8)
    FoscNote('F4', 1/8)
    FoscNote('G4', 1/8)
    FoscRest(1/8)
  2. iterate pitched leaves

    a = FoscLeafMaker().(#[60,62,nil,65,67,nil], [1/8]);
    o = [];
    FoscIteration(a).leaves(pitched: true).do { |each| o = o.add(each.cs) };
    o.join("\n");
    FoscNote('C4', 1/8)
    FoscNote('D4', 1/8)
    FoscNote('F4', 1/8)
    FoscNote('G4', 1/8)
  3. iterate non-pitched leaves

    a = FoscLeafMaker().(#[60,62,nil,65,67,nil], [1/8]);
    o = [];
    FoscIteration(a).leaves(pitched: false).do { |each| o = o.add(each.cs) };
    o.join("\n");
    FoscRest(1/8)
    FoscRest(1/8)
  4. iterate all leaf pairs

    a = FoscLeafMaker().(#[60,62,64,65,67], [1/8]);
    o = [];
    FoscIteration(a).leaves.doAdjacentPairs { |a, b| o = o.add([a.cs, b.cs]) };
    o.join("\n");
    [ FoscNote('C4', 1/8), FoscNote('D4', 1/8) ]
    [ FoscNote('D4', 1/8), FoscNote('E4', 1/8) ]
    [ FoscNote('E4', 1/8), FoscNote('F4', 1/8) ]
    [ FoscNote('F4', 1/8), FoscNote('G4', 1/8) ]


logicalTies

  1. Example

    a = FoscStaff(FoscLeafMaker().(#[60,60,62,nil,64,64], [1/4,1/24,1/12,1/8,1/4,1/4]));
    m = a.selectLeaves;
    tie(m[0..1]);
    tie(m[4..]);
    a.show;

  2. iterate all logicalTies

    b = FoscIteration(a).logicalTies;
    o = [];
    b.all.do { |each| o = o.add(each.items.collect { |each| each.cs } ) };
    o.join("\n");
    [ FoscNote('C4', 1/4), FoscNote('C4', 1/16) ]
    [ FoscNote('D4', 1/8) ]
    [ FoscRest(1/8) ]
    [ FoscNote('E4', 1/4), FoscNote('E4', 1/4) ]
  3. iterate pitched logicalTies

    FIXME output: ERROR: Message __items__ not understood.

    b = FoscIteration(a).logicalTies(pitched: true);
    o = [];
    b.do { |each| o = o.add(each.items.collect { |each| each.cs } ) };
    o.join("\n");
  4. iterate non-pitched logicalTies

    b = FoscIteration(a).logicalTies(pitched: false);
    o = [];
    b.do { |each| o = o.add(each.items.collect { |each| each.cs } ) };
    o.join("\n");
    [ FoscRest(1/8) ]
  5. iterate nontrivial logicalTies

    FIXME output: ERROR: Message __items__ not understood.

    b = FoscIteration(a).logicalTies(nontrivial: true);
    b.do { |each| each.items.collect { |each| each.cs }.postln };
  6. iterate trivial logicalTies

    FIXME output: ERROR: Message __items__ not understood.

    b = FoscIteration(a).logicalTies(nontrivial: false);
    b.do { |each| each.items.collect { |each| each.cs }.postln };
  7. iterate logicalTies in reverse order

    FIXME output: ERROR: Message __items__ not understood.

    b = FoscIteration(a).logicalTies(reverse: true);
    b.do { |each| each.items.collect { |each| each.cs }.postln };


outOfRange


pitchPairs


pitches

  1. Iterate pitches in selection.

    a = FoscLeafMaker().(#[60,62,64,[61,63,65]], [1/8]);
    o = [];
    FoscIteration(a).pitches.do { |each| o = o.add(each.str) };
    o.join("\n");
    c'
    d'
    e'
    cs'
    ef'
    f'
  2. Iterate pitches in container.

    a = FoscStaff(FoscLeafMaker().(#[60,62,64,[61,63,65]], [1/8]));
    o = [];
    FoscIteration(a).pitches.do { |each| o = o.add(each.str) };
    o.join("\n");
    c'
    d'
    e'
    cs'
    ef'
    f'
  3. !!!TODO: not supported in fosc

    Iterate pitches in FoscPitchSet.

    a = FoscPitchSet(#[60,62,64,65]);
    o = [];
    FoscIteration(a).pitches.do { |each| o = o.add(each.str) };
    o.join("\n");
  4. !!!TODO: not supported in fosc

    Iterate various types of object.

    a = [FoscPitch("C#4"), FoscNote(72, 1/4), FoscChord(#[60,64,67], 1/4)];
    o = [];
    FoscIteration(a).pitches.do { |each| o = o.add(each.str) };
    o.join("\n");


runs


timeline

!!!TODO: protoype can not currently be FoscLogicalTie

  1. iterate all leaves

    a = FoscStaff(FoscLeafMaker().((60..67), [1/8]));
    b = FoscStaff(FoscLeafMaker().((60..63), [1/4]));
    c = FoscScore([a, b]);
    FoscIteration(c).timeline.do { |each, i| each.attach(FoscMarkup(i, 'above')) };
    c.show;

  2. iterate all leaves in reverse

    a = FoscStaff(FoscLeafMaker().((60..67), [1/8]));
    b = FoscStaff(FoscLeafMaker().((60..63), [1/4]));
    c = FoscScore([a, b]);
    FoscIteration(c).timeline(reverse: true).do { |each, i| each.attach(FoscMarkup(i, 'above')) };
    c.show;

  3. iterate pitched leaves

    a = FoscStaff(FoscLeafMaker().([60,61,nil,63,nil,nil,65], [1/8]));
    b = FoscStaff(FoscLeafMaker().((60..63), [1/4]));
    c = FoscScore([a, b]);
    FoscIteration(c).timeline(pitched: true).do { |each, i| each.attach(FoscMarkup(i, 'above')) };
    c.show;

  4. iterate non-pitched leaves

    a = FoscStaff(FoscLeafMaker().(#[60,61,nil,63,nil,nil,65], [1/8]));
    b = FoscStaff(FoscLeafMaker().((60..63), [1/4]));
    c = FoscScore([a, b]);
    FoscIteration(c).timeline(pitched: false).do { |each, i| each.attach(FoscMarkup(i, 'above')) };
    c.show;


timelineByLogicalTies

  1. iterate logical ties

    a = FoscStaff(FoscLeafMaker().((60..67), [5/32]));
    b = FoscStaff(FoscLeafMaker().((60..63), [5/16]));
    c = FoscScore([a, b]);
    FoscIteration(c).timelineByLogicalTies.do { |each, i| each.head.attach(FoscMarkup(i, 'above')) };
    c.show;

  2. iterate pitched logical ties

    a = FoscStaff(FoscLeafMaker().(#[60,61,nil,63,nil,nil,65], [5/32]));
    b = FoscStaff(FoscLeafMaker().((60..63), [5/16]));
    c = FoscScore([a, b]);
    FoscIteration(c).timelineByLogicalTies(pitched: true)
        .do { |each, i| each.head.attach(FoscMarkup(i, 'above')) };
    c.show;


verticalMoments