Add chord forms (stacked alterations, etc.)

This commit is contained in:
RunasSudo 2020-10-27 20:13:16 +11:00
parent fd511eee5b
commit a2ad3bc73a
Signed by: RunasSudo
GPG Key ID: 7234E476BF21C61A
7 changed files with 739 additions and 17 deletions

View File

@ -1,6 +1,6 @@
# musescore-serifjazz-chords
*musescore-serifjazz-chords* provides a [Musescore](https://musescore.org/) [chord symbol style file](https://musescore.org/en/handbook/chord-symbols#appearance) with Jazz-style superscripts and font distinctions, while using standard (sans-)serif fonts congruent with standard engraving formatting.
*musescore-serifjazz-chords* provides a [Musescore](https://musescore.org/) [chord symbol style file](https://musescore.org/en/handbook/chord-symbols#appearance) with Jazz-style superscripts and font distinctions, and stacked chord alterations, while using standard (sans-)serif fonts congruent with standard engraving formatting.
![Screenshot](https://yingtongli.me/git/musescore-serifjazz-chords/plain/Screenshot.png)
@ -23,3 +23,15 @@ The layout parameters in these XML files are designed for, and expect, the *Free
XML files corresponding to specific staff sizes should not be directly edited. They are automatically generated from *chords_serifjazz.m4.xml*. This is an [m4](https://en.wikipedia.org/wiki/M4_%28computer_language%29) file, which automatically substitutes appropriate layout parameters for each staff size.
Output XML files can be regenerated using the *build.sh* script. Additional staff sizes can be introduced by editing this script.
The m4 files accept the following parameters, configured using the `-DKEY=VALUE` command line switch:
* *FONT_MUSIC*: The name of the font used for musical symbols: sharps, flats and (half-)diminished symbols.
* *FONT_SERIF*: The name of the font used for chord letters.
* *FONT_SANS*: The name of the font used for extensions and alterations.
* *AMT_SUP*: The amount (in 1/5 MuseScore spatium units) to raise text to be superscripted. This needs to be set for each individual staff size.
* *AMT_UNSUP*: The amount (in 1/5 MuseScore spatium units) to correct for characters already superscripted in the font (e.g. the degree symbol for diminished chords).
* *SUS_SUPER*: Set this key if *sus* is to be superscripted.
* *CHORD_FORMS*: Set this key if forms for specific chords are to be generated (e.g. automatically convert Cmmaj7 to Cm<sup>(maj7)</sup>, and stack chord alterations).
* *SYM_MI*: The symbol to be used for minor chord forms (has effect only if *CHORD_FORMS* is enabled), e.g. *m* or *MI* or *mi*.
* *SYM_MA*: The symbol to be used for major chord forms (has effect only if *CHORD_FORMS* is enabled), e.g. *maj* or *MA*.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -1,4 +1,6 @@
#!/bin/bash
m4 -P -DAMT_SUP=3.5 -DAMT_UNSUP=2.5 -DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans chords_serifjazz.m4.xml > chords_serifjazz_1.764mm_Default.xml
m4 -P -DAMT_SUP=4.2 -DAMT_UNSUP=3.5 -DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans chords_serifjazz.m4.xml > chords_serifjazz_1.375mm_R6.xml
m4 -P -DAMT_SUP=6.0 -DAMT_UNSUP=5.1 -DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans chords_serifjazz.m4.xml > chords_serifjazz_0.925mm_R8.xml
ARGS="-DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans -DSUS_SUPER -DCHORD_FORMS -DSYM_MI=m -DSYM_MA=maj"
m4 -P -DAMT_SUP=3.5 -DAMT_UNSUP=2.5 $ARGS chords_serifjazz.m4.xml > chords_serifjazz_1.764mm_Default.xml
m4 -P -DAMT_SUP=4.2 -DAMT_UNSUP=3.5 $ARGS chords_serifjazz.m4.xml > chords_serifjazz_1.375mm_R6.xml
m4 -P -DAMT_SUP=6.0 -DAMT_UNSUP=5.1 $ARGS chords_serifjazz.m4.xml > chords_serifjazz_0.925mm_R8.xml

View File

@ -51,11 +51,12 @@
<sym code="0x1d12b" name="bb"/>
<sym name="/"/>
<sym name="+"/>
</font>
<!-- Serif font adjusted superscript characters -->
<font family="FONT_SERIF">
<font family="FONT_MUSIC">
<mag>1.4</mag>
<sym code="0x00b0" name="degree"/>
@ -74,11 +75,14 @@
<sym name=")"/>
<sym name="M"/>
<sym name="Ma"/>
<sym name="MA"/>
<sym name="Maj"/>
<sym name="maj"/>
<sym name="m"/>
<sym name="min"/>
<sym name="MI"/>
<sym name="Mi"/>
<sym name="mi"/>
<sym name="Min"/>
<sym name="aug"/>
<sym name="Aug"/>
@ -91,6 +95,9 @@
<sym name="pedal"/>
<sym name="Pedal"/>
<sym name="no"/>
<sym name="omit"/>
<sym value="0" name="s0"/>
<sym value="1" name="s1"/>
<sym value="2" name="s2"/>
@ -105,6 +112,13 @@
<sym value="(" name="s("/>
<sym value=")" name="s)"/>
<sym code="0x239b" name="st("/>
<sym code="0x239c" name="sm("/>
<sym code="0x239d" name="sb("/>
<sym code="0x239e" name="st)"/>
<sym code="0x239f" name="sm)"/>
<sym code="0x23a0" name="sb)"/>
</font>
<font family="FONT_MUSIC">
@ -122,9 +136,6 @@
<sym value="," name="s,"/>
<sym value="/" name="s/"/>
<sym name="no"/>
<sym name="omit"/>
</font>
<!--
@ -239,6 +250,14 @@
<name>#</name>
<render>m:0:-&sup; s# m:0:&sup;</render>
</token>
<token class="modifier">
<name>no</name>
<render>m:0:-&sup; no m:0:&sup;</render>
</token>
<token class="modifier">
<name>omit</name>
<render>m:0:-&sup; omit m:0:&sup;</render>
</token>
<!-- Extension numbers -->
<token class="extension">
@ -298,4 +317,162 @@
<renderRoot>:n :a</renderRoot>
<renderBase>m:-0.2:1 / m:0.2:1 :n :a m:0:-2</renderBase>
<!--
Part III: chord list
declare a list of chords to be explicitly recognized
any chord recognized as matching something on this list
will be rendered according to the definition in this list,
as opposed to being rendered directly from the chord symbol as typed
thus, it provides the ability to define overrides for rendering specific chord symbols
id internal chord number
may be omitted if you don't need compatibility with older chord description files
name ordinary text name of chord
multiple names can be used to allow several different representations of the same chord
but there is no need to list the most common variations like "CMaj7" versus "Cma7"
the need for multiple names comes in if you want
significantly different ways of entering the same chord
so listing "mi7b5" and "07" as aliases for the same (half-diminished) chord
would allow them to be recognized as equivalent
render this is a script which contains render commands
commands:
xxx draw symbol name xxx
m:x:y add x:y to current position (1/5 spatium units)
:push
:pop
:n root or base note
:a accidental
if omitted, chord will be rendered directly from the first name listed above
so you can get all major seventh chords to render as "ma7" by creating a chord definition
with no id or render tag, and just the single name "ma7"
-->
m4_ifdef(`CHORD_FORMS', `
<chord>
<name>add9</name>
<render>m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>madd9</name>
<render>SYM_MI m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>mmaj7</name>
<render>SYM_MI m:0:-&sup; s( SYM_MA s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9maj7</name>
<render>SYM_MI m:0:-&sup; s9 s( SYM_MA s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+maj7</name>
<render>+ m:0:-&sup; s( SYM_MA s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+9maj7</name>
<render>+ m:0:-&sup; s9 s( SYM_MA s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>mb5</name>
<render>SYM_MI m:0:-&sup; s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b5</name>
<render>m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b5</name>
<render>SYM_MI m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>9b5</name>
<render>m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9b5</name>
<render>SYM_MI m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b9</name>
<render>m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b9</name>
<render>SYM_MI m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9</name>
<render>m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
m4_define(`LTB2', ``m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb('')
m4_define(`RTB2', ``:push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5'')
m4_define(`SUP2', ``:push m:0:-11 $1 :pop'')
<chord>
<name>7#9b5</name>
<render>m:0:-&sup; s7 LTB2 SUP2(`s# s9') sb s5 RTB2 m:0:&sup;</render>
</chord>
<chord>
<name>7b9b5</name>
<render>m:0:-&sup; s7 LTB2 SUP2(`sb s9') sb s5 RTB2 m:0:&sup;</render>
</chord>
<chord>
<name>m7b9b5</name>
<render>SYM_MI m:0:-&sup; s7 LTB2 SUP2(`sb s9') sb s5 RTB2 m:0:&sup;</render>
</chord>
<chord>
<name>+7b9</name>
<render>+ m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>+7#9</name>
<render>+ m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>9#11</name>
<render>m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9#11</name>
<render>SYM_MI m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#11b9</name>
<render>m:0:-&sup; s7 LTB2 SUP2(`s# s1 s1') m:2:0 sb s9 m:2:0 RTB2 m:0:&sup;</render>
</chord>
<chord>
<name>m7#11b9</name>
<render>SYM_MI m:0:-&sup; s7 LTB2 SUP2(`s# s1 s1') m:2:0 sb s9 m:2:0 RTB2 m:0:&sup;</render>
</chord>
<chord>
<name>+7#11b9</name>
<render>+ m:0:-&sup; s7 LTB2 SUP2(`s# s1 s1') m:2:0 sb s9 m:2:0 RTB2 m:0:&sup;</render>
</chord>
')
</museScore>

View File

@ -51,6 +51,7 @@
<sym code="0x1d12b" name="bb"/>
<sym name="/"/>
<sym name="+"/>
</font>
@ -74,11 +75,14 @@
<sym name=")"/>
<sym name="M"/>
<sym name="Ma"/>
<sym name="MA"/>
<sym name="Maj"/>
<sym name="maj"/>
<sym name="m"/>
<sym name="min"/>
<sym name="MI"/>
<sym name="Mi"/>
<sym name="mi"/>
<sym name="Min"/>
<sym name="aug"/>
<sym name="Aug"/>
@ -91,6 +95,9 @@
<sym name="pedal"/>
<sym name="Pedal"/>
<sym name="no"/>
<sym name="omit"/>
<sym value="0" name="s0"/>
<sym value="1" name="s1"/>
<sym value="2" name="s2"/>
@ -105,6 +112,13 @@
<sym value="(" name="s("/>
<sym value=")" name="s)"/>
<sym code="0x239b" name="st("/>
<sym code="0x239c" name="sm("/>
<sym code="0x239d" name="sb("/>
<sym code="0x239e" name="st)"/>
<sym code="0x239f" name="sm)"/>
<sym code="0x23a0" name="sb)"/>
</font>
<font family="default">
@ -122,9 +136,6 @@
<sym value="," name="s,"/>
<sym value="/" name="s/"/>
<sym name="no"/>
<sym name="omit"/>
</font>
<!--
@ -239,6 +250,14 @@
<name>#</name>
<render>m:0:-&sup; s# m:0:&sup;</render>
</token>
<token class="modifier">
<name>no</name>
<render>m:0:-&sup; no m:0:&sup;</render>
</token>
<token class="modifier">
<name>omit</name>
<render>m:0:-&sup; omit m:0:&sup;</render>
</token>
<!-- Extension numbers -->
<token class="extension">
@ -298,4 +317,162 @@
<renderRoot>:n :a</renderRoot>
<renderBase>m:-0.2:1 / m:0.2:1 :n :a m:0:-2</renderBase>
<!--
Part III: chord list
declare a list of chords to be explicitly recognized
any chord recognized as matching something on this list
will be rendered according to the definition in this list,
as opposed to being rendered directly from the chord symbol as typed
thus, it provides the ability to define overrides for rendering specific chord symbols
id internal chord number
may be omitted if you don't need compatibility with older chord description files
name ordinary text name of chord
multiple names can be used to allow several different representations of the same chord
but there is no need to list the most common variations like "CMaj7" versus "Cma7"
the need for multiple names comes in if you want
significantly different ways of entering the same chord
so listing "mi7b5" and "07" as aliases for the same (half-diminished) chord
would allow them to be recognized as equivalent
render this is a script which contains render commands
commands:
xxx draw symbol name xxx
m:x:y add x:y to current position (1/5 spatium units)
:push
:pop
:n root or base note
:a accidental
if omitted, chord will be rendered directly from the first name listed above
so you can get all major seventh chords to render as "ma7" by creating a chord definition
with no id or render tag, and just the single name "ma7"
-->
<chord>
<name>add9</name>
<render>m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>madd9</name>
<render>m m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>mmaj7</name>
<render>m m:0:-&sup; s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9maj7</name>
<render>m m:0:-&sup; s9 s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+maj7</name>
<render>+ m:0:-&sup; s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+9maj7</name>
<render>+ m:0:-&sup; s9 s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>mb5</name>
<render>m m:0:-&sup; s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b5</name>
<render>m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b5</name>
<render>m m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>9b5</name>
<render>m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9b5</name>
<render>m m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b9</name>
<render>m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b9</name>
<render>m m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9</name>
<render>m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9b5</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>7b9b5</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>m7b9b5</name>
<render>m m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>+7b9</name>
<render>+ m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>+7#9</name>
<render>+ m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>9#11</name>
<render>m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9#11</name>
<render>m m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#11b9</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>m7#11b9</name>
<render>m m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>+7#11b9</name>
<render>+ m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
</museScore>

View File

@ -51,6 +51,7 @@
<sym code="0x1d12b" name="bb"/>
<sym name="/"/>
<sym name="+"/>
</font>
@ -74,11 +75,14 @@
<sym name=")"/>
<sym name="M"/>
<sym name="Ma"/>
<sym name="MA"/>
<sym name="Maj"/>
<sym name="maj"/>
<sym name="m"/>
<sym name="min"/>
<sym name="MI"/>
<sym name="Mi"/>
<sym name="mi"/>
<sym name="Min"/>
<sym name="aug"/>
<sym name="Aug"/>
@ -91,6 +95,9 @@
<sym name="pedal"/>
<sym name="Pedal"/>
<sym name="no"/>
<sym name="omit"/>
<sym value="0" name="s0"/>
<sym value="1" name="s1"/>
<sym value="2" name="s2"/>
@ -105,6 +112,13 @@
<sym value="(" name="s("/>
<sym value=")" name="s)"/>
<sym code="0x239b" name="st("/>
<sym code="0x239c" name="sm("/>
<sym code="0x239d" name="sb("/>
<sym code="0x239e" name="st)"/>
<sym code="0x239f" name="sm)"/>
<sym code="0x23a0" name="sb)"/>
</font>
<font family="default">
@ -122,9 +136,6 @@
<sym value="," name="s,"/>
<sym value="/" name="s/"/>
<sym name="no"/>
<sym name="omit"/>
</font>
<!--
@ -239,6 +250,14 @@
<name>#</name>
<render>m:0:-&sup; s# m:0:&sup;</render>
</token>
<token class="modifier">
<name>no</name>
<render>m:0:-&sup; no m:0:&sup;</render>
</token>
<token class="modifier">
<name>omit</name>
<render>m:0:-&sup; omit m:0:&sup;</render>
</token>
<!-- Extension numbers -->
<token class="extension">
@ -298,4 +317,162 @@
<renderRoot>:n :a</renderRoot>
<renderBase>m:-0.2:1 / m:0.2:1 :n :a m:0:-2</renderBase>
<!--
Part III: chord list
declare a list of chords to be explicitly recognized
any chord recognized as matching something on this list
will be rendered according to the definition in this list,
as opposed to being rendered directly from the chord symbol as typed
thus, it provides the ability to define overrides for rendering specific chord symbols
id internal chord number
may be omitted if you don't need compatibility with older chord description files
name ordinary text name of chord
multiple names can be used to allow several different representations of the same chord
but there is no need to list the most common variations like "CMaj7" versus "Cma7"
the need for multiple names comes in if you want
significantly different ways of entering the same chord
so listing "mi7b5" and "07" as aliases for the same (half-diminished) chord
would allow them to be recognized as equivalent
render this is a script which contains render commands
commands:
xxx draw symbol name xxx
m:x:y add x:y to current position (1/5 spatium units)
:push
:pop
:n root or base note
:a accidental
if omitted, chord will be rendered directly from the first name listed above
so you can get all major seventh chords to render as "ma7" by creating a chord definition
with no id or render tag, and just the single name "ma7"
-->
<chord>
<name>add9</name>
<render>m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>madd9</name>
<render>m m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>mmaj7</name>
<render>m m:0:-&sup; s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9maj7</name>
<render>m m:0:-&sup; s9 s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+maj7</name>
<render>+ m:0:-&sup; s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+9maj7</name>
<render>+ m:0:-&sup; s9 s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>mb5</name>
<render>m m:0:-&sup; s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b5</name>
<render>m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b5</name>
<render>m m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>9b5</name>
<render>m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9b5</name>
<render>m m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b9</name>
<render>m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b9</name>
<render>m m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9</name>
<render>m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9b5</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>7b9b5</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>m7b9b5</name>
<render>m m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>+7b9</name>
<render>+ m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>+7#9</name>
<render>+ m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>9#11</name>
<render>m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9#11</name>
<render>m m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#11b9</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>m7#11b9</name>
<render>m m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>+7#11b9</name>
<render>+ m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
</museScore>

View File

@ -51,6 +51,7 @@
<sym code="0x1d12b" name="bb"/>
<sym name="/"/>
<sym name="+"/>
</font>
@ -74,11 +75,14 @@
<sym name=")"/>
<sym name="M"/>
<sym name="Ma"/>
<sym name="MA"/>
<sym name="Maj"/>
<sym name="maj"/>
<sym name="m"/>
<sym name="min"/>
<sym name="MI"/>
<sym name="Mi"/>
<sym name="mi"/>
<sym name="Min"/>
<sym name="aug"/>
<sym name="Aug"/>
@ -91,6 +95,9 @@
<sym name="pedal"/>
<sym name="Pedal"/>
<sym name="no"/>
<sym name="omit"/>
<sym value="0" name="s0"/>
<sym value="1" name="s1"/>
<sym value="2" name="s2"/>
@ -105,6 +112,13 @@
<sym value="(" name="s("/>
<sym value=")" name="s)"/>
<sym code="0x239b" name="st("/>
<sym code="0x239c" name="sm("/>
<sym code="0x239d" name="sb("/>
<sym code="0x239e" name="st)"/>
<sym code="0x239f" name="sm)"/>
<sym code="0x23a0" name="sb)"/>
</font>
<font family="default">
@ -122,9 +136,6 @@
<sym value="," name="s,"/>
<sym value="/" name="s/"/>
<sym name="no"/>
<sym name="omit"/>
</font>
<!--
@ -239,6 +250,14 @@
<name>#</name>
<render>m:0:-&sup; s# m:0:&sup;</render>
</token>
<token class="modifier">
<name>no</name>
<render>m:0:-&sup; no m:0:&sup;</render>
</token>
<token class="modifier">
<name>omit</name>
<render>m:0:-&sup; omit m:0:&sup;</render>
</token>
<!-- Extension numbers -->
<token class="extension">
@ -298,4 +317,162 @@
<renderRoot>:n :a</renderRoot>
<renderBase>m:-0.2:1 / m:0.2:1 :n :a m:0:-2</renderBase>
<!--
Part III: chord list
declare a list of chords to be explicitly recognized
any chord recognized as matching something on this list
will be rendered according to the definition in this list,
as opposed to being rendered directly from the chord symbol as typed
thus, it provides the ability to define overrides for rendering specific chord symbols
id internal chord number
may be omitted if you don't need compatibility with older chord description files
name ordinary text name of chord
multiple names can be used to allow several different representations of the same chord
but there is no need to list the most common variations like "CMaj7" versus "Cma7"
the need for multiple names comes in if you want
significantly different ways of entering the same chord
so listing "mi7b5" and "07" as aliases for the same (half-diminished) chord
would allow them to be recognized as equivalent
render this is a script which contains render commands
commands:
xxx draw symbol name xxx
m:x:y add x:y to current position (1/5 spatium units)
:push
:pop
:n root or base note
:a accidental
if omitted, chord will be rendered directly from the first name listed above
so you can get all major seventh chords to render as "ma7" by creating a chord definition
with no id or render tag, and just the single name "ma7"
-->
<chord>
<name>add9</name>
<render>m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>madd9</name>
<render>m m:0:-&sup; s( sadd s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>mmaj7</name>
<render>m m:0:-&sup; s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9maj7</name>
<render>m m:0:-&sup; s9 s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+maj7</name>
<render>+ m:0:-&sup; s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>+9maj7</name>
<render>+ m:0:-&sup; s9 s( maj s7 s) m:0:&sup;</render>
</chord>
<chord>
<name>mb5</name>
<render>m m:0:-&sup; s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b5</name>
<render>m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b5</name>
<render>m m:0:-&sup; s7 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>9b5</name>
<render>m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9b5</name>
<render>m m:0:-&sup; s9 s( sb s5 s) m:0:&sup;</render>
</chord>
<chord>
<name>7b9</name>
<render>m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>m7b9</name>
<render>m m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9</name>
<render>m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#9b5</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>7b9b5</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>m7b9b5</name>
<render>m m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>+7b9</name>
<render>+ m:0:-&sup; s7 s( sb s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>+7#9</name>
<render>+ m:0:-&sup; s7 s( s# s9 s) m:0:&sup;</render>
</chord>
<chord>
<name>9#11</name>
<render>m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>m9#11</name>
<render>m m:0:-&sup; s9 s( s# s1 s1 s) m:0:&sup;</render>
</chord>
<chord>
<name>7#11b9</name>
<render>m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>m7#11b9</name>
<render>m m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
<chord>
<name>+7#11b9</name>
<render>+ m:0:-&sup; s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:&sup;</render>
</chord>
</museScore>