Some refactoring
This commit is contained in:
@ -1,40 +1,44 @@
|
||||
"""Collection of converters"""
|
||||
from music21 import converter, note, stream, meter, chord
|
||||
from music21 import converter, note, stream, meter, chord, environment
|
||||
from ziffers import zparse, Ziffers, Pitch, Rest, Chord
|
||||
|
||||
def to_music21(strData: str|Ziffers, **options):
|
||||
|
||||
def to_music21(expression: str | Ziffers, **options):
|
||||
"""Helper for passing options to the parser"""
|
||||
converter.registerSubconverter(ZiffersMusic21)
|
||||
|
||||
if isinstance(strData,Ziffers):
|
||||
|
||||
if isinstance(expression, Ziffers):
|
||||
if options:
|
||||
options["preparsed"] = strData
|
||||
options["preparsed"] = expression
|
||||
else:
|
||||
options = {"preparsed": strData}
|
||||
options = {"preparsed": expression}
|
||||
options = {"ziffers": options}
|
||||
return converter.parse("PREPARSED", format="ziffers", keywords=options)
|
||||
|
||||
if options:
|
||||
options = {"ziffers": options}
|
||||
return converter.parse(strData, format="ziffers", keywords=options)
|
||||
else:
|
||||
test = converter.parse(strData, format="ziffers")
|
||||
return test
|
||||
return converter.parse(expression, format="ziffers", keywords=options)
|
||||
|
||||
test = converter.parse(expression, format="ziffers")
|
||||
return test
|
||||
|
||||
|
||||
def set_musescore_path(path: str):
|
||||
"""Helper for setting the Musescore path"""
|
||||
us = environment.UserSettings()
|
||||
settings = environment.UserSettings()
|
||||
# Default windows path:
|
||||
# 'C:\\Program Files\\MuseScore 3\\bin\\MuseScore3.exe'
|
||||
us['musicxmlPath'] = path
|
||||
us['musescoreDirectPNGPath'] = path
|
||||
settings["musicxmlPath"] = path
|
||||
settings["musescoreDirectPNGPath"] = path
|
||||
|
||||
|
||||
class ZiffersMusic21(converter.subConverters.SubConverter):
|
||||
"""Ziffers converter to Music21"""
|
||||
|
||||
registerFormats = ("ziffers",)
|
||||
registerInputExtensions = ("zf",)
|
||||
|
||||
def parseData(self, strData, number=None):
|
||||
def parseData(self, dataString, number=None):
|
||||
"""Parses Ziffers string to Music21 object"""
|
||||
# Look for options in keywords object
|
||||
keywords = self.keywords["keywords"]
|
||||
@ -43,25 +47,25 @@ class ZiffersMusic21(converter.subConverters.SubConverter):
|
||||
if "preparsed" in options:
|
||||
parsed = options["preparsed"]
|
||||
else:
|
||||
parsed = zparse(strData, **options)
|
||||
parsed = zparse(dataString, **options)
|
||||
else:
|
||||
parsed = zparse(strData)
|
||||
parsed = zparse(dataString)
|
||||
|
||||
s = stream.Part()
|
||||
note_stream = stream.Part()
|
||||
if "time" in options:
|
||||
m = meter.TimeSignature(options["time"]) # Common time
|
||||
m_item = meter.TimeSignature(options["time"]) # Common time
|
||||
else:
|
||||
m = meter.TimeSignature("c") # Common time
|
||||
m_item = meter.TimeSignature("c") # Common time
|
||||
|
||||
s.insert(0, m)
|
||||
note_stream.insert(0, m_item)
|
||||
for item in parsed:
|
||||
if isinstance(item,Pitch):
|
||||
if isinstance(item, Pitch):
|
||||
m_item = note.Note(item.note)
|
||||
m_item.duration.quarterLength = item.duration * 4
|
||||
elif isinstance(item,Rest):
|
||||
elif isinstance(item, Rest):
|
||||
m_item = note.Rest(item.duration * 4)
|
||||
elif isinstance(item,Chord):
|
||||
elif isinstance(item, Chord):
|
||||
m_item = chord.Chord(item.notes)
|
||||
m_item.duration.quarterLength = item.duration * 4
|
||||
s.append(m_item)
|
||||
self.stream = s.makeMeasures()
|
||||
note_stream.append(m_item)
|
||||
self.stream = note_stream.makeMeasures()
|
||||
|
||||
Reference in New Issue
Block a user