Exemplo n.º 1
0
    def testJSONSerializationMetadata(self):
        from music21.musicxml import xmlHandler
        from music21.musicxml import fromMxObjects
        from music21.musicxml import testFiles
        from music21 import metadata

        md = metadata.Metadata(
            title='Concerto in F',
            date='2010',
            composer='Frank',
        )
        #environLocal.printDebug([str(md.json)])
        self.assertEqual(md.composer, 'Frank')

        #md.jsonPrint()

        mdNew = metadata.Metadata()

        jsonString = freezeThaw.JSONFreezer(md).json
        freezeThaw.JSONThawer(mdNew).json = jsonString

        self.assertEqual(mdNew.date, '2010/--/--')
        self.assertEqual(mdNew.composer, 'Frank')

        self.assertEqual(mdNew.title, 'Concerto in F')

        # test getting meta data from an imported source

        d = xmlHandler.Document()
        d.read(testFiles.mozartTrioK581Excerpt)  # @UndefinedVariable
        mxScore = d.score  # get the mx score directly

        md = fromMxObjects.mxScoreToMetadata(mxScore)

        self.assertEqual(md.movementNumber, '3')
        self.assertEqual(md.movementName,
                         'Menuetto (Excerpt from Second Trio)')
        self.assertEqual(md.title, 'Quintet for Clarinet and Strings')
        self.assertEqual(md.number, 'K. 581')
        self.assertEqual(md.composer, 'Wolfgang Amadeus Mozart')

        # convert to json and see if data is still there
        #md.jsonPrint()
        mdNew = metadata.Metadata()

        jsonString = freezeThaw.JSONFreezer(md).json
        freezeThaw.JSONThawer(mdNew).json = jsonString

        self.assertEqual(mdNew.movementNumber, '3')
        self.assertEqual(mdNew.movementName,
                         'Menuetto (Excerpt from Second Trio)')
        self.assertEqual(mdNew.title, 'Quintet for Clarinet and Strings')
        self.assertEqual(mdNew.number, 'K. 581')
        self.assertEqual(mdNew.composer, 'Wolfgang Amadeus Mozart')
Exemplo n.º 2
0
    def testRichMetadata01(self):
        from music21 import corpus
        from music21 import metadata

        score = corpus.parse('jactatur')
        self.assertEqual(score.metadata.composer, 'Johannes Ciconia')

        richMetadata = metadata.RichMetadata()
        richMetadata.merge(score.metadata)

        self.assertEqual(richMetadata.composer, 'Johannes Ciconia')
        # update richMetadata with stream
        richMetadata.update(score)

        self.assertEqual(
            richMetadata.keySignatureFirst,
            '<music21.key.KeySignature of 1 flat, mode major>',
        )

        self.assertEqual(str(richMetadata.timeSignatureFirst), '2/4')

        rmdNew = metadata.RichMetadata()

        jsonString = freezeThaw.JSONFreezer(richMetadata).json
        freezeThaw.JSONThawer(rmdNew).json = jsonString

        self.assertEqual(rmdNew.composer, 'Johannes Ciconia')

        self.assertEqual(str(rmdNew.timeSignatureFirst), '2/4')
        self.assertEqual(
            str(rmdNew.keySignatureFirst),
            '<music21.key.KeySignature of 1 flat, mode major>',
        )

        score = corpus.parse('bwv66.6')
        richMetadata = metadata.RichMetadata()
        richMetadata.merge(score.metadata)

        richMetadata.update(score)
        self.assertEqual(
            str(richMetadata.keySignatureFirst),
            '<music21.key.KeySignature of 3 sharps, mode minor>',
        )
        self.assertEqual(str(richMetadata.timeSignatureFirst), '4/4')

        jsonString = freezeThaw.JSONFreezer(richMetadata).json
        freezeThaw.JSONThawer(rmdNew).json = jsonString

        self.assertEqual(str(rmdNew.timeSignatureFirst), '4/4')
        self.assertEqual(
            str(rmdNew.keySignatureFirst),
            '<music21.key.KeySignature of 3 sharps, mode minor>',
        )
Exemplo n.º 3
0
    def write(self, filePath=None):
        r'''
        Write the metadata bundle to disk as a JSON file.

        If `filePath` is None, use `self.filePath`.

        Returns the metadata bundle.

        >>> from music21 import metadata
        >>> bachBundle = corpus.corpora.CoreCorpus().metadataBundle.search(
        ...     'bach',
        ...     'composer',
        ...     )
        >>> bachBundle.filePath is None
        True

        >>> import os
        >>> import tempfile
        >>> tempFilePath = tempfile.mkstemp()[1]
        >>> bachBundle.write(filePath=tempFilePath)
        <music21.metadata.bundles.MetadataBundle {25 entries}>
        >>> os.remove(tempFilePath)
        '''
        filePath = filePath or self.filePath
        if self.filePath is not None:
            filePath = self.filePath
            environLocal.printDebug(['MetadataBundle: writing:', filePath])
            jsf = freezeThaw.JSONFreezer(self)
            return jsf.jsonWrite(filePath)
        return self
Exemplo n.º 4
0
def getFormat(score):
    from music21 import freezeThaw
    sf = freezeThaw.JSONFreezer(score)
    frozen = json.dumps(
        sf.getJSONDict(includeVersion=True),
        sort_keys=True,
    )
    return "var dataAssignment = '" + frozen + "'"
Exemplo n.º 5
0
 def testRichMetadata02(self):
     from music21 import VERSION
     from music21 import corpus
     from music21 import metadata
     from music21 import test
     score = corpus.parse('bwv66.6')
     richMetadata = metadata.RichMetadata()
     richMetadata.merge(score.metadata)
     richMetadata.update(score)
     self.assertEqual(richMetadata.noteCount, 165)
     self.assertEqual(richMetadata.quarterLength, 36.0)
     self.assertMultiLineEqual(
         freezeThaw.JSONFreezer(richMetadata).prettyJson,
         test.dedent(
             '''
             {
                 "__attr__": {
                     "_urls": [],
                     "_workIds": {
                         "movementName": {
                             "__attr__": {
                                 "_data": "bwv66.6.mxl"
                             },
                             "__class__": "music21.metadata.primitives.Text"
                         }
                     },
                     "ambitus": {
                         "__attr__": {
                             "_priority": 0,
                             "offset": 0.0
                         },
                         "__class__": "music21.interval.Interval"
                     },
                     "contributors": [],
                     "keySignatureFirst": "<music21.key.Key of f# minor>",
                     "keySignatures": [
                         "<music21.key.Key of f# minor>"
                     ],
                     "noteCount": 165,
                     "numberOfParts": 4,
                     "pitchHighest": "E5",
                     "pitchLowest": "F#2",
                     "quarterLength": 36.0,
                     "sourcePath": "bach/bwv66.6.mxl",
                     "tempos": [],
                     "timeSignatureFirst": "4/4",
                     "timeSignatures": [
                         "4/4"
                     ]
                 },
                 "__class__": "music21.metadata.RichMetadata",
                 "__version__": [
                     ''' + str(VERSION[0]) + ''',
                     ''' + str(VERSION[1]) + ''',
                     ''' + str(VERSION[2]) + '''
                 ]
             }
             ''', ))
Exemplo n.º 6
0
    def testDate(self):
        from music21 import freezeThaw
        from music21 import metadata

        date1 = metadata.primitives.Date(year=1843, yearError='approximate')
        date2 = metadata.primitives.Date(year='1843?')

        dateNew = metadata.primitives.Date()

        jsonStr = freezeThaw.JSONFreezer(date1).json
        freezeThaw.JSONThawer(dateNew).json = jsonStr

        self.assertEqual(dateNew.year, 1843)
        self.assertEqual(dateNew.yearError, 'approximate')

        dateNew = metadata.primitives.Date()

        jsonStr = freezeThaw.JSONFreezer(date2).json
        freezeThaw.JSONThawer(dateNew).json = jsonStr

        self.assertEqual(dateNew.year, '1843')
        self.assertEqual(dateNew.yearError, 'uncertain')
Exemplo n.º 7
0
    def testBasicB(self):
        from music21 import chord

        c1 = chord.Chord(['c2', 'a4', 'e5'], quarterLength=1.25)
        c2 = chord.Chord()

        raw = freezeThaw.JSONFreezer(c1).json
        freezeThaw.JSONThawer(c2).json = raw

        self.assertEqual(
            str(c1.pitches),
            '(<music21.pitch.Pitch C2>, <music21.pitch.Pitch A4>, <music21.pitch.Pitch E5>)'
        )
        self.assertEqual(c1.quarterLength, 1.25)
Exemplo n.º 8
0
    def testContributor(self):
        from music21 import freezeThaw
        from music21 import metadata

        contributor = metadata.primitives.Contributor(
            role='composer',
            name='Gilles Binchois',
            )
        self.assertEqual(contributor.role, 'composer')
        self.assertEqual(contributor.relevance, 'contributor')
        jsonStr = freezeThaw.JSONFreezer(contributor).json
        contributorNew = metadata.primitives.Contributor()
        freezeThaw.JSONThawer(contributorNew).json = jsonStr
        self.assertEqual(contributorNew.role, 'composer')
        self.assertEqual(contributorNew.name, 'Gilles Binchois')
        self.assertEqual(contributorNew.relevance, 'contributor')
Exemplo n.º 9
0
    def testText(self):
        from music21 import freezeThaw
        from music21 import metadata
        import json

        text = metadata.primitives.Text('my text')
        text.language = 'en'
        jsf = freezeThaw.JSONFreezer(text)
        jsonDict = json.loads(jsf.json)
        self.assertEqual(sorted(list(jsonDict['__attr__'].keys())), [u'_data', u'_language'])

        textNew = metadata.primitives.Text()
        jst = freezeThaw.JSONThawer(textNew)
        jst.json = jsf.json

        self.assertEqual(textNew._data, 'my text')
        self.assertEqual(textNew._language, 'en')
Exemplo n.º 10
0
    def testDateRelative(self):
        from music21 import freezeThaw
        from music21 import metadata

        dateRelative = metadata.primitives.DateRelative('2001/12/31', 'prior')
        self.assertEqual(str(dateRelative), 'prior to 2001/12/31')
        self.assertEqual(dateRelative.relevance, 'prior')
        self.assertEqual(len(dateRelative._data), 1)

        dateSingleNew = metadata.primitives.DateSingle()

        jsonStr = freezeThaw.JSONFreezer(dateRelative).json
        freezeThaw.JSONThawer(dateSingleNew).json = jsonStr

        self.assertEqual(len(dateSingleNew._data), 1)
        self.assertEqual(dateSingleNew._relevance, 'prior')
        self.assertEqual(dateSingleNew._dataError, [])
        self.assertEqual(str(dateSingleNew), '2001/12/31')
Exemplo n.º 11
0
    def testBasicA(self):
        from music21 import note
        unused_t1 = note.Lyric('test')
        #print t1.json

        n1 = note.Note('G#3', quarterLength=3)
        n1.lyric = 'testing'
        self.assertEqual(n1.pitch.nameWithOctave, 'G#3')
        self.assertEqual(n1.quarterLength, 3.0)
        self.assertEqual(n1.lyric, 'testing')

        n2 = note.Note()

        raw = freezeThaw.JSONFreezer(n1).json
        freezeThaw.JSONThawer(n2).json = raw

        self.assertEqual(n2.pitch.nameWithOctave, 'G#3')
        self.assertEqual(n2.quarterLength, 3.0)
Exemplo n.º 12
0
    def testDateSingle(self):
        from music21 import freezeThaw
        from music21 import metadata

        dateSingle = metadata.primitives.DateSingle(
            '2009/12/31', 'approximate')
        self.assertEqual(str(dateSingle), '2009/12/31')
        self.assertEqual(len(dateSingle._data), 1)

        dateSingleNew = metadata.primitives.DateSingle()
        self.assertEqual(len(dateSingleNew._data), 1)

        jsonStr = freezeThaw.JSONFreezer(dateSingle).json
        freezeThaw.JSONThawer(dateSingleNew).json = jsonStr

        self.assertEqual(len(dateSingleNew._data), 1)
        self.assertEqual(dateSingleNew._relevance, 'approximate')
        self.assertEqual(dateSingleNew._dataError, ['approximate'])
        self.assertEqual(str(dateSingleNew), '2009/12/31')
Exemplo n.º 13
0
    def testDateBetween(self):
        from music21 import freezeThaw
        from music21 import metadata

        dateBetween = metadata.primitives.DateBetween(
            ('2009/12/31', '2010/1/28'))
        self.assertEqual(str(dateBetween), '2009/12/31 to 2010/01/28')
        self.assertEqual(dateBetween.relevance, 'between')
        self.assertEqual(dateBetween._dataError, [None, None])
        self.assertEqual(len(dateBetween._data), 2)

        dateBetweenNew = metadata.primitives.DateBetween()

        jsonStr = freezeThaw.JSONFreezer(dateBetween).json
        freezeThaw.JSONThawer(dateBetweenNew).json = jsonStr

        self.assertEqual(len(dateBetweenNew._data), 2)
        self.assertEqual(dateBetweenNew._relevance, 'between')
        self.assertEqual(dateBetweenNew._dataError, [None, None])
        self.assertEqual(str(dateBetweenNew), '2009/12/31 to 2010/01/28')
Exemplo n.º 14
0
    def testDateSelection(self):
        from music21 import freezeThaw
        from music21 import metadata

        dateSelection = metadata.primitives.DateSelection(
            ['2009/12/31', '2010/1/28', '1894/1/28'],
            'or',
            )
        self.assertEqual(str(dateSelection),
            '2009/12/31 or 2010/01/28 or 1894/01/28')
        self.assertEqual(dateSelection.relevance, 'or')
        self.assertEqual(dateSelection._dataError, [None, None, None])
        self.assertEqual(len(dateSelection._data), 3)

        dateSelectionNew = metadata.primitives.DateSelection()

        jsonStr = freezeThaw.JSONFreezer(dateSelection).json
        freezeThaw.JSONThawer(dateSelectionNew).json = jsonStr

        self.assertEqual(len(dateSelectionNew._data), 3)
        self.assertEqual(dateSelectionNew._relevance, 'or')
        self.assertEqual(dateSelectionNew._dataError, [None, None, None])
        self.assertEqual(str(dateSelectionNew),
            '2009/12/31 or 2010/01/28 or 1894/01/28')