Exemple #1
0
    def __init__(self):
        from music21 import stream
        from music21 import note
        from music21 import meter

        self.s = stream.Score()
        for j in [1]:
            p = stream.Part()
            for mn in range(10):
                m = stream.Measure()
                if mn == 0:
                    m.timeSignature = meter.TimeSignature('3/4')
                for i in range(3):
                    m.append(note.Note())
                p.append(m)
            self.s.insert(0, p)
Exemple #2
0
def midi_beats(midi_file):
    music = converter.parse(midi_file)
    # Use dummy 1/4 time
    for part in music.parts:
        for sig in part.getTimeSignatures():
            denom = max(4, sig.denominator)
            part.insert(sig.offset, meter.TimeSignature('1/%d' % denom))
            part.remove(sig)
    measures = []
    for measure in music.flat.makeMeasures():
        offsetMap = defaultdict(set)
        for note in measure.notes:
            offset = int(round(note.offset * RESOLUTION))
            offsetMap[offset].update([pitch.midi for pitch in note.pitches])
        measures.append(offsetMap)
    return measures
def generateTripletBlues(blRealization = None, numRepeats = 5): #12/8
    '''
    Turns whole notes in twelve bar blues bass line to triplet blues bass line. Takes
    in numRepeats, which is the number of times to repeat the bass line. Also, takes in a 
    realization of :meth:`~music21.figuredBass.examples.twelveBarBlues`. If none is provided, 
    a default realization with :attr:`~music21.figuredBass.rules.Rules.forbidVoiceOverlap`
    set to False and :attr:`~music21.figuredBass.rules.Rules.partMovementLimits` set to
    [(1,4),(2,12),(3,12)] is used.

    >>> from music21.figuredBass import examples
    >>> #_DOCS_SHOW examples.generateTripletBlues(numRepeats = 1).show()

    .. image:: images/figuredBass/fbExamples_tripletBlues.*
        :width: 700   
    '''
    from music21 import converter, stream, interval, meter
    if blRealization == None:
        bluesLine = twelveBarBlues()
        fbRules = rules.Rules()
        fbRules.partMovementLimits = [(1,4),(2,12),(3,12)]
        fbRules.forbidVoiceOverlap = False
        blRealization = bluesLine.realize(fbRules)
        sampleScore = blRealization.generateRandomRealizations(numRepeats)

    tripletBassLine = converter.parse("tinynotation: BB-4 BB-8 D4 D8 F4 F8 A-8 G8 F8", makeNotation=False)

    newBassLine = stream.Part()
    for n in sampleScore[1].notes:
        i = interval.notesToInterval(tripletBassLine[0], n)
        tp = tripletBassLine.transpose(i)
        for lyr in n.lyrics:
            tp.notes[0].addLyric(lyr.text)
        for m in tp.notes:
            newBassLine.append(m)
    
    newTopLine = stream.Part()
    for sampleChord in sampleScore[0].notes:
        sampleChordCopy = copy.deepcopy(sampleChord)
        sampleChordCopy.quarterLength = 6.0
        newTopLine.append(sampleChordCopy)
        
    newScore = stream.Score()
    newScore.append(meter.TimeSignature("12/8")) #Time signature
    newScore.append(sampleScore[1][1]) #Key signature
    newScore.insert(0, newTopLine)
    newScore.insert(0, newBassLine)
    return newScore
Exemple #4
0
 def testExpandTrills(self):
     from music21 import note, stream, clef, key, meter
     p1 = stream.Part()
     m1 = stream.Measure()
     p1.append(clef.TrebleClef())
     p1.append(key.Key('D', 'major'))
     p1.append(meter.TimeSignature('1/4'))
     n1 = note.Note('E4', type='eighth')
     n1.expressions.append(Trill())
     m1.append(n1)
     p1.append(m1)
     realized = realizeOrnaments(n1)
     self.assertIsInstance(realized, list)
     self.assertEqual(len(realized), 4)
     self.assertIsInstance(realized[0], note.Note)
     self.assertEqual(realized[0].quarterLength, 0.125)
     self.assertEqual('E4 F#4 E4 F#4', ' '.join(n.pitch.nameWithOctave for n in realized))
Exemple #5
0
 def xtestExpandTurns(self):
     from music21 import note, stream, clef, key, meter
     p1 = stream.Part()
     m1 = stream.Measure()
     m2 = stream.Measure()
     p1.append(clef.TrebleClef())
     p1.append(key.Key('F', 'major'))
     p1.append(meter.TimeSignature('2/4'))
     n1 = note.Note('C5', type='half')
     n1.expressions.append(Turn())
     n2 = note.Note('B4', type='half')
     n2.expressions.append(InvertedTurn())
     m1.append(n1)
     m2.append(key.KeySignature(5))
     m2.append(n2)
     p1.append(m1)
     p1.append(m2)
Exemple #6
0
def addPart(minLength=80, maxProbability=0.7, instrument=None):
    s1 = rhythmLine(minLength=minLength, maxProbability=maxProbability)
    ts1 = meter.TimeSignature("4/4")
    s1.insert(0, ts1)
    s1.insert(0, tempo.MetronomeMark(number=180, text="very fast"))
    if instrument is not None:
        s1.insert(0, instrument)
    s1.makeAccidentals()
    s1.makeMeasures(inPlace=True)
    sf = s1.flat.notesAndRests
    for n in sf:
        if n.tie is not None and n.tie.type != 'start':
            r = note.Rest()
            r.quarterLength = n.quarterLength
            s1.replace(n, r, allDerived=True)

    return s1
Exemple #7
0
 def timeSignatureFromTimeSign(self, timeSign):
     '''
     Returns a :class:`~music21.meter.TimeSignature` object from a timeSign tag. 
     
     
     >>> ci = capella.fromCapellaXML.CapellaImporter()
     >>> timeSign = ci.domElementFromText('<timeSign time="4/4"/>')
     >>> ci.timeSignatureFromTimeSign(timeSign)
     <music21.meter.TimeSignature 4/4>
     '''
     if 'time' in timeSign._attrs:
         timeString = timeSign._attrs['time'].value
         if timeString != 'infinite':
             return meter.TimeSignature(timeString)
         else:
             return None
     else:
         return None
Exemple #8
0
    def testStreamLilySemiComplex(self):
        from copy import deepcopy
        from music21 import meter, note, stream, pitch, duration

        a = stream.Stream()
        ts = meter.TimeSignature("3/8")

        b = stream.Stream()
        q = note.EighthNote()

        dur1 = duration.Duration()
        dur1.type = "eighth"

        tup1 = duration.Tuplet()
        tup1.tupletActual = [5, dur1]
        tup1.tupletNormal = [3, dur1]

        q.octave = 2
        q.duration.appendTuplet(tup1)

        for i in range(0, 5):
            b.append(deepcopy(q))
            b.elements[i].accidental = pitch.Accidental(i - 2)

        b.elements[0].duration.tuplets[0].type = "start"
        b.elements[-1].duration.tuplets[0].type = "stop"
        b2temp = b.elements[2]
        c = b2temp.editorial
        c.comment.text = "a real C"

        bestC = b.bestClef(allowTreble8vb=True)
        a.insert(bestC)
        a.insert(ts)
        a.insert(b)

        conv = LilypondConverter()
        outStr = conv.fromObject(a)
        testStr = u'\n  { \\clef "bass"  \\time 3/8  \n  { \\times 3/5 {ceses,8 ces,8 c,8_"a real C" cis,8 cisis,8}   } }'
        #        for i in range(len(outStr)):
        #            self.assertEqual(outStr[i], testStr[i])
        #        print outStr
        #        print testStr

        self.assertEqual(outStr, testStr)
Exemple #9
0
def test_reframe_ts():
    ex1 = meter.TimeSignature("44/32")
    ex1_res = utils.reframe_ts(ex1)
    expected_ex1 = meter.TimeSignature("11/8")
    assert ex1_res.ratioEqual(expected_ex1)

    ex2 = meter.TimeSignature("8/2")
    ex2_res = utils.reframe_ts(ex2, new_denominator=2)
    expected_ex2 = meter.TimeSignature("8/2")
    assert ex2_res.ratioEqual(expected_ex2)

    ex3 = meter.TimeSignature("8/8")
    ex3_res = utils.reframe_ts(ex3, new_denominator=16)
    expected_ex3 = meter.TimeSignature("16/16")
    assert ex3_res.ratioEqual(expected_ex3)

    ex4 = meter.TimeSignature("13/2")
    ex4_res = utils.reframe_ts(ex4)
    expected_ex4 = meter.TimeSignature("13/2")
    assert ex4_res.ratioEqual(expected_ex4)
Exemple #10
0
def song():
    """
    Simple helper function that returns "Wlazł kotek na płotek" music stream
    """
    s = stream.Stream()
    ts1 = meter.TimeSignature("3/4")

    p1 = stream.Part(number=1)
    p1.insert(0, ts1)
    p1.insert(0, key.KeySignature(0))
    p1.insert(0, clef.TrebleClef())
    m1 = stream.Measure(number=1)
    m1.append(note.Note("G"))
    m1.append(note.Note("E"))
    m1.append(note.Note("E", type="quarter"))
    m2 = stream.Measure(number=2)
    m2.append(note.Note("F"))
    m2.append(note.Note("D"))
    m2.append(note.Note("D"))
    m3 = stream.Measure(number=3)
    m3.append(note.Note("C", type="eighth"))
    m3.append(note.Note("E", type="eighth"))
    m3.append(note.Note("G", type="half"))
    p1.append(m1)
    p1.append(m2)
    p1.append(m3)
    m4 = stream.Measure(number=4)
    m4.append(note.Note("G"))
    m4.append(note.Note("E"))
    m4.append(note.Note("E", type="quarter"))
    m5 = stream.Measure(number=5)
    m5.append(note.Note("F"))
    m5.append(note.Note("D"))
    m5.append(note.Note("D"))
    m6 = stream.Measure(number=6)
    m6.append(note.Note("C4", type="eighth"))
    m6.append(note.Note("E4", type="eighth"))
    m6.append(note.Note("C4", type="half"))
    p1.append(m4)
    p1.append(m5)
    p1.append(m6)
    s.insert(0, p1)
    return s
Exemple #11
0
    def testTabClefBeamDirections(self):

        from music21 import stream
        from music21 import clef
        from music21 import meter
        from music21 import note

        m = stream.Measure()

        n1 = note.Note(64, quarterLength=0.25)
        n2 = note.Note(67, quarterLength=0.25)

        m.append(clef.TabClef())
        m.append(meter.TimeSignature('4/4'))
        m.append(n1)
        m.append(n2)
        m.makeBeams(inPlace=True)

        self.assertEqual(m.notes[0].stemDirection, 'down')
Exemple #12
0
    def testScoreLily(self):
        from copy import deepcopy
        from music21 import clef, meter, note, stream
        ts = meter.TimeSignature("2/4")

        p1 = stream.Part()
        p1.id = "P1"
        p1.append(clef.TrebleClef())
        p1.append(ts)
        p1.append(note.Note("C4"))
        p1.append(note.Note("D4"))

        p2 = stream.Part()
        p2.id = "P2"
        p2.append(clef.BassClef())
        p2.append(deepcopy(ts))
        p2.append(note.Note("E2"))
        p2.append(note.Note("F2"))

        score1 = stream.Score()
        score1.insert(0, p1)
        score1.insert(0, p2)
        #        score1.show('text')
        #        score2 = score1.makeNotation()
        #        score2.show('text')

        conv = LilypondConverter()
        outStr = conv.fromObject(score1)
        #        print outStr

        #        conv2 = LilypondConverter(score1)
        #        conv2.showSVG()

        self.assertEqual(
            outStr, r''' \score { 
  {  << 
 \new Staff 
  { 
  { \clef "treble"  \time 2/4  c'4 d'4   }  } 
 \new Staff 
  { 
  { \clef "bass"  \time 2/4  e,4 f,4   }  } >>
 } }''')
Exemple #13
0
    def testExportMetronomeMarksE(self):
        '''
        Test writing of sound tags
        '''
        from music21 import meter
        from music21 import tempo
        p = stream.Part()
        p.repeatAppend(note.Note('g#3'), 8)
        # default quarter assumed
        p.insert(0, tempo.MetronomeMark('super slow', number=30.2))

        raw = fromMusic21Object(p)

        match1 = '<sound tempo="30.2"/>'
        self.assertEqual(raw.find(match1) > 0, True)
        #p.show()


        p = stream.Part()
        p.repeatAppend(note.Note('g#3'), 14)
        # default quarter assumed
        p.insert(meter.TimeSignature('2/4'))
        p.insert(0, tempo.MetronomeMark(number=30))
        p.insert(2, tempo.MetronomeMark(number=60))
        p.insert(4, tempo.MetronomeMark(number=120))
        p.insert(6, tempo.MetronomeMark(number=240))
        p.insert(8, tempo.MetronomeMark(number=240, referent=.75))
        p.insert(10, tempo.MetronomeMark(number=240, referent=.5))
        p.insert(12, tempo.MetronomeMark(number=240, referent=.25))
        #p.show()

        raw = fromMusic21Object(p)
        match1 = '<sound tempo="30.0"/>'
        self.assertEqual(raw.find(match1) > 0, True)
        match2 = '<sound tempo="60.0"/>'
        self.assertEqual(raw.find(match2) > 0, True)
        match3 = '<sound tempo="120.0"/>'
        self.assertEqual(raw.find(match3) > 0, True)
        match4 = '<sound tempo="240.0"/>'
        self.assertEqual(raw.find(match4) > 0, True)
        # from the dotted value
        match5 = '<sound tempo="180.0"/>'
        self.assertEqual(raw.find(match5) > 0, True)
Exemple #14
0
    def createTimeSignature(self, attributes):
        r'''
        Adding a time signature in the score.      
        
        
        >>> measure = stream.Measure()
        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measure
        >>> nwt.createTimeSignature({"Signature":"4/4"})
        >>> measure[0]
        <music21.meter.TimeSignature 4/4>       
        '''   
        times = attributes['Signature']
        if times == "AllaBreve": # These are strange cases
            times = "2/2"
        elif times == "Common":
            times = "4/4"

        self.currentMeasure.append(meter.TimeSignature(times))   
Exemple #15
0
    def createTimeSignature(self, attributes):
        r'''
        Adding a time signature in the score.


        >>> measure = stream.Measure()
        >>> nwt = noteworthy.translate.NoteworthyTranslator()
        >>> nwt.currentMeasure = measure
        >>> nwt.createTimeSignature({'Signature':'4/4'})
        >>> measure[0]
        <music21.meter.TimeSignature 4/4>
        '''
        times = attributes['Signature']
        if times == 'AllaBreve':  # These are strange cases
            times = '2/2'
        elif times == 'Common':
            times = '4/4'

        self.currentMeasure.append(meter.TimeSignature(times))
Exemple #16
0
def getMeasuresList(scores_json):
    scores = scores_json
    allMeasures = []
    lastMetronomeMark = tempo.MetronomeMark()
    lastKeysignature = key.KeySignature()
    lastTimeSignature = meter.TimeSignature()
    lastClef = clef.Clef()
    for i, strm in enumerate(scores):
        path = strm['path']
        strmScore = strm['score']
        for p in strmScore.getElementsByClass(stream.Part):
            for m in p.getElementsByClass(stream.Measure):
                isActive = False
                for r in m.recurse():
                    if type(r) == clef.TrebleClef:
                        lastClef = r
                    if type(r) == clef.BassClef:
                        lastClef = r
                    if type(r) == note.Note:
                        isActive = True
                    if type(r) == tempo.MetronomeMark:
                        lastMetronomeMark = r
                    if type(r) == key.KeySignature:
                        lastKeysignature = r
                    if type(r) == meter.TimeSignature:
                        lastTimeSignature = r
                try:
                    m.insert(0, lastTimeSignature)
                    m.insert(0, lastMetronomeMark)
                    m.insert(0, lastKeysignature)
                    m.insert(0, lastClef)
                except:
                    True
                if isActive:
                    obj = {
                        "path": path,
                        "part": p.partName,
                        "number": m.number,
                        "measure": m
                    }
                    allMeasures.append(obj)
    return allMeasures
Exemple #17
0
def testMeasureStream1():
    '''
    returns a simple measure stream for testing:

    >>> s = analysis.reduceChordsOld.testMeasureStream1()
    >>> s.show('text')
    {0.0} <music21.meter.TimeSignature 4/4>
    {0.0} <music21.chord.Chord C4 E4 G4 C5>
    {2.0} <music21.chord.Chord C4 E4 F4 B4>
    {3.0} <music21.chord.Chord C4 E4 G4 C5>
    '''
    s = stream.Measure()
    t = meter.TimeSignature('4/4')
    c1 = chord.Chord('C4 E4 G4 C5')
    c1.quarterLength = 2.0
    c2 = chord.Chord('C4 E4 F4 B4')
    c3 = chord.Chord('C4 E4 G4 C5')
    for c in [t, c1, c2, c3]:
        s.append(c)
    return s
Exemple #18
0
    def testSingle(self):
        '''Need to test direct meter creation w/o stream
        '''
        from music21 import note, meter
        s = stream.Stream()
        ts = meter.TimeSignature('4/4')

        s.append(ts)
        n = note.Note()
        n.quarterLength = 1
        s.repeatAppend(n, 4)

        n = note.Note()
        n.quarterLength = .5
        s.repeatAppend(n, 8)

        s = s.makeMeasures()
        s = labelBeatDepth(s)

        s.show()
 def test_note_beat_strength_indexer_3(self):
     # When there are a few notes
     expected = pandas.DataFrame(
         {'0': pandas.Series([1.0, 0.5, 0.5, 1.0, 0.5, 0.5])})
     test_part = stream.Part()
     # add stuff to the test_part
     measure = stream.Measure()
     # In music21 beginning time signatures are preferably inserted in the first measure and a
     # timeSignature is needed to be able to calculate beatStrength
     measure.insert(0, m21_meter.TimeSignature('3/4'))
     for i in range(6):
         add_me = note.Note(u'C4', quarterLength=1.0)
         add_me.offset = i
         measure.append(add_me)
     test_part.insert(0, measure)  # finished adding stuff to the test_part
     ip = IndexedPiece()
     ip.metadata('parts', expected.columns)
     ip._analyses['part_streams'] = [test_part]  # supply part_streams.
     actual = ip._get_beat_strength()['meter.NoteBeatStrengthIndexer']
     self.assertTrue(actual.equals(expected))
Exemple #20
0
    def __init__(self, fiveExcelCells=None, parentPiece=None):
        stream.Score.__init__(self)
        if fiveExcelCells == None:
            fiveExcelCells = []
        if fiveExcelCells != []:
            if len(fiveExcelCells) != 5:
                raise Exception(
                    "Need five Excel Cells to make a PolyphonicSnippet object")

            for part in fiveExcelCells[0:3]:
                if part is not None and hasattr(
                        part, 'isStream') and part.isStream == True:
                    part.__class__ = stream.Part
                    part.classes.insert(0, 'Part')

            self.cadenceType = fiveExcelCells[3]
            self.timeSig = meter.TimeSignature(fiveExcelCells[4])
            self.parentPiece = parentPiece
            self.cantus = fiveExcelCells[0]
            self.tenor = fiveExcelCells[1]
            self.contratenor = fiveExcelCells[2]

            if self.contratenor == "" or self.contratenor is None:
                self.contratenor = None
            else:
                self.contratenor.id = 'Ct'
            if self.tenor == "" or self.tenor is None:
                self.tenor = None
            else:
                self.tenor.id = 'T'

            if self.cantus == "" or self.cantus is None:
                self.cantus = None
            else:
                self.cantus.id = 'C'

            md = metadata.Metadata()
            md.title = self.header()
            self.insert(0, md)
            self._appendParts()
            self._padParts()
Exemple #21
0
    def getMinimumWindowStream(self, timeSignature='1/4'):
        '''
        Take the loaded stream and restructure it into measures of 1 quarter note duration.

        >>> s = corpus.parse('bach/bwv324')
        >>> p = analysis.discrete.Ambitus()

        Placing one part into analysis

        >>> wa = analysis.windowed.WindowedAnalysis(s.parts[0], p)

        >>> post = wa.getMinimumWindowStream()
        >>> len(post.getElementsByClass('Measure'))
        42
        >>> post.getElementsByClass('Measure')[0]
        <music21.stream.Measure 1 offset=0.0>

        Time signature set to 1/4 time signature

        >>> post.getElementsByClass('Measure')[0].timeSignature
        <music21.meter.TimeSignature 1/4>

        leaves one note in this measure

        >>> len(post.getElementsByClass('Measure')[1].notes)
        1
        '''
        # create a stream that contains just a 1/4 time signature; this is
        # the minimum window size (and partitioning will be done by measure)
        meterStream = stream.Stream()
        meterStream.insert(0, meter.TimeSignature(timeSignature))

        # makeTies() splits the durations into proper measure boundaries for
        # analysis; this means that a duration that spans multiple 1/4 measures
        # will be represented in each of those measures
        measured = self._srcStream.makeMeasures(meterStream)
        # need to make sure we only have Measures here, as layout.StaffGroup
        # or similar objs may be retained
        measured.removeByNotOfClass('Measure')
        measured.makeTies(inPlace=True)
        return measured
def testMeasureStream1():
    '''
    returns a simple measure stream for testing:

    >>> s = analysis.reduceChords.testMeasureStream1()
    >>> s.show('text')
    {0.0} <music21.meter.TimeSignature 4/4>
    {0.0} <music21.chord.Chord C4 E4 G4 C5>
    {2.0} <music21.chord.Chord C4 E4 F4 B4>
    {3.0} <music21.chord.Chord C4 E4 G4 C5>
    '''
    #from music21 import chord
    measure = stream.Measure()
    timeSignature = meter.TimeSignature('4/4')
    chord1 = chord.Chord('C4 E4 G4 C5')
    chord1.quarterLength = 2.0
    chord2 = chord.Chord('C4 E4 F4 B4')
    chord3 = chord.Chord('C4 E4 G4 C5')
    for element in (timeSignature, chord1, chord2, chord3):
        measure.append(element)
    return measure
Exemple #23
0
    def testFromScoreNoParts(self):
        '''
        Badly nested streams should warn but output no gaps.
        '''
        s = stream.Score()
        s.append(meter.TimeSignature('1/4'))
        s.append(note.Note())
        s.append(note.Note())
        gex = GeneralObjectExporter(s)

        with self.assertWarns(MusicXMLWarning) as cm:
            tree = et_fromstring(gex.parse().decode('utf-8'))
        self.assertIn(repr(s).split(' 0x')[0], str(cm.warning))
        self.assertIn(' is not well-formed; see isWellFormedNotation()',
                      str(cm.warning))
        # The original score with its original address should not
        # be found in the message because makeNotation=True makes a copy
        self.assertNotIn(repr(s), str(cm.warning))

        # Assert no gaps in stream
        self.assertSequenceEqual(tree.findall('.//forward'), [])
Exemple #24
0
    def testExpandTurns(self):
        from music21 import note
        from music21 import stream
        from music21 import clef
        from music21 import key
        from music21 import meter
        p1 = stream.Part()
        m1 = stream.Measure()
        m2 = stream.Measure()
        p1.append(clef.TrebleClef())
        p1.append(key.Key('F', 'major'))
        p1.append(meter.TimeSignature('2/4'))
        n1 = note.Note('C5', type='half')
        turn0 = Turn()
        n1.expressions.append(turn0)
        n2 = note.Note('B4', type='quarter')
        n2.duration.dots = 1

        n2.expressions.append(InvertedTurn())
        m1.append(n1)
        m2.append(key.KeySignature(5))
        m2.append(n2)
        m2.append(note.Rest('eighth'))
        p1.append(m1)
        p1.append(m2)
        realized1 = realizeOrnaments(n1)
        realized2 = realizeOrnaments(n2)
        self.assertEqual('C5 D5 C5 B-4 C5',
                         ' '.join(n.pitch.nameWithOctave for n in realized1))
        self.assertEqual('B4 A#4 B4 C#5 B4',
                         ' '.join(n.pitch.nameWithOctave for n in realized2))
        self.assertEqual(realized1[0].quarterLength, 1.0)
        self.assertEqual(realized1[1].quarterLength, 0.25)
        self.assertEqual(realized2[0].quarterLength, 0.5)
        self.assertEqual(realized2[1].quarterLength, 0.25)

        turn0.quarterLength = 0.125
        realized1b = realizeOrnaments(n1)
        self.assertEqual(realized1b[0].quarterLength, 1.5)
        self.assertEqual(realized1b[1].quarterLength, 0.125)
Exemple #25
0
    def testSubclassMatchingA(self):
        from music21 import stream, note, clef, meter, classCache, common, chord
        s2 = stream.Stream()
        s2.repeatAppend(note.Note(), 300)
        s2.repeatAppend(note.Rest(), 300)
        s2.repeatAppend(chord.Chord(), 300)
        s2.repeatInsert(meter.TimeSignature(), [0, 50, 100, 150])
        s2.repeatInsert(clef.BassClef(), [0, 50, 100, 150])

        t1 = common.Timer()
        t1.start()
        cc = classCache.ClassCache()
        # simulate what would happen in getElementsByClass
        cc.load(s2) 
        s = stream.Stream()
        cc.getElementsByClass(s, ['Rest'])
        self.assertEqual(len(s), 300)
        s = stream.Stream()
        cc.getElementsByClass(s, ['Note'])
        self.assertEqual(len(s), 300)
        s = stream.Stream()
        cc.getElementsByClass(s, ['GeneralNote'])
        self.assertEqual(len(s), 900)

        s = stream.Stream()
        cc.getElementsByClass(s, ['NotRest'])
        self.assertEqual(len(s), 600)

        s = stream.Stream()
        cc.getElementsByClass(s, ['BassClef'])
        self.assertEqual(len(s), 4)

        s = stream.Stream()
        cc.getElementsByClass(s, ['Clef'])
        self.assertEqual(len(s), 4)

        s = stream.Stream()
        cc.getElementsByClass(s, ['TimeSignature'])
        self.assertEqual(len(s), 4)
Exemple #26
0
    def timeSignatureFromTimeSign(self, timeSign):
        # noinspection PyShadowingNames
        '''
        Returns a :class:`~music21.meter.TimeSignature` object from a timeSign tag.

        >>> ci = capella.fromCapellaXML.CapellaImporter()
        >>> timeSign = ci.domElementFromText('<timeSign time="4/4"/>')
        >>> ci.timeSignatureFromTimeSign(timeSign)
        <music21.meter.TimeSignature 4/4>

        >>> timeSign = ci.domElementFromText('<timeSign time="infinite"/>')
        >>> ci.timeSignatureFromTimeSign(timeSign) is None
        True
        '''
        if 'time' in timeSign.attrib:
            timeString = timeSign.attrib['time']
            if timeString != 'infinite':
                return meter.TimeSignature(timeString)
            else:
                return None
        else:
            return None
Exemple #27
0
    def makeScore(self):
        """Make a short score with pick up and two voices."""
        sc = stream.Score()
        num_voices = 2
        pitches = ['C', 'A-']
        for i in range(num_voices):
            part = stream.Part()
            part.id = 'part %d' % i
            time_sig = meter.TimeSignature('4/4')
            key_sig = key.Key('c')

            # Make a note.
            n1 = music21_note.Note(pitches[i])
            n1.duration.quarterLength = 1

            # Add full measure.
            full_m = stream.Measure()
            full_m.append(time_sig)
            full_m.append(key_sig)
            full_m.append(n1)
            n2 = n1.transpose('M2')
            full_m.append(n2)
            full_m.repeatAppend(n1, 2)
            part.append(full_m)

            # Add another full measure.
            full_m = stream.Measure()
            full_m.append(n1)
            n2 = n1.transpose('M2')
            full_m.append(n2)
            full_m.repeatAppend(n1, 2)
            part.append(full_m)

            sc.insert(0, part)

        # Show the full score and all score elements in indented text.
        # sc.show('text')
        return sc
def generate_sub_cycle(root_scale, starting_chord, cycle_matrix_page, note_ranges=()):
    chord_as_list = list(starting_chord.pitches)
    measure = stream.Measure()
    # make it a 7/4 measure as there are 7 chords to a sub-cycle
    measure.append(meter.TimeSignature('7/4'))
    # add the first chord before generating the rest of the cycle
    if len(note_ranges) != 0:
        check_note_ranges_and_transpose(starting_chord.pitches, note_ranges)
    measure.append(chord.Chord(starting_chord))

    # apply the rules of the cycle matrix to generate the rest of the chords. since we're dealing with diatonic chords
    # at the moment, the cycle will need to be run twice to generate the remaining six chords
    for i in range(0, 2):
        for row in cycle_matrix_page:
            apply_row_to_chord(row, chord_as_list, root_scale)
            # check to see if the new chord is within the specified range if ranges are specified
            if len(note_ranges) != 0:
                check_note_ranges_and_transpose(chord_as_list, note_ranges)
            measure.append(chord.Chord(chord_as_list))

    apply_row_to_chord(cycle_matrix_page[6 % len(cycle_matrix_page)], chord_as_list, root_scale)

    return measure, chord.Chord(chord_as_list)
    def __init__(self, fiveExcelCells=None, parentPiece=None):
        super().__init__()
        if fiveExcelCells is None:
            fiveExcelCells = []
        if fiveExcelCells != []:
            if len(fiveExcelCells) != 5:
                raise Exception(
                    "Need five Excel Cells to make a PolyphonicSnippet object")

            self.cadenceType = fiveExcelCells[3]
            self.timeSig = meter.TimeSignature(fiveExcelCells[4])
            self.parentPiece = parentPiece
            self.cantus = fiveExcelCells[0]
            self.tenor = fiveExcelCells[1]
            self.contratenor = fiveExcelCells[2]

            self.longestLineLength = 0

            if self.contratenor == "" or self.contratenor is None:
                self.contratenor = None
            else:
                self.contratenor.id = 'Ct'
            if self.tenor == "" or self.tenor is None:
                self.tenor = None
            else:
                self.tenor.id = 'T'

            if self.cantus == "" or self.cantus is None:
                self.cantus = None
            else:
                self.cantus.id = 'C'

            md = metadata.Metadata()
            md.title = self.header()
            self.insert(0, md)
            self._appendParts()
            self._padParts()
Exemple #30
0
def ch2_writing_I_A(tsStr, barGroups):    
    from music21 import meter, stream

    ts = meter.TimeSignature(tsStr)

    ex = stream.Stream()
    ex.insert(0, ts)
    for b in barGroups:
        summation = 0
        for ql in b:
            if ql > 0: # quick encoding: negative values for rests
                n = note.Note()
            else:
                n = note.Rest()
            n.quarterLength = abs(ql)
            summation += abs(ql)
            ex.append(n)
        if ts.barDuration.quarterLength - summation > 0:
            nFill = note.Note()
            # subtract bar dur from sum of existing notes
            nFill.quarterLength = ts.barDuration.quarterLength - summation
            ex.append(nFill)
    
    return ex