from typing import Optional
from musicscore.xmlwrapper import XMLWrapper
from musicxml.xmlelement.xmlelement import XMLClef
__all__ = ['Clef', 'TrebleClef', 'BassClef', 'AltoClef', 'TenorClef']
[docs]class Clef(XMLWrapper):
_ATTRIBUTES = {'show', 'sign', 'line', 'octave_change'}
XMLClass = XMLClef
def __init__(self, sign: str = 'G', line: Optional[int] = 2, octave_change: int = None, show: bool = True,
default: bool = False, *args, **kwargs):
super().__init__()
self._xml_object = self.XMLClass(*args, **kwargs)
self._show = None
self.show = show
self.line = line
self.sign = sign
self.octave_change = octave_change
self._default = default
@property
def line(self) -> Optional[int]:
"""
Set and get ``value_`` of :obj:`~musicxml.xmlelement.xmlelement.XMLLine`
:return: ``self.xml_object.xml_line.value_``
:rtype: int, None
"""
if self.xml_object.xml_line:
return self.xml_object.xml_line.value_
@line.setter
def line(self, val):
self.xml_object.xml_line = val
@property
def octave_change(self) -> Optional[int]:
"""
Set and get ``value_`` (int) of :obj:`~musicxml.xmlelement.xmlelement.XMLOctaveChange` child object of associated :obj:`~musicxml.xmlelement.xmlelement.XMLClef` which indicates how many octaves must be added to get from written pitch to the sounding pitch.
:return: ``self.xml_object.xml_clef_octave_change.value_``
"""
if self.xml_object.xml_clef_octave_change:
return self.xml_object.xml_clef_octave_change.value_
@octave_change.setter
def octave_change(self, val):
self.xml_object.xml_clef_octave_change = val
@property
def sign(self) -> Optional[str]:
"""
Set and get ``value_`` of :obj:`~musicxml.xmlelement.xmlelement.XMLSign` child object of associated :obj:`~musicxml.xmlelement.xmlelement.XMLClef`
:return: ``self.xml_object.xml_sign.value_``
:rtype: str, None
"""
if self.xml_object.xml_sign:
return self.xml_object.xml_sign.value_
@sign.setter
def sign(self, val):
self.xml_object.xml_sign = val
@property
def show(self) -> bool:
"""
Set and get show attribute. If ``False`` :obj:`Clef` element is not shown.
"""
return self._show
@show.setter
def show(self, val):
if not isinstance(val, bool):
raise TypeError
self._show = val
def __copy__(self):
new_clef = self.__class__()
new_clef.sign = self.sign
new_clef.line = self.line
new_clef.octave_change = self.octave_change
new_clef.show = self._show
return new_clef
[docs]class TrebleClef(Clef):
"""
Default parameters:
- sign='G'
- line=2
"""
def __init__(self, show: bool = True, octave_change: Optional[int] = None, **kwargs):
super().__init__(sign='G', line=2, show=show, octave_change=octave_change, **kwargs)
[docs]class BassClef(Clef):
"""
Default parameters:
- sign='F'
- line=4
"""
def __init__(self, show: bool = True, octave_change: Optional[int] = None, **kwargs):
super().__init__(sign='F', line=4, show=show, octave_change=octave_change, **kwargs)
[docs]class AltoClef(Clef):
"""
Default parameters:
- sign='C'
- line=3
"""
def __init__(self, show: bool = True, octave_change: Optional[int] = None, **kwargs):
super().__init__(sign='C', line=3, show=show, octave_change=octave_change, **kwargs)
[docs]class TenorClef(Clef):
"""
Default parameters:
- sign='C'
- line=4
"""
def __init__(self, show: bool = True, octave_change: Optional[int] = None, **kwargs):
super().__init__(sign='C', line=4, show=show, octave_change=octave_change, **kwargs)
class PercussionClef(Clef):
"""
Default parameters:
- sign=percussion
- line=None
"""
def __init__(self, show: bool = True, octave_change: Optional[int] = None, **kwargs):
super().__init__(sign='percussion', line=None, show=show, octave_change=octave_change, **kwargs)