
    rh                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  \R                  " S5      r
 " S	 S
\R                  R                  5      r\S:X  a  SSKr\R                  " 5         gg)a  
This is an example of how converter.subConverters.SubConverter
can be subclassed in order to parse and write an unsupported format
in this case, the format, .qm, consists of a line of letters separated
by spaces:

    C E G D F

and turns each of them into a quarter note in octave 4 in 4/4.

Consult the code to see how it works.  To use, call
`converter.registerSubConverter(converter.qmConverter.QMConverter)`
then `myStream = converter.parse('quarterMusic: C E G D F')`
    )annotations)	converter)environment)meter)notestreamzconverter.qmConverterc                  >    \ rS rSrSrSrSrS	S jrS	S jrS
S jr	Sr
g)QMConverter$   )qmquarterMusic)r   Nc                J   UR                  5       n[        R                  " 5       n[        R                  " S5      nUR                  SU5        U H;  n[        R                  " U5      nSUR                  l	        UR                  U5        M=     UR                  5       U l        g)aM  
Parse the data.  The number attribute is not used.

>>> from music21.converter.qmConverter import QMConverter
>>> qmc = QMConverter()
>>> qmc.parseData('C D E G C')
>>> q_stream = qmc.stream
>>> q_stream.show('text')
{0.0} <music21.stream.Measure 1 offset=0.0>
    {0.0} <music21.clef.TrebleClef>
    {0.0} <music21.meter.TimeSignature 4/4>
    {0.0} <music21.note.Note C>
    {1.0} <music21.note.Note D>
    {2.0} <music21.note.Note E>
    {3.0} <music21.note.Note G>
{4.0} <music21.stream.Measure 2 offset=4.0>
    {0.0} <music21.note.Note C>
    {1.0} <music21.bar.Barline type=final>
z4/4r      N)splitr	   Partr   TimeSignatureinsertr   NotedurationquarterLengthappendmakeMeasures)selfstrDatanumberstrDataListsmbeatnObjs           W/home/james-whalen/.local/lib/python3.13/site-packages/music21/converter/qmConverter.py	parseDataQMConverter.parseData)   su    ( mmoKKM&	AD99T?D*+DMM'HHTN  
 nn&    c                    [        USSS9 nU R                  UR                  5       5        SSS5        g! , (       d  f       g= f)a7  
parse a file from disk.  If QMConverter is registered, then any
file ending in .qm will automatically be parsed.

>>> import os
>>> parserPath = common.getSourceFilePath() / 'converter'
>>> testPath = parserPath / 'quarterMusicTestIn.qm'

>>> from music21.converter.qmConverter import QMConverter
>>> qmc = QMConverter()
>>> qmc.parseFile(testPath)
>>> s = qmc.stream
>>> s.show('text')
{0.0} <music21.stream.Measure 1 offset=0.0>
    {0.0} <music21.clef.TrebleClef>
    {0.0} <music21.meter.TimeSignature 4/4>
    {0.0} <music21.note.Note C>
    {1.0} <music21.note.Note E>
    {2.0} <music21.note.Note G>
    {3.0} <music21.note.Note F>
{4.0} <music21.stream.Measure 2 offset=4.0>
    {0.0} <music21.note.Note E>
    {1.0} <music21.note.Note D>
    {2.0} <music21.note.Note C>
    {3.0} <music21.bar.Barline type=final>
rutf-8encodingN)openr#   read)r   filePathr   keywordsfs        r"   	parseFileQMConverter.parseFileI   s0    6 (C'2aNN1668$ 322s	    5
Ac                   SnUc  [         R                  S5      nUR                  5       R                   H  nXgR                  -   S-   nM     US-  n[        USSS9 nUR                  U5        S S S 5        U$ ! , (       d  f       U$ = f)N z.qm 
wr(   r)   )environLocalgetTempFileflattennotesnamer+   write)	r   objfmtfp
subformatsr.   musicnr/   s	            r"   r<   QMConverter.writeg   s    :))%0B$$AFFNS(E %"cG,GGEN - 	 -, 	s   A99
Br   )N)N )__name__
__module____qualname____firstlineno__registerFormatsregisterInputExtensionsregisterOutputExtensionsr#   r0   r<   __static_attributes__rD   r%   r"   r   r   $   s#    ,O%&'@%<r%   r   __main__N)__doc__
__future__r   music21r   r   r   r   r	   Environmentr7   subConvertersSubConverterr   rE   mainTestrD   r%   r"   <module>rU      sh    #     &&'>?O)))66 Od z r%   