Source code for music21.tree.toStream

# -----------------------------------------------------------------------------
# Name:         tree/toStream.py
# Purpose:      Tools for recreating streams from trees
#
# Authors:      Joséphine Wolf Oberholtzer
#               Michael Scott Asato Cuthbert
#
# Copyright:    Copyright © 2013-2015 Michael Scott Asato Cuthbert
# License:      BSD, see license.txt
# -----------------------------------------------------------------------------
'''
Tools for generating new Streams from trees (fast, manipulable objects)

None of these things work acceptably yet.  This is super beta.
'''
from __future__ import annotations

from music21 import common
from music21.exceptions21 import TreeException
from music21.tree import timespanTree


[docs] @common.deprecated('v7', 'v8', 'use chordify() instead') def chordified(timespans, templateStream=None): # pragma: no cover r''' DEPRECATED -- DO NOT USE. Use stream.chordify() instead. Creates a score from the PitchedTimespan objects stored in this offset-tree. A "template" score may be used to provide measure and time-signature information. >>> score = corpus.parse('bwv66.6') >>> scoreTree = score.asTimespans() >>> #_DOCS_SHOW chordifiedScore = tree.toStream.chordified(scoreTree, templateStream=score) >>> #_DOCS_SHOW chordifiedScore.show('text') {0.0} <music21.instrument.Instrument 'P1: Soprano: Instrument 1'> {0.0} <music21.stream.Measure 0 offset=0.0> {0.0} <music21.clef.TrebleClef> {0.0} <music21.key.Key of f# 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> ... ''' from music21 import stream if not isinstance(timespans, timespanTree.TimespanTree): raise timespanTree.TimespanTreeException('Needs a TimespanTree to run') if templateStream is not None: mos = templateStream.measureOffsetMap() templateOffsets = list(mos) templateOffsets.append(templateStream.duration.quarterLength) if (hasattr(templateStream, 'parts') and templateStream.parts): outputStream = templateStream.parts[0].template(fillWithRests=False, retainVoices=False) else: outputStream = templateStream.template(fillWithRests=False, retainVoices=False) timespans = timespans.copy() timespans.splitAt(templateOffsets) measureIndex = 0 allTimePoints = timespans.allTimePoints() + tuple(templateOffsets) allTimePoints = sorted(set(allTimePoints)) measureList = list(outputStream.getElementsByClass(stream.Measure)) for offset, endTime in zip(allTimePoints, allTimePoints[1:]): while templateOffsets[1] <= offset: templateOffsets.pop(0) measureIndex += 1 vert = timespans.getVerticalityAt(offset) quarterLength = endTime - offset if quarterLength < 0: raise TreeException( 'Something is wrong with the verticality ' f'{vert!r} its endTime {endTime:f} is less than its offset {offset:f}' ) element = vert.makeElement(quarterLength) measureList[measureIndex].append(element) return outputStream else: allTimePoints = timespans.allTimePoints() elements = [] for offset, endTime in zip(allTimePoints, allTimePoints[1:]): vert = timespans.getVerticalityAt(offset) quarterLength = endTime - offset if quarterLength < 0: raise TreeException( 'Something is wrong with the verticality ' f'{vert!r}, its endTime {endTime:f} is less than its offset {offset:f}' ) element = vert.makeElement(quarterLength) elements.append(element) outputStream = stream.Score() for element in elements: outputStream.append(element) return outputStream
[docs] @common.deprecated('v7', 'v8', 'use chordify() instead') def partwise(tsTree: 'music21.tree.timespanTree.TimespanTree', templateStream: 'music21.stream.Score'): # pragma: no cover ''' DEPRECATED in v7 -- use chordify() ''' from music21 import stream treeMapping = tsTree.toPartwiseTimespanTrees() outputScore = stream.Score() for part in templateStream.parts: partwiseTimespans = treeMapping.get(part, None) if partwiseTimespans is None: continue outputPart = chordified(partwiseTimespans, part) outputScore.append(outputPart) return outputScore
_DOC_ORDER = () # ----------------------------------------------------------------------------- if __name__ == '__main__': import music21 music21.mainTest()