def parseFile(self, fp, number=None): ''' Open from a file path; check to see if there is a pickled version available and up to date; if so, open that, otherwise open source. ''' # return fp to load, if pickle needs to be written, fp pickle # this should be able to work on a .mxl file, as all we are doing # here is seeing which is more recent from music21 import converter from music21.musicxml import xmlToM21 c = xmlToM21.MusicXMLImporter() # here, we can see if this is a mxl or similar archive arch = converter.ArchiveManager(fp) if arch.isArchive(): archData = arch.getData() c.xmlText = archData c.parseXMLText() else: # its a file path or a raw musicxml string c.readFile(fp) # movement titles can be stored in more than one place in musicxml # manually insert file name as a movementName title if no titles are defined if c.stream.metadata.movementName is None: junk, fn = os.path.split(fp) c.stream.metadata.movementName = fn self.stream = c.stream
def parseData(self, xmlString, number=None): ''' Open MusicXML data from a string. ''' from music21.musicxml import xmlToM21 c = xmlToM21.MusicXMLImporter() c.xmlText = xmlString c.parseXMLText() self.stream = c.stream