def show(self, obj, fmt, app=None, subformats=None, **keywords): ''' show using the appropriate subformat. ''' if subformats is None: subformats = ['vexflow'] if len(subformats) > 0 and subformats[0] == 'vexflow': return self.vfshow(obj) #subformats = ['lilypond','png'] helperFormat = subformats[0] helperSubformats = subformats[1:] from music21 import converter helperConverter = converter.Converter() helperConverter.setSubconverterFromFormat(helperFormat) helperSubConverter = helperConverter.subConverter ### hack to make musescore excerpts -- fix with a converter class in MusicXML savedDefaultTitle = defaults.title savedDefaultAuthor = defaults.author defaults.title = '' defaults.author = '' if 'Opus' not in obj.classes: fp = helperSubConverter.write(obj, helperFormat, subformats=helperSubformats) defaults.title = savedDefaultTitle defaults.author = savedDefaultAuthor if helperSubformats[0] == 'png': from music21.ipython21 import objects as ipythonObjects ipo = ipythonObjects.IPythonPNGObject(fp) return ipo else: from IPython.display import Image, display # @UnresolvedImport for s in obj.scores: fp = helperSubConverter.write(s, helperFormat, subformats=helperSubformats) if helperSubformats[0] == 'png': from music21.ipython21 import objects as ipythonObjects # @Reimport ipo = ipythonObjects.IPythonPNGObject(fp) display(Image(filename=ipo.fp, retina=True)) defaults.title = savedDefaultTitle defaults.author = savedDefaultAuthor return None
def write(self, obj, fmt, fp=None, subformats=None, **keywords): from music21 import lily conv = lily.translate.LilypondConverter() if 'coloredVariants' in keywords and keywords[ 'coloredVariants'] is True: conv.coloredVariants = True if subformats is not None and 'pdf' in subformats: conv.loadFromMusic21Object(obj) convertedFilePath = conv.createPDF(fp) return convertedFilePath elif subformats is not None and 'png' in subformats: conv.loadFromMusic21Object(obj) convertedFilePath = conv.createPNG(fp) if 'ipython' in subformats: from music21.ipython21 import objects as ipythonObjects ipo = ipythonObjects.IPythonPNGObject(convertedFilePath) return ipo else: return convertedFilePath elif subformats is not None and 'svg' in subformats: conv.loadFromMusic21Object(obj) convertedFilePath = conv.createSVG(fp) return convertedFilePath else: conv.loadFromMusic21Object(obj) convertedFilePath = conv.writeLyFile(ext='.ly', fp=fp) return convertedFilePath
def create_png_from_stream(stream, filename): helperFormat = 'musicxml' helperSubformats = ['png'] helperConverter = converter.Converter() helperConverter.setSubconverterFromFormat(helperFormat) helperSubConverter = helperConverter.subConverter # if helperFormat == 'musicxml': # ### hack to make musescore excerpts -- fix with a converter class in MusicXML # savedDefaultTitle = defaults.title # savedDefaultAuthor = defaults.author # defaults.title = '' # defaults.author = '' # if 'Opus' not in obj.classes: fp = helperSubConverter.write(stream, helperFormat, subformats=helperSubformats) # defaults.title = savedDefaultTitle # defaults.author = savedDefaultAuthor if helperSubformats[0] == 'png': ipo = ipythonObjects.IPythonPNGObject(fp) target_filename = os.path.join(os.getcwd(), "static/tmp/{}.png".format(filename)) shutil.move(ipo.fp, target_filename) return (target_filename)
def show(self, obj, fmt, app=None, subformats=None, **keywords): if subformats is None: subformats = ['vexflow'] if len(subformats) > 0 and subformats[0] == 'vexflow': return self.vfshow(obj) #subformats = ['lilypond','png'] helperFormat = subformats[0] helperSubformats = subformats[1:] from music21 import converter helperConverter = converter.Converter() helperConverter.setSubconverterFromFormat(helperFormat) helperSubConverter = helperConverter.subConverter fp = helperSubConverter.write(obj, helperFormat, subformats=helperSubformats) if helperSubformats[0] == 'png': from music21.ipython21 import objects as ipythonObjects ipo = ipythonObjects.IPythonPNGObject(fp) return ipo
def show(self, obj, fmt, app=None, subformats=None, **keywords): ''' show using the appropriate subformat. ''' if subformats is None: subformats = ['vexflow'] if subformats and subformats[0] == 'vexflow': return self.vfshow(obj) #subformats = ['lilypond','png'] if subformats: helperFormat = subformats[0] helperSubformats = subformats[1:] else: helperFormat = "musicxml" helperSubformats = [] if not helperSubformats: helperSubformats = ['png'] from music21 import converter helperConverter = converter.Converter() helperConverter.setSubconverterFromFormat(helperFormat) helperSubConverter = helperConverter.subConverter if helperFormat in ('musicxml', 'xml', 'lilypond', 'lily'): ### hack to make musescore excerpts -- fix with a converter class in MusicXML savedDefaultTitle = defaults.title savedDefaultAuthor = defaults.author defaults.title = '' defaults.author = '' if 'Opus' not in obj.classes: fp = helperSubConverter.write(obj, helperFormat, subformats=helperSubformats) defaults.title = savedDefaultTitle defaults.author = savedDefaultAuthor if helperSubformats[0] == 'png': from music21.ipython21 import objects as ipythonObjects ipo = ipythonObjects.IPythonPNGObject(fp) return ipo else: from IPython.display import Image, display # @UnresolvedImport for s in obj.scores: fp = helperSubConverter.write(s, helperFormat, subformats=helperSubformats) if helperSubformats[0] == 'png': from music21.ipython21 import objects as ipythonObjects # @Reimport ipo = ipythonObjects.IPythonPNGObject(fp) display(Image(filename=ipo.fp, retina=True)) defaults.title = savedDefaultTitle defaults.author = savedDefaultAuthor return None elif helperFormat == 'midi': import base64 from IPython.display import HTML, display # @UnresolvedImport @Reimport fp = helperSubConverter.write(obj, helperFormat, subformats=helperSubformats) with open(fp, 'rb') as f: binaryMidiData = f.read() binaryBase64 = base64.b64encode(binaryMidiData) s = common.SingletonCounter() outputId = "midiPlayerDiv" + str(s()) display( HTML(""" <div id='""" + outputId + """'></div> <link rel="stylesheet" href="http://artusi.xyz/music21j/css/m21.css" type="text/css" /> <script> require.config({ paths: {'music21': 'http://artusi.xyz/music21j/src/music21'} }); require(['music21'], function() { mp = new music21.miditools.MidiPlayer(); mp.addPlayer('#""" + outputId + """'); mp.base64Load('data:audio/midi;base64,""" + binaryBase64.decode('utf-8') + """'); }); </script>"""))
def show(self, obj, fmt, app=None, subformats=None, **keywords): # pragma: no cover ''' show using the appropriate subformat. ''' if subformats is None: subformats = ['vexflow'] if subformats and subformats[0] == 'vexflow': return self.vfshow(obj) #subformats = ['lilypond', 'png'] if subformats: helperFormat = subformats[0] helperSubformats = subformats[1:] else: helperFormat = "musicxml" helperSubformats = [] if not helperSubformats: helperSubformats = ['png'] from music21 import converter helperConverter = converter.Converter() helperConverter.setSubconverterFromFormat(helperFormat) helperSubConverter = helperConverter.subConverter from IPython.display import Image, display, HTML # @UnresolvedImport if helperFormat in ('musicxml', 'xml', 'lilypond', 'lily'): ### hack to make musescore excerpts -- fix with a converter class in MusicXML from music21.ipython21 import objects as ipythonObjects savedDefaultTitle = defaults.title savedDefaultAuthor = defaults.author defaults.title = '' defaults.author = '' if 'Opus' not in obj.classes: scores = [obj] else: scores = list(obj.scores) for s in scores: fp = helperSubConverter.write(s, helperFormat, subformats=helperSubformats, **keywords) if helperSubformats[0] == 'png': if not str(environLocal['musescoreDirectPNGPath']).startswith('/skip'): ipo = ipythonObjects.IPythonPNGObject(fp) display(Image(data=ipo.getData(), retina=True)) else: # smallest transparent pixel pngData64 = (b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA' + b'6fptVAAAACklEQVQYV2P4DwABAQEAWk1v8QAAAABJRU5ErkJggg==') pngData = base64.b64decode(pngData64) display(Image(data=pngData, retina=True)) defaults.title = savedDefaultTitle defaults.author = savedDefaultAuthor return None elif helperFormat == 'midi': fp = helperSubConverter.write(obj, helperFormat, subformats=helperSubformats) with open(fp, 'rb') as f: binaryMidiData = f.read() binaryBase64 = base64.b64encode(binaryMidiData) s = common.SingletonCounter() outputId = "midiPlayerDiv" + str(s()) display(HTML(""" <div id='""" + outputId + """'></div> <link rel="stylesheet" href="http://artusi.xyz/music21j/css/m21.css" type="text/css" /> <script> require.config({ paths: {'music21': 'http://artusi.xyz/music21j/src/music21'} }); require(['music21'], function() { mp = new music21.miditools.MidiPlayer(); mp.addPlayer('#""" + outputId + """'); mp.base64Load('data:audio/midi;base64,""" + binaryBase64.decode('utf-8') + """'); }); </script>"""))