music21.romanText.rtObjects

Translation routines for roman numeral analysis text files, as defined and demonstrated by Dmitri Tymoczko, Mark Gotham, Michael Scott Cuthbert, and Christopher Ariza in ISMIR 2019.

RTAnalyticKey

class music21.romanText.rtObjects.RTAnalyticKey(src='', container=None)[source]

An RTAnalyticKey(RTKeyTypeAtom) only defines a change in the key being analyzed. It does not in itself create a Key object.

>>> gMinor = romanText.rtObjects.RTAnalyticKey('g:')
>>> gMinor
<music21.romanText.rtObjects.RTAnalyticKey 'g:'>
>>> gMinor.getKey()
<music21.key.Key of g minor>
>>> bMinor = romanText.rtObjects.RTAnalyticKey('bb:')
>>> bMinor
<music21.romanText.rtObjects.RTAnalyticKey 'bb:'>
>>> bMinor.getKey()
<music21.key.Key of b- minor>

RTAnalyticKey bases

RTAnalyticKey read-only properties

Read-only properties inherited from ProtoM21Object:

RTAnalyticKey methods

Methods inherited from RTKeyTypeAtom:

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTAtom

class music21.romanText.rtObjects.RTAtom(src='', container=None)[source]

In RomanText, definitions of chords, phrases boundaries, open/close parenthesis, beat indicators, etc. appear within measures (RTMeasure objects). These individual elements will be called Atoms, as they are data that is not tagged.

Each atom store a reference to its container (normally an RTMeasure).

>>> chordIV = romanText.rtObjects.RTAtom('IV')
>>> beat4 = romanText.rtObjects.RTAtom('b4')
>>> beat4
<music21.romanText.rtObjects.RTAtom 'b4'>
>>> beat4.isAtom()
True

However, see RTChord, RTBeat, etc. which are subclasses of RTAtom specifically for storing chords, beats, etc.

RTAtom bases

RTAtom read-only properties

Read-only properties inherited from ProtoM21Object:

RTAtom methods

RTAtom.isAtom()[source]

Atoms are any untagged data; generally only found inside a measure definition.

Methods inherited from RTToken:

RTBeat

class music21.romanText.rtObjects.RTBeat(src='', container=None)[source]

An RTAtom subclass that defines a beat definition. Also contains a reference to the container.

>>> beatFour = romanText.rtObjects.RTBeat('b4')
>>> beatFour
<music21.romanText.rtObjects.RTBeat 'b4'>

RTBeat bases

RTBeat read-only properties

Read-only properties inherited from ProtoM21Object:

RTBeat methods

RTBeat.getBeatFloatOrFrac()[source]

Gets the beat number as a float or fraction. Time signature independent

>>> RTB = romanText.rtObjects.RTBeat

Simple ones:

>>> RTB('b1').getBeatFloatOrFrac()
1.0
>>> RTB('b2').getBeatFloatOrFrac()
2.0

etc.

with easy float:

>>> RTB('b1.5').getBeatFloatOrFrac()
1.5
>>> RTB('b1.25').getBeatFloatOrFrac()
1.25

with harder:

>>> RTB('b1.33').getBeatFloatOrFrac()
Fraction(4, 3)
>>> RTB('b2.66').getBeatFloatOrFrac()
Fraction(8, 3)
>>> RTB('b1.2').getBeatFloatOrFrac()
Fraction(6, 5)

A third digit of 0.5 adds 1/2 of 1/DENOM of before. Here DENOM is 3 (in 5/3) so we add 1/6 to 5/3 to get 11/6:

>>> RTB('b1.66').getBeatFloatOrFrac()
Fraction(5, 3)
>>> RTB('b1.66.5').getBeatFloatOrFrac()
Fraction(11, 6)

Similarly 0.25 adds 1/4 of 1/DENOM, to get 21/12 or 7/4 or 1.75:

>>> RTB('b1.66.25').getBeatFloatOrFrac()
1.75

And 0.75 adds 3/4 of 1/DENOM to get 23/12:

>>> RTB('b1.66.75').getBeatFloatOrFrac()
Fraction(23, 12)

A weird way of writing ‘b1.5’:

>>> RTB('b1.33.5').getBeatFloatOrFrac()
1.5
RTBeat.getOffset(timeSignature)[source]

Given a time signature, return the offset position specified by this beat.

>>> rtb = romanText.rtObjects.RTBeat('b1.5')
>>> rtb.getOffset(meter.TimeSignature('3/4'))
0.5
>>> rtb.getOffset(meter.TimeSignature('6/8'))
0.75
>>> rtb.getOffset(meter.TimeSignature('2/2'))
1.0
>>> rtb = romanText.rtObjects.RTBeat('b2')
>>> rtb.getOffset(meter.TimeSignature('3/4'))
1.0
>>> rtb.getOffset(meter.TimeSignature('6/8'))
1.5
>>> rtb = romanText.rtObjects.RTBeat('b1.66')
>>> rtb.getOffset(meter.TimeSignature('6/8'))
1.0
>>> rtc = romanText.rtObjects.RTBeat('b1.66.5')
>>> rtc.getOffset(meter.TimeSignature('6/8'))
1.25

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTChord

class music21.romanText.rtObjects.RTChord(src='', container=None)[source]

An RTAtom subclass that defines a chord. Also contains a reference to the container.

>>> chordIV = romanText.rtObjects.RTChord('IV')
>>> chordIV
<music21.romanText.rtObjects.RTChord 'IV'>

RTChord bases

RTChord read-only properties

Read-only properties inherited from ProtoM21Object:

RTChord methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTCloseParens

class music21.romanText.rtObjects.RTCloseParens(src=')', container=None)[source]

A simple close parenthesis Atom with a sensible default

>>> romanText.rtObjects.RTCloseParens(')')
<music21.romanText.rtObjects.RTCloseParens ')'>

RTCloseParens bases

RTCloseParens read-only properties

Read-only properties inherited from ProtoM21Object:

RTCloseParens methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTEllisonStart

class music21.romanText.rtObjects.RTEllisonStart(src='|*', container=None)[source]
>>> phrase = romanText.rtObjects.RTEllisonStart('|*')
>>> phrase
<music21.romanText.rtObjects.RTEllisonStart '|*'>

RTEllisonStart bases

RTEllisonStart read-only properties

Read-only properties inherited from ProtoM21Object:

RTEllisonStart methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTEllisonStop

class music21.romanText.rtObjects.RTEllisonStop(src='*|', container=None)[source]
>>> phrase = romanText.rtObjects.RTEllisonStop('*|')
>>> phrase
<music21.romanText.rtObjects.RTEllisonStop '*|'>

RTEllisonStop bases

RTEllisonStop read-only properties

Read-only properties inherited from ProtoM21Object:

RTEllisonStop methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTFile

class music21.romanText.rtObjects.RTFile[source]

Roman Text File access.

RTFile bases

RTFile read-only properties

Read-only properties inherited from ProtoM21Object:

RTFile methods

RTFile.close()[source]
RTFile.open(filename)[source]

Open a file for reading, trying a variety of encodings and then trying them again with an “ignore” flag if it is not possible.

RTFile.openFileLike(fileLike)[source]

Assign a file-like object, such as those provided by StringIO, as an open file object.

RTFile.read()[source]

Read a file. Note that this calls readstr, which processes all tokens.

If number is given, a work number will be extracted if possible.

RTFile.readstr(strSrc)[source]

Read a string and process all Tokens. Returns a ABCHandler instance.

RTHandler

class music21.romanText.rtObjects.RTHandler[source]

RTHandler read/write properties

RTHandler.tokens

Get or set tokens for this Handler.

RTHandler methods

RTHandler.definesMovement()[source]

Return True if this handler has 1 or more movement.

>>> rth = romanText.rtObjects.RTHandler()
>>> rth.process('Movement: 1 \n \n m1')
>>> rth.definesMovements()
False
>>> rth.definesMovement()
True
RTHandler.definesMovements(countRequired=2)[source]

Return True if more than one movement is defined in a RT file.

>>> rth = romanText.rtObjects.RTHandler()
>>> rth.process('Movement: 1 \n Movement: 2 \n \n m1')
>>> rth.definesMovements()
True
>>> rth.process('Movement: 1 \n m1')
>>> rth.definesMovements()
False
RTHandler.process(src)[source]

Given an entire specification as a single source string, strSrc, tokenize it. This is usually provided in a file.

RTHandler.splitAtHeader(lines)[source]

Divide string into header and non-header; this is done before tokenization.

>>> rth = romanText.rtObjects.RTHandler()
>>> rth.splitAtHeader(['Title: s', 'Time Signature:', '', 'm1 g: i'])
(['Title: s', 'Time Signature:', ''], ['m1 g: i'])
RTHandler.splitByMovement(duplicateHeader=True)[source]

If we have movements defined, return a list of RTHandler rtObjects, representing header information and each movement, in order.

>>> rth = romanText.rtObjects.RTHandler()
>>> rth.process('Title: Test \n Movement: 1 \n m1 \n Movement: 2 \n m1')
>>> post = rth.splitByMovement(False)
>>> len(post)
3
>>> len(post[0])
1
>>> post[0].__class__
<class 'music21.romanText.rtObjects.RTHandler'>
>>> len(post[1]), len(post[2])
(2, 2)
>>> post = rth.splitByMovement(duplicateHeader=True)
>>> len(post)
2
>>> len(post[0]), len(post[1])
(3, 3)
RTHandler.tokenize(src)[source]

Walk the RT string, creating RT rtObjects along the way.

RTHandler.tokenizeAtoms(line, container=None)[source]

Given a line of data stored in measure consisting only of Atoms, tokenize and return a list.

>>> rth = romanText.rtObjects.RTHandler()
>>> rth.tokenizeAtoms('IV b3 ii7 b4 ii')
[<music21.romanText.rtObjects.RTChord 'IV'>,
 <music21.romanText.rtObjects.RTBeat 'b3'>,
 <music21.romanText.rtObjects.RTChord 'ii7'>,
 <music21.romanText.rtObjects.RTBeat 'b4'>,
 <music21.romanText.rtObjects.RTChord 'ii'>]
>>> rth.tokenizeAtoms('V7 b2 V13 b3 V7 iio6/5[no5]')
[<music21.romanText.rtObjects.RTChord 'V7'>,
 <music21.romanText.rtObjects.RTBeat 'b2'>,
 <music21.romanText.rtObjects.RTChord 'V13'>,
 <music21.romanText.rtObjects.RTBeat 'b3'>,
 <music21.romanText.rtObjects.RTChord 'V7'>,
 <music21.romanText.rtObjects.RTChord 'iio6/5[no5]'>]
>>> tokenList = rth.tokenizeAtoms('I b2 I b2.25 V/ii b2.5 bVII b2.75 V g: IV')
>>> tokenList
[<music21.romanText.rtObjects.RTChord 'I'>,
 <music21.romanText.rtObjects.RTBeat 'b2'>,
 <music21.romanText.rtObjects.RTChord 'I'>,
 <music21.romanText.rtObjects.RTBeat 'b2.25'>,
 <music21.romanText.rtObjects.RTChord 'V/ii'>,
 <music21.romanText.rtObjects.RTBeat 'b2.5'>,
 <music21.romanText.rtObjects.RTChord 'bVII'>,
 <music21.romanText.rtObjects.RTBeat 'b2.75'>,
 <music21.romanText.rtObjects.RTChord 'V'>,
 <music21.romanText.rtObjects.RTAnalyticKey 'g:'>,
 <music21.romanText.rtObjects.RTChord 'IV'>]
>>> tokenList[-2].getKey()
<music21.key.Key of g minor>
>>> rth.tokenizeAtoms('= m3')
[]
>>> tokenList = rth.tokenizeAtoms('g;: ||: V b2 ?(Bb: VII7 b3 III b4 ?)Bb: i :||')
>>> tokenList
[<music21.romanText.rtObjects.RTKey 'g;:'>,
 <music21.romanText.rtObjects.RTRepeatStart '||:'>,
 <music21.romanText.rtObjects.RTChord 'V'>,
 <music21.romanText.rtObjects.RTBeat 'b2'>,
 <music21.romanText.rtObjects.RTOptionalKeyOpen '?(Bb:'>,
 <music21.romanText.rtObjects.RTChord 'VII7'>,
 <music21.romanText.rtObjects.RTBeat 'b3'>,
 <music21.romanText.rtObjects.RTChord 'III'>,
 <music21.romanText.rtObjects.RTBeat 'b4'>,
 <music21.romanText.rtObjects.RTOptionalKeyClose '?)Bb:'>,
 <music21.romanText.rtObjects.RTChord 'i'>,
 <music21.romanText.rtObjects.RTRepeatStop ':||'>]
RTHandler.tokenizeBody(lines)[source]

In the body, we may have measure, time signature, or note declarations, as well as possible other tagged definitions.

RTHandler.tokenizeHeader(lines)[source]

In the header, we only have RTTagged tokens. We can this process these all as the same class.

RTKey

class music21.romanText.rtObjects.RTKey(src='', container=None)[source]

An RTKey(RTAtom) defines both a change in KeySignature and a change in the analyzed Key.

They are defined by “;:” after the Key.

>>> gMinor = romanText.rtObjects.RTKey('g;:')
>>> gMinor
<music21.romanText.rtObjects.RTKey 'g;:'>
>>> gMinor.getKey()
<music21.key.Key of g minor>
>>> bMinor = romanText.rtObjects.RTKey('bb;:')
>>> bMinor
<music21.romanText.rtObjects.RTKey 'bb;:'>
>>> bMinor.getKey()
<music21.key.Key of b- minor>
>>> bMinor.getKeySignature()
<music21.key.KeySignature of 5 flats>
>>> eFlatMajor = romanText.rtObjects.RTKey('Eb;:')
>>> eFlatMajor
<music21.romanText.rtObjects.RTKey 'Eb;:'>
>>> eFlatMajor.getKey()
<music21.key.Key of E- major>

RTKey bases

RTKey read-only properties

Read-only properties inherited from ProtoM21Object:

RTKey methods

Methods inherited from RTKeyTypeAtom:

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTKeySignature

class music21.romanText.rtObjects.RTKeySignature(src='', container=None)[source]

An RTKeySignature(RTAtom) only defines a change in the KeySignature. It does not in itself create a Key object, nor does it change the analysis taking place.

The number after KS defines the number of sharps (negative for flats).

>>> gMinor = romanText.rtObjects.RTKeySignature('KS-2')
>>> gMinor
<music21.romanText.rtObjects.RTKeySignature 'KS-2'>
>>> gMinor.getKeySignature()
<music21.key.KeySignature of 2 flats>
>>> aMajor = romanText.rtObjects.RTKeySignature('KS3')
>>> aMajor.getKeySignature()
<music21.key.KeySignature of 3 sharps>

RTKeySignature bases

RTKeySignature read-only properties

Read-only properties inherited from ProtoM21Object:

RTKeySignature methods

RTKeySignature.getKeySignature()[source]

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTKeyTypeAtom

class music21.romanText.rtObjects.RTKeyTypeAtom(src='', container=None)[source]

RTKeyTypeAtoms contain utility functions for all Key-type tokens, i.e. RTKey, RTAnalyticKey, but not KeySignature.

>>> gMinor = romanText.rtObjects.RTKeyTypeAtom('g;:')
>>> gMinor
<music21.romanText.rtObjects.RTKeyTypeAtom 'g;:'>
>>> gMinor.getKey()
<music21.key.Key of g minor>

RTKeyTypeAtom bases

RTKeyTypeAtom read-only properties

Read-only properties inherited from ProtoM21Object:

RTKeyTypeAtom methods

RTKeyTypeAtom.getKey()[source]

This returns a Key, not a KeySignature object

RTKeyTypeAtom.getKeySignature()[source]

Get a KeySignature object.

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTMeasure

class music21.romanText.rtObjects.RTMeasure(src='')[source]

In RomanText, measures are given one per line and always start with ‘m’.

For instance:

m4 i b3 v b4 VI m5 b2 g: IV b4 V m6 i m7 D: V

Measure ranges can be used and copied, such as:

m8-m9=m4-m5

RTMeasure objects can also define variant readings for a measure:

m1 ii m1var1 ii b2 ii6 b3 IV

Variants are not part of the tag, but are read into an attribute.

Endings are indicated by a single letter after the measure number, such as “a” for first ending.

>>> rtm = romanText.rtObjects.RTMeasure('m15a V6 b1.5 V6/5 b2 I b3 viio6')
>>> rtm.data
'V6 b1.5 V6/5 b2 I b3 viio6'
>>> rtm.number
[15]
>>> rtm.repeatLetter
['a']
>>> rtm.isMeasure()
True

RTMeasure bases

RTMeasure read-only properties

Read-only properties inherited from ProtoM21Object:

RTMeasure methods

RTMeasure.getCopyTarget()[source]

If this measure defines a copy operation, return two lists defining the measures to copy; the second list has the repeat data.

>>> rtm = romanText.rtObjects.RTMeasure('m35-36 = m29-30')
>>> rtm.number
[35, 36]
>>> rtm.getCopyTarget()
([29, 30], ['', ''])
>>> rtm = romanText.rtObjects.RTMeasure('m4 = m1')
>>> rtm.number
[4]
>>> rtm.getCopyTarget()
([1], [''])
RTMeasure.isMeasure()[source]

Methods inherited from RTToken:

RTNoChord

class music21.romanText.rtObjects.RTNoChord(src='', container=None)[source]

An RTAtom subclass that defines absence of a chord. Also contains a reference to the container.

>>> chordNC = romanText.rtObjects.RTNoChord('NC')
>>> chordNC
<music21.romanText.rtObjects.RTNoChord 'NC'>
>>> rth = romanText.rtObjects.RTHandler()
>>> rth.tokenizeAtoms('nc NC N.C.')
[<music21.romanText.rtObjects.RTNoChord 'nc'>,
 <music21.romanText.rtObjects.RTNoChord 'NC'>,
 <music21.romanText.rtObjects.RTNoChord 'N.C.'>]

RTNoChord bases

RTNoChord read-only properties

Read-only properties inherited from ProtoM21Object:

RTNoChord methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTOpenParens

class music21.romanText.rtObjects.RTOpenParens(src='(', container=None)[source]

A simple open parenthesis Atom with a sensible default

>>> romanText.rtObjects.RTOpenParens('(')
<music21.romanText.rtObjects.RTOpenParens '('>

RTOpenParens bases

RTOpenParens read-only properties

Read-only properties inherited from ProtoM21Object:

RTOpenParens methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTOptionalKeyClose

class music21.romanText.rtObjects.RTOptionalKeyClose(src='', container=None)[source]

Marks the end of an optional Key area which does not affect the roman numeral analysis.

For example, it is possible to analyze in Bb major, while remaining in g minor.

>>> possibleKey = romanText.rtObjects.RTOptionalKeyClose('?)Bb:')
>>> possibleKey
<music21.romanText.rtObjects.RTOptionalKeyClose '?)Bb:'>
>>> possibleKey.getKey()
<music21.key.Key of B- major>

RTOptionalKeyClose bases

RTOptionalKeyClose read-only properties

Read-only properties inherited from ProtoM21Object:

RTOptionalKeyClose methods

RTOptionalKeyClose.getKey()[source]

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTOptionalKeyOpen

class music21.romanText.rtObjects.RTOptionalKeyOpen(src='', container=None)[source]

Marks the beginning of an optional Key area which does not affect the roman numeral analysis. (For instance, it is possible to analyze in Bb major, while remaining in g minor)

>>> possibleKey = romanText.rtObjects.RTOptionalKeyOpen('?(Bb:')
>>> possibleKey
<music21.romanText.rtObjects.RTOptionalKeyOpen '?(Bb:'>
>>> possibleKey.getKey()
<music21.key.Key of B- major>

RTOptionalKeyOpen bases

RTOptionalKeyOpen read-only properties

Read-only properties inherited from ProtoM21Object:

RTOptionalKeyOpen methods

RTOptionalKeyOpen.getKey()[source]

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTPhraseBoundary

class music21.romanText.rtObjects.RTPhraseBoundary(src='||', container=None)[source]
>>> phrase = romanText.rtObjects.RTPhraseBoundary('||')
>>> phrase
<music21.romanText.rtObjects.RTPhraseBoundary '||'>

RTPhraseBoundary bases

RTPhraseBoundary read-only properties

Read-only properties inherited from ProtoM21Object:

RTPhraseBoundary methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTPhraseMarker

class music21.romanText.rtObjects.RTPhraseMarker(src='', container=None)[source]

A Phrase Marker:

>>> rtPhraseMarker = romanText.rtObjects.RTPhraseMarker('')
>>> rtPhraseMarker
<music21.romanText.rtObjects.RTPhraseMarker ''>

RTPhraseMarker bases

RTPhraseMarker read-only properties

Read-only properties inherited from ProtoM21Object:

RTPhraseMarker methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTRepeat

class music21.romanText.rtObjects.RTRepeat(src='', container=None)[source]
>>> repeat = romanText.rtObjects.RTRepeat('||:')
>>> repeat
<music21.romanText.rtObjects.RTRepeat '||:'>

RTRepeat bases

RTRepeat read-only properties

Read-only properties inherited from ProtoM21Object:

RTRepeat methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTRepeatStart

class music21.romanText.rtObjects.RTRepeatStart(src='||:', container=None)[source]
>>> repeat = romanText.rtObjects.RTRepeatStart()
>>> repeat
<music21.romanText.rtObjects.RTRepeatStart ...'||:'>

RTRepeatStart bases

RTRepeatStart read-only properties

Read-only properties inherited from ProtoM21Object:

RTRepeatStart methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTRepeatStop

class music21.romanText.rtObjects.RTRepeatStop(src=':||', container=None)[source]
>>> repeat = romanText.rtObjects.RTRepeatStop()
>>> repeat
<music21.romanText.rtObjects.RTRepeatStop ...':||'>

RTRepeatStop bases

RTRepeatStop read-only properties

Read-only properties inherited from ProtoM21Object:

RTRepeatStop methods

Methods inherited from RTAtom:

Methods inherited from RTToken:

RTTagged

class music21.romanText.rtObjects.RTTagged(src='')[source]

In romanText, some data elements are tags, that is a tag name, a colon, optional whitespace, and data. In non-RTTagged elements, there is just data.

All tagged tokens are subclasses of this class. Examples are:

Title: Die Jahrzeiten Composer: Fanny Mendelssohn

>>> rtTag = romanText.rtObjects.RTTagged('Title: Die Jahrzeiten')
>>> rtTag.tag
'Title'
>>> rtTag.data
'Die Jahrzeiten'
>>> rtTag.isTitle()
True
>>> rtTag.isComposer()
False

RTTagged bases

RTTagged read-only properties

Read-only properties inherited from ProtoM21Object:

RTTagged methods

RTTagged.isAnalyst()[source]

True if tag represents an analyst, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Analyst: This is an analyst.')
>>> tag.isAnalyst()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isAnalyst()
False
RTTagged.isComposer()[source]

True is the tag represents a composer.

>>> rth = romanText.rtObjects.RTTagged('Composer: Claudio Monteverdi')
>>> rth.isComposer()
True
>>> rth.isTitle()
False
>>> rth.isWork()
False
>>> rth.data
'Claudio Monteverdi'
RTTagged.isForm()[source]

True if tag represents a form, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Form: This is a form.')
>>> tag.isForm()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isForm()
False
RTTagged.isKeySignature()[source]

True if tag represents a key signature, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('KeySignature: This is a key signature.')
>>> tag.isKeySignature()
True
>>> tag.data
'This is a key signature.'

KeySignatures are a type of tagged data found outside of measures, such as “Key Signature: -1” meaning one flat.

Key signatures are generally numbers representing the number of sharps (or negative for flats). Non-standard key signatures are not supported.

>>> tag = romanText.rtObjects.RTTagged('KeySignature: -3')
>>> tag.data
'-3'

music21 supports one legacy key signature type: KeySignature: Bb which represents a one-flat signature. Important to note: no other key signatures of this type are supported. (For instance, KeySignature: Ab has no effect)

>>> tag = romanText.rtObjects.RTTagged('KeySignature: Bb')
>>> tag.data
'Bb'

Testing that .isKeySignature returns False for non-key signatures:

>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isKeySignature()
False

N.B.: this is not the same as a key definition found inside a Measure. These are represented by RTKey rtObjects, defined below, and are not RTTagged rtObjects, but RTAtom subclasses.

RTTagged.isMovement()[source]

True if tag represents a movement, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Movement: This is a movement.')
>>> tag.isMovement()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isMovement()
False
RTTagged.isNote()[source]

True if tag represents a note, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Note: This is a note.')
>>> tag.isNote()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isNote()
False
RTTagged.isPedal()[source]

True if tag represents a pedal, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Pedal: This is a pedal.')
>>> tag.isPedal()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isPedal()
False
RTTagged.isPiece()[source]

True if tag represents a piece, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Piece: This is a piece.')
>>> tag.isPiece()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isPiece()
False
RTTagged.isProofreader()[source]

True if tag represents a proofreader, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Proofreader: This is a proofreader.')
>>> tag.isProofreader()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isProofreader()
False
RTTagged.isSeventhMinor()[source]

True if tag represents a configuration setting for setting vii/viio/VII in minor

>>> tag = romanText.rtObjects.RTTagged('Seventh Minor: Courtesy')
>>> tag.isSeventhMinor()
True
>>> tag.data
'Courtesy'
RTTagged.isSixthMinor()[source]

True if tag represents a configuration setting for setting vi/vio/VI in minor

>>> tag = romanText.rtObjects.RTTagged('Sixth Minor: Flat')
>>> tag.isSixthMinor()
True
>>> tag.data
'Flat'
RTTagged.isTimeSignature()[source]

True if tag represents a time signature, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('TimeSignature: This is a time signature.')
>>> tag.isTimeSignature()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isTimeSignature()
False

TimeSignature header data can be found intermingled with measures.

RTTagged.isTitle()[source]

True if tag represents a title, otherwise False.

>>> tag = romanText.rtObjects.RTTagged('Title: This is a title.')
>>> tag.isTitle()
True
>>> tag = romanText.rtObjects.RTTagged('Nothing: Nothing at all.')
>>> tag.isTitle()
False
RTTagged.isVersion()[source]

True if tag defines the version of RomanText standard used, otherwise False.

Pieces without the tag are defined to conform to RomanText 1.0, the version described in the ISMIR publication.

>>> rth = romanText.rtObjects.RTTagged('RTVersion: 1.0')
>>> rth.isTitle()
False
>>> rth.isVersion()
True
>>> rth.tag
'RTVersion'
>>> rth.data
'1.0'
RTTagged.isWork()[source]

True if tag represents a work, otherwise False.

The “work” is not defined as a header tag, but is used to represent all tags, often placed after Composer, for the work or pieces designation.

>>> rth = romanText.rtObjects.RTTagged('Work: BWV232')
>>> rth.isWork()
True
>>> rth.tag
'Work'
>>> rth.data
'BWV232'

For historical reasons, the tag ‘Madrigal’ also designates a work.

>>> rth = romanText.rtObjects.RTTagged('Madrigal: 4.12')
>>> rth.isTitle()
False
>>> rth.isWork()
True
>>> rth.tag
'Madrigal'
>>> rth.data
'4.12'

Methods inherited from RTToken:

RTToken

class music21.romanText.rtObjects.RTToken(src='')[source]

Stores each linear, logical entity of a RomanText.

A multi-pass parsing procedure is likely necessary, as RomanText permits variety of groupings and markings.

>>> rtt = romanText.rtObjects.RTToken('||:')
>>> rtt
<music21.romanText.rtObjects.RTToken '||:'>

A standard RTToken returns False for all the following.

>>> rtt.isComposer() or rtt.isTitle() or rtt.isPiece()
False
>>> rtt.isAnalyst() or rtt.isProofreader()
False
>>> rtt.isTimeSignature() or rtt.isKeySignature() or rtt.isNote()
False
>>> rtt.isForm() or rtt.isPedal() or rtt.isMeasure() or rtt.isWork()
False
>>> rtt.isMovement() or rtt.isVersion() or rtt.isAtom()
False

RTToken bases

RTToken read-only properties

Read-only properties inherited from ProtoM21Object:

RTToken methods

RTToken.isAnalyst()[source]
RTToken.isAtom()[source]

Atoms are any untagged data; generally only found inside a measure definition.

RTToken.isComposer()[source]
RTToken.isForm()[source]

Occasionally found in header.

RTToken.isKeySignature()[source]
RTToken.isMeasure()[source]
RTToken.isMovement()[source]
RTToken.isNote()[source]
RTToken.isPedal()[source]
RTToken.isPiece()[source]
RTToken.isProofreader()[source]
RTToken.isTimeSignature()[source]
RTToken.isTitle()[source]
RTToken.isVersion()[source]
RTToken.isWork()[source]