Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
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)
Beispiel #4
0
    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
Beispiel #5
0
    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>"""))
Beispiel #6
0
    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>"""))