Previous topic

music21.tie

Next topic

music21.timespans.analysis

Table Of Contents

Table Of Contents

This Page

music21.timespans

Tools for grouping notes and chords into a searchable tree organized by start and stop offsets.

This is a lower-level tool that for now at least normal music21 users won’t need to worry about.

Functions

music21.timespans.listOfTimespanTreesByClass(inputStream, currentParentage=None, initialOffset=0, flatten=False, classLists=None)

Recurses through inputStream, and constructs TimespanTrees for each encountered substream and ElementTimespans for each encountered non-stream element.

classLists should be a sequence of valid inputs for isClassOrSubclass(). One TimespanTree will be constructed for each element in classLists, in a single optimized pass through the inputStream.

This is used internally by streamToTimespanTree.

>>> score = timespans.makeExampleScore()

Get everything in the score

>>> trees = timespans.listOfTimespanTreesByClass(score)
>>> trees
[<TimespanTree {2} (-inf to inf) <music21.stream.Score ...>>]    
>>> for t in trees[0]:
...     print(t)
<TimespanTree {4} (-inf to inf) <music21.stream.Part ...>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 1 offset=0.0>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 2 offset=2.0>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 3 offset=4.0>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 4 offset=6.0>>
<TimespanTree {4} (-inf to inf) <music21.stream.Part ...>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 1 offset=0.0>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 2 offset=2.0>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 3 offset=4.0>>
    <TimespanTree {0} (-inf to inf) <music21.stream.Measure 4 offset=6.0>>

Now filter the Notes and the Clefs & TimeSignatures of the score (flattened) into a list of two timespans

>>> classLists = ['Note', ('Clef', 'TimeSignature')]
>>> trees = timespans.listOfTimespanTreesByClass(score, classLists=classLists, flatten=True)
>>> trees
[<TimespanTree {12} (0.0 to 8.0) <music21.stream.Score ...>>, 
 <TimespanTree {4} (0.0 to 0.0) <music21.stream.Score ...>>]
music21.timespans.makeExampleScore()

Makes example score for use in stream-to-timespan conversion docs.

>>> score = timespans.makeExampleScore()
>>> score.show('text')
{0.0} <music21.stream.Part ...>
    {0.0} <music21.instrument.Instrument PartA: : >
    {0.0} <music21.stream.Measure 1 offset=0.0>
        {0.0} <music21.clef.BassClef>
        {0.0} <music21.meter.TimeSignature 2/4>
        {0.0} <music21.note.Note C>
        {1.0} <music21.note.Note D>
    {2.0} <music21.stream.Measure 2 offset=2.0>
        {0.0} <music21.note.Note E>
        {1.0} <music21.note.Note F>
    {4.0} <music21.stream.Measure 3 offset=4.0>
        {0.0} <music21.note.Note G>
        {1.0} <music21.note.Note A>
    {6.0} <music21.stream.Measure 4 offset=6.0>
        {0.0} <music21.note.Note B>
        {1.0} <music21.note.Note C>
        {2.0} <music21.bar.Barline style=final>
{0.0} <music21.stream.Part ...>
    {0.0} <music21.instrument.Instrument PartB: : >
    {0.0} <music21.stream.Measure 1 offset=0.0>
        {0.0} <music21.clef.BassClef>
        {0.0} <music21.meter.TimeSignature 2/4>
        {0.0} <music21.note.Note C>
    {2.0} <music21.stream.Measure 2 offset=2.0>
        {0.0} <music21.note.Note G>
    {4.0} <music21.stream.Measure 3 offset=4.0>
        {0.0} <music21.note.Note E>
    {6.0} <music21.stream.Measure 4 offset=6.0>
        {0.0} <music21.note.Note D>
        {2.0} <music21.bar.Barline style=final>
music21.timespans.streamToTimespanTree(inputStream, flatten, classList)

Recurses through a score and constructs a TimespanTree. Use Stream.asTimespans() generally since that caches the TimespanTree.

>>> score = corpus.parse('bwv66.6')
>>> tree = timespans.streamToTimespanTree(score, flatten=True, classList=(note.Note, chord.Chord))
>>> tree
<TimespanTree {165} (0.0 to 36.0) <music21.stream.Score ...>>
>>> for x in tree[:5]:
...     x
...
<ElementTimespan (0.0 to 0.5) <music21.note.Note C#>>
<ElementTimespan (0.0 to 1.0) <music21.note.Note E>>
<ElementTimespan (0.0 to 0.5) <music21.note.Note A>>
<ElementTimespan (0.0 to 0.5) <music21.note.Note A>>
<ElementTimespan (0.5 to 1.0) <music21.note.Note B>>
>>> tree = timespans.streamToTimespanTree(
...     score,
...     flatten=False,
...     classList=(),
...     )

Each of these has 11 elements – mainly the Measures

TODO: Fix – why is StaffGroup between Soprano and Alto?

>>> for x in tree:
...     x
...
<ElementTimespan (0.0 to 0.0) <music21.metadata.Metadata object at 0x...>>
<TimespanTree {11} (0.0 to 36.0) <music21.stream.Part Soprano>>
<TimespanTree {11} (0.0 to 36.0) <music21.stream.Part Alto>>
<TimespanTree {11} (0.0 to 36.0) <music21.stream.Part Tenor>>
<TimespanTree {11} (0.0 to 36.0) <music21.stream.Part Bass>>
<ElementTimespan (0.0 to 0.0) <music21.layout.StaffGroup <music21.stream.Part Soprano><music21.stream.Part Alto><music21.stream.Part Tenor><music21.stream.Part Bass>>>
>>> tenorElements = tree[3]
>>> tenorElements
<TimespanTree {11} (0.0 to 36.0) <music21.stream.Part Tenor>>
>>> tenorElements.source
<music21.stream.Part Tenor>
>>> tenorElements.source is score[3]
True
music21.timespans.timespansToChordifiedStream(timespans, templateStream=None)

Creates a score from the ElementTimespan objects stored in this offset-tree.

A “template” score may be used to provide measure and time-signature information.

>>> score = corpus.parse('bwv66.6')
>>> tree = score.asTimespans()
>>> chordifiedScore = timespans.timespansToChordifiedStream(
...     tree, templateStream=score)
>>> chordifiedScore.show('text')
{0.0} <music21.stream.Measure 0 offset=0.0>
    {0.0} <music21.clef.TrebleClef>
    {0.0} <music21.key.KeySignature of 3 sharps, mode minor>
    {0.0} <music21.meter.TimeSignature 4/4>
    {0.0} <music21.chord.Chord A3 E4 C#5>
    {0.5} <music21.chord.Chord G#3 B3 E4 B4>
{1.0} <music21.stream.Measure 1 offset=1.0>
    {0.0} <music21.chord.Chord F#3 C#4 F#4 A4>
    {1.0} <music21.chord.Chord G#3 B3 E4 B4>
    {2.0} <music21.chord.Chord A3 E4 C#5>
    {3.0} <music21.chord.Chord G#3 B3 E4 E5>
{5.0} <music21.stream.Measure 2 offset=5.0>
    {0.0} <music21.chord.Chord A3 E4 C#5>
    {0.5} <music21.chord.Chord C#3 E4 A4 C#5>
    {1.0} <music21.chord.Chord E3 E4 G#4 B4>
    {1.5} <music21.chord.Chord E3 D4 G#4 B4>
    {2.0} <music21.chord.Chord A2 C#4 E4 A4>
    {3.0} <music21.chord.Chord E#3 C#4 G#4 C#5>
{9.0} <music21.stream.Measure 3 offset=9.0>
    {0.0} <music21.layout.SystemLayout>
    {0.0} <music21.chord.Chord F#3 C#4 F#4 A4>
    {0.5} <music21.chord.Chord B2 D4 G#4 B4>
    {1.0} <music21.chord.Chord C#3 C#4 E#4 G#4>
    {1.5} <music21.chord.Chord C#3 B3 E#4 G#4>
    {2.0} <music21.chord.Chord F#2 A3 C#4 F#4>
    {3.0} <music21.chord.Chord F#3 C#4 F#4 A4>
...
music21.timespans.timespansToPartwiseStream(timespans, templateStream=None)

todo docs

Timespan

class music21.timespans.Timespan(offset=-inf, endTime=inf)

A span of time, with a start offset and stop offset.

Useful for demonstrating various properties of the timespan-collection class family.

>>> timespan = timespans.Timespan(-1.5, 3.25)
>>> print(timespan)
<Timespan -1.5 3.25>