Jump to content

New investigations about HandShape phrases and Chords


Chlipouni
 Share

Recommended Posts

Hi all guys !

 

This post is like a small gift in this Christmas time !

 

I) Current brakes in your creativity

 

In my opinion, the last improvements in EOF and DDC tools are difficult because we are facing some limitations about the SNG generation process in the RSToolkit.

That's why I decided to try to understand the code of this part of the tool.

To my surprise, I managed to obtain interesting results with only minor changes (less than 20 lines modified in "Sng2014FileWriter.cs").

 

I need to share with you my findings as they could have some impacts on the existing tools like EOF and DDC.

Do not hesitate to give your opinion about these possible improvements ...

 

II) Does the "chordDensity" attribute could work as expected ?

 

  YES : I have found a way to switch between a full chord display and the repeated chord box only by setting the "highDensity" attribute and by using only one handShape !

 

III) Is it possible to share the same finger positions for a sequence of similar chords (but not exactly the same ones) ?

 

  YES : with embedded handShapes technique (as used in some official DLCs)

 

  Let's start with the following example :

  handshapes.png

 

  There are only three main handShapes for chords D, C and G.

  In each of these main handShapes, you can have various chords variations (less strings used) :

  - 2 variations in the D chord sequence

  - 3 variations in the C chord sequence

  - 3 variations in the G chord sequence (and as you can see, the full G chord is not really used)

 

  To obtain a working solution, I had to modify the XML file like this :

...
  <chordTemplates count="9">
    <chordTemplate displayName="D" chordName="D" fret0="-1" fret1="-1" fret2="0" fret3="2" fret4="3" fret5="2" finger0="-1" finger1="-1" finger2="-1" finger3="1" finger4="3" finger5="2" />
    <chordTemplate displayName="-nop" chordName="" fret0="-1" fret1="-1" fret2="-1" fret3="2" fret4="3" fret5="2" finger0="-1" finger1="-1" finger2="-1" finger3="1" finger4="3" finger5="2" />
    <chordTemplate displayName="C" chordName="C" fret0="-1" fret1="3" fret2="2" fret3="0" fret4="1" fret5="0" finger0="-1" finger1="3" finger2="2" finger3="-1" finger4="1" finger5="-1" />
    <chordTemplate displayName="-nop" chordName="" fret0="-1" fret1="-1" fret2="2" fret3="0" fret4="1" fret5="0" finger0="-1" finger1="-1" finger2="2" finger3="-1" finger4="1" finger5="-1" />
    <chordTemplate displayName="-nop" chordName="" fret0="-1" fret1="-1" fret2="-1" fret3="0" fret4="1" fret5="0" finger0="-1" finger1="-1" finger2="-1" finger3="-1" finger4="1" finger5="-1" />
    <chordTemplate displayName="G" chordName="G" fret0="3" fret1="2" fret2="0" fret3="0" fret4="3" fret5="3" finger0="2" finger1="1" finger2="-1" finger3="-1" finger4="3" finger5="4" />
    <chordTemplate displayName="-nop" chordName="" fret0="3" fret1="2" fret2="0" fret3="0" fret4="-1" fret5="-1" finger0="2" finger1="1" finger2="-1" finger3="-1" finger4="-1" finger5="-1" />
    <chordTemplate displayName="-nop" chordName="" fret0="-1" fret1="-1" fret2="0" fret3="0" fret4="3" fret5="3" finger0="-1" finger1="-1" finger2="-1" finger3="-1" finger4="3" finger5="4" />
    <chordTemplate displayName="-nop" chordName="" fret0="-1" fret1="-1" fret2="-1" fret3="0" fret4="3" fret5="3" finger0="-1" finger1="-1" finger2="-1" finger3="-1" finger4="3" finger5="4" />
  </chordTemplates>

...

      <chords count="18">
        <chord time="6" chordId="0" highDensity="0">
          <chordNote time="6" fret="0" leftHand="-1" string="2" />
          <chordNote time="6" fret="2" leftHand="1" string="3" />
          <chordNote time="6" fret="3" leftHand="3" string="4" />
          <chordNote time="6" fret="2" leftHand="2" string="5" />
        </chord>
        <chord time="7" chordId="1" highDensity="0">
          <chordNote time="7" fret="2" leftHand="1" string="3" />
          <chordNote time="7" fret="3" leftHand="3" string="4" />
          <chordNote time="7" fret="2" leftHand="2" string="5" />
        </chord>
        <chord time="7.5" chordId="1" highDensity="1">
          <chordNote time="7.5" fret="2" leftHand="1" string="3" />
          <chordNote time="7.5" fret="3" leftHand="3" string="4" />
          <chordNote time="7.5" fret="2" leftHand="2" string="5" />
        </chord>
        <chord time="7.75" chordId="1" highDensity="1">
          <chordNote time="7.75" fret="2" leftHand="1" string="3" />
          <chordNote time="7.75" fret="3" leftHand="3" string="4" />
          <chordNote time="7.75" fret="2" leftHand="2" string="5" />
        </chord>
        <chord time="8" chordId="2" highDensity="0">
          <chordNote time="8" fret="3" leftHand="3" string="1" />
          <chordNote time="8" fret="2" leftHand="2" string="2" />
          <chordNote time="8" fret="0" leftHand="-1" string="3" />
          <chordNote time="8" fret="1" leftHand="1" string="4" />
          <chordNote time="8" fret="0" leftHand="-1" string="5" />
        </chord>
        <chord time="9" chordId="3" highDensity="0">
          <chordNote time="9" fret="2" leftHand="2" string="2" />
          <chordNote time="9" fret="0" leftHand="-1" string="3" />
          <chordNote time="9" fret="1" leftHand="1" string="4" />
          <chordNote time="9" fret="0" leftHand="-1" string="5" />
        </chord>
        <chord time="9.5" chordId="4" highDensity="0">
          <chordNote time="9.5" fret="0" leftHand="-1" string="3" />
          <chordNote time="9.5" fret="1" leftHand="2" string="4" />
          <chordNote time="9.5" fret="0" leftHand="-1" string="5" />
        </chord>
        <chord time="9.75" chordId="4" highDensity="1">
          <chordNote time="9.75" fret="0" leftHand="-1" string="3" />
          <chordNote time="9.75" fret="1" leftHand="2" string="4" />
          <chordNote time="9.75" fret="0" leftHand="-1" string="5" />
        </chord>
        <chord time="10" chordId="6" highDensity="0">
          <chordNote time="10" fret="3" leftHand="2" string="0" />
          <chordNote time="10" fret="2" leftHand="1" string="1" />
          <chordNote time="10" fret="0" leftHand="-1" string="2" />
          <chordNote time="10" fret="0" leftHand="-1" string="3" />
        </chord>
        <chord time="11" chordId="7" highDensity="0">
          <chordNote time="11" fret="0" leftHand="-1" string="2" />
          <chordNote time="11" fret="0" leftHand="-1" string="3" />
          <chordNote time="11" fret="3" leftHand="3" string="4" />
          <chordNote time="11" fret="3" leftHand="4" string="5" />
        </chord>
        <chord time="11.5" chordId="8" highDensity="0">
          <chordNote time="11.5" fret="0" leftHand="-1" string="3" />
          <chordNote time="11.5" fret="3" leftHand="3" string="4" />
          <chordNote time="11.5" fret="3" leftHand="4" string="5" />
        </chord>
        <chord time="11.75" chordId="8" highDensity="1">
          <chordNote time="11.75" fret="0" leftHand="-1" string="3" />
          <chordNote time="11.75" fret="3" leftHand="3" string="4" />
          <chordNote time="11.75" fret="3" leftHand="4" string="5" />
        </chord>
        <chord time="12" chordId="6" highDensity="0">
          <chordNote time="12" fret="3" leftHand="2" string="0" />
          <chordNote time="12" fret="2" leftHand="1" string="1" />
          <chordNote time="12" fret="0" leftHand="-1" string="2" />
          <chordNote time="12" fret="0" leftHand="-1" string="3" />
        </chord>
        <chord time="12.5" chordId="6" highDensity="1">
          <chordNote time="12.5" fret="3" leftHand="2" string="0" />
          <chordNote time="12.5" fret="2" leftHand="1" string="1" />
          <chordNote time="12.5" fret="0" leftHand="-1" string="2" />
          <chordNote time="12.5" fret="0" leftHand="-1" string="3" />
        </chord>
        <chord time="12.75" chordId="6" highDensity="1">
          <chordNote time="12.75" fret="3" leftHand="2" string="0" />
          <chordNote time="12.75" fret="2" leftHand="1" string="1" />
          <chordNote time="12.75" fret="0" leftHand="-1" string="2" />
          <chordNote time="12.75" fret="0" leftHand="-1" string="3" />
        </chord>
        <chord time="13" chordId="7" highDensity="0">
          <chordNote time="13" fret="0" leftHand="-1" string="2" />
          <chordNote time="13" fret="0" leftHand="-1" string="3" />
          <chordNote time="13" fret="3" leftHand="3" string="4" />
          <chordNote time="13" fret="3" leftHand="4" string="5" />
        </chord>
        <chord time="13.5" chordId="8" highDensity="0">
          <chordNote time="13.5" fret="0" leftHand="-1" string="3" />
          <chordNote time="13.5" fret="3" leftHand="3" string="4" />
          <chordNote time="13.5" fret="3" leftHand="4" string="5" />
        </chord>
        <chord time="13.75" chordId="8" highDensity="1">
          <chordNote time="13.75" fret="0" leftHand="-1" string="3" />
          <chordNote time="13.75" fret="3" leftHand="3" string="4" />
          <chordNote time="13.75" fret="3" leftHand="4" string="5" />
        </chord>
      </chords>

      <anchors count="3">
        <anchor time="6" fret="2" width="4" />
        <anchor time="8" fret="1" width="4" />
        <anchor time="10" fret="2" width="4" />
      </anchors>

      <handShapes count="14">
        <handShape chordId="0" endTime="7.9" startTime="5.9" />
        <handShape chordId="0" endTime="6.875" startTime="6" />
        <handShape chordId="1" endTime="7.875" startTime="7" />
        <handShape chordId="2" endTime="9.9" startTime="7.9" />
        <handShape chordId="2" endTime="8.875" startTime="8" />
        <handShape chordId="3" endTime="9.475" startTime="9" />
        <handShape chordId="4" endTime="9.875" startTime="9.5" />
        <handShape chordId="5" endTime="13.9" startTime="9.9" />
        <handShape chordId="6" endTime="10.875" startTime="10" />
        <handShape chordId="7" endTime="11.475" startTime="11" />
        <handShape chordId="8" endTime="11.875" startTime="11.5" />
        <handShape chordId="6" endTime="12.875" startTime="12" />
        <handShape chordId="7" endTime="13.475" startTime="13" />
        <handShape chordId="8" endTime="13.875" startTime="13.5" />
      </handShapes>

The XML chord tags has been simplified to clarify this example (all other attributes are used in the original file).

 

All the magic is in the handShapes section :

- The main handshapes start at 5.9, 7.9 and 9.9 and never have a note or a chord at their startTime position. They are used to define the handShape period and the finger positions.

- The embedded handshapes are used as usual, and associated to each sequence of chord variation (the highDensity attribute of chords tells which occurrences need to be fully displayed).

 

Here is the final result in the game (package generated with my specific release of the RSToolkit) :

 

IV) A handShape should allow to define partial finger positions

 

YES : as requested by Berneer a few weeks ago, sometimes we want to indicate only the fixed hand positions to play a sequence of notes (but not for all strings)

 

handshapes2.png

 

In this example, the chords (with ghost notes) are only here to indicate the finger positions of the handShape phrase.

In the second handShape phrase, I didn't want to have the note on the lower string (I removed it from the XML file).

 

The XML code looks like this :

  <chordTemplates count="2">
    <chordTemplate chordName="Amadd4" displayName="Amadd4" finger0="-1" finger1="1" finger2="3" finger3="1" finger4="1" finger5="1" fret0="-1" fret1="5" fret2="7" fret3="5" fret4="5" fret5="5" />
    <chordTemplate chordName="A7sus4/C" displayName="A7sus4/C" finger0="-1" finger1="1" finger2="1" finger3="1" finger4="1" finger5="1" fret0="-1" fret1="5" fret2="5" fret3="5" fret4="5" fret5="5" />
  </chordTemplates>
  ...
  <notes count="38"> ... </notes>
  <chords count="0"/>
  ...
  <handShapes count="4">
    <handShape chordId="0" endTime="9.251" startTime="5.9" />
    <handShape chordId="1" endTime="11.626" startTime="9.5" />
    <handShape chordId="0" endTime="15.251" startTime="11.5" />
    <handShape chordId="1" endTime="17.626" startTime="15.5" />
  </handShapes>
  ...

And the final result in game is :

 

Now, the votes are open  :D

  • Like 8
Link to comment
Share on other sites

Some of EOF's recent changes with handshapes should mean that visually similar/identical results should be achievable without overlapping handshapes, but let me know if I'm wrong about that.

 

I'm particularly interested in the changes about chord density. Will the toolkit now be able to explicitly honor the highDensity attribute independently of the handshape tags? For the sake of maintaining the last few years of compatibility, I think I'd like to leave the "crazy" status in use for marking a chord as low density, should I just plan on adding a new status to indicate high density?

Link to comment
Share on other sites

I'm particularly interested in the changes about chord density. Will the toolkit now be able to explicitly honor the highDensity attribute independently of the handshape tags? For the sake of maintaining the last few years of compatibility, I think I'd like to leave the "crazy" status in use for marking a chord as low density, should I just plan on adding a new status to indicate high density?

 

I totally agree with you about that.

With my update, I can control the displaying of each occurrence of a chord with the "highDensity" attribute. Even for the first occurrence of an handshape ...

 

Some of EOF's recent changes with handshapes should mean that visually similar/identical results should be achievable without overlapping handshapes, but let me know if I'm wrong about that.

 

  With the recent changes in EOF, I can't implement my second example with chord's variations and fixed finger positions.

 

  The reason is that in the game, each note or chord can be associated with two distinct handShapes, but in the current release of the Toolkit, they are never used together.

  Standard chords are associated with the first handShape level and notes in arpeggios with the second one.

 

  What I have changed for my testing purpose is to keep the current association of each chord with its usual handShape and added a new association with the global handShape at the second position.

 

  To use the nested handShapes logic, we are not so far in EOF :

  - no change about chords and their relationships with handShapes and chordTemplate 

  - when a handShape phrase is used in EOF :

     - generate a new chordTemplate (if not already exists) to indicate its finger positions

     - generate a new handShape which :

        - references the chordTemplate ("chordId" attribute)

        - has a startTime a few ms before the first chord or note in its time period

        - has en endTime a few ms after the last chord or note in its time period (sustain included)

 

  So, as you can see, the nested handShape feature should be simple to implement, the main handShape is generated by the "handShape phrase" and the nested handShapes are generated for each sequence of similar chords.

 

  Another two little things :

  - EOF should allow us to define freely the finger positions for the "handShape phrase" (remove checks to allow incomplete finger positions)

  - The use of displayed ghost notes for the first event of the "handShape phrase" to define its finger positions adds confusion :

      - I think about the use of the [Edit note frets / fingering] dialog box to define the new chordTemplate, but without displaying the notes

      - The first note of a "handShape phrase" is not always the one which defines the global finger positions

 

EDIT : I am working on my own release of the RSToolkit. I need to share these findings before asking the RSToolkit team to add these modifications ...

Link to comment
Share on other sites

Yeah, normally EOF won't allow the base chord in a handshape/arpeggio to omit any strings used within the phrase. I did a quick test and if I made one of the notes in the base chord string muted (with no fret value defined), it exported the chord tag with a chord template indicating that string isn't played. Its handshape tag indicated the string is played open.

 

In-game, what would be the visual difference between using nested handshapes versus using multiple adjacent handshapes?

 

Should I hold off on a forced high density mechanism until it's agreed that support for it is going to be ported to the standard RSToolkit's code?

Link to comment
Share on other sites

In-game, what would be the visual difference between using nested handshapes versus using multiple adjacent handshapes?

 

As a chordTemplate is used to define both :

- the notes of the chord

- the chord name

- the finger positions

 

Using adjacent handshapes for several variations of the same chord don't allow to fix the same finger positions for the entire handshape phrase.

That's why nested handshapes are useful :

- the global handshape defines the global time period and the finger positions (which are fixed all along the handshape phrase)

- the nested handshapes define the different variations of the chord (notes which are used for each variation) inside the handshape phrase

 

In EOF, a "handshape phrase" is used to define the finger positions of arpeggios. It can now also be used to define the finger positions of nested handshapes.

Link to comment
Share on other sites

I'm still not understanding how much of a benefit there'd be. Is it just to avoid the split second between adjacent handshape tags where the fingering would be removed from the screen? With the "ghost handshape" mechanism that was added a little while ago, you can even make the base chord of a handshape reflect notes on strings that weren't used inside that specific handshape phrase. Here's a post with a screenshot and XML example of the feature being used for consecutive chords that aren't the same but are similar:

http://customsforge.com/topic/22596-handshapearpeggio-for-multiple-notes-at-a-time/page-2?do=findComment&comment=183033

Link to comment
Share on other sites

I am searching the simplest way to manage this in EOF :

- by avoiding the modification of existing chords with ghost notes (which add a lot of confusion)

- by simply adding an handshape phrase to set the finger positions (as we are doing it for apeggios)

 

FYI, the official DLC : "Heart Shaped Box" is using this method.

 

In addition, the example you have referenced breaks the consistency between chords and their associated handShape ("chordId" attributes are not in consistency), and I have never seen this method in official DLCs.

 

Nevertheless, I am curious to know how I can do this with the current release of EOF :

 

Thanks

Link to comment
Share on other sites

Wouldn't this do it?

https://www.mediafire.com/?6bw7oifwaasy5ak

http://i15.photobucket.com/albums/a354/raynebc/screencap_zpshakpzsv6.jpg

(D chord variations)
      <chords count="18">
        <chord time="0.000" linkNext="0" accent="0" chordId="0" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="0.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.000" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.000" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="3" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.000" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="0.250" linkNext="0" accent="0" chordId="3" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="0.250" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.250" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="3" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.250" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="0.375" linkNext="0" accent="0" chordId="3" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="0.375" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.375" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="3" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.375" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="0.500" linkNext="0" accent="0" chordId="3" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="0.500" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.500" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="3" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.500" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
(C chord variations)
        <chord time="0.750" linkNext="0" accent="0" chordId="5" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="0.750" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="3" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="1" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.750" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.750" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.750" linkNext="0" accent="0" bend="0" fret="1" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="0.750" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="1.000" linkNext="0" accent="0" chordId="7" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="1.000" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.000" linkNext="0" accent="0" bend="0" fret="1" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="1.250" linkNext="0" accent="0" chordId="10" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="1.250" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.250" linkNext="0" accent="0" bend="0" fret="1" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.250" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="1.375" linkNext="0" accent="0" chordId="10" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="1.375" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.375" linkNext="0" accent="0" bend="0" fret="1" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.375" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
(G chord variations)
        <chord time="1.750" linkNext="0" accent="0" chordId="11" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="1.750" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="2" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="0" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.750" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="1" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.750" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="1.750" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="2.000" linkNext="0" accent="0" chordId="21" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="2.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.000" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.000" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="2.250" linkNext="0" accent="0" chordId="23" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="2.250" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.250" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.250" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="2.375" linkNext="0" accent="0" chordId="23" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="2.375" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.375" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.375" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="2.500" linkNext="0" accent="0" chordId="19" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="2.500" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="0" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.500" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="1" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.500" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.500" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="2.750" linkNext="0" accent="0" chordId="19" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="2.750" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="0" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.750" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="1" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.750" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.750" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="2.875" linkNext="0" accent="0" chordId="19" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="2.875" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="0" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.875" linkNext="0" accent="0" bend="0" fret="2" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="1" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.875" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="2.875" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="3.000" linkNext="0" accent="0" chordId="21" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="3.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="2" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.000" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.000" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.000" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="3.250" linkNext="0" accent="0" chordId="23" fretHandMute="0" highDensity="0" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="3.250" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.250" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.250" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
        <chord time="3.375" linkNext="0" accent="0" chordId="23" fretHandMute="0" highDensity="1" ignore="0" palmMute="0" hopo="0" strum="down">
          <chordNote time="3.375" linkNext="0" accent="0" bend="0" fret="0" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="3" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.375" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="4" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
          <chordNote time="3.375" linkNext="0" accent="0" bend="0" fret="3" hammerOn="0" harmonic="0" hopo="0" ignore="0" leftHand="-1" mute="0" palmMute="0" pluck="-1" pullOff="0" slap="-1" slideTo="-1" string="5" sustain="0.000" tremolo="0" harmonicPinch="0" pickDirection="0" rightHand="-1" slideUnpitchTo="-1" tap="0" vibrato="0"/>
        </chord>
      </chords>
...
      <handShapes count="3">
        <handShape chordId="0" endTime="0.625" startTime="0.000"/>
        <handShape chordId="5" endTime="1.500" startTime="0.750"/>
        <handShape chordId="12" endTime="3.500" startTime="1.750"/>
      </handShapes>
EOF generates a somewhat ridiculous 25 chord template tags, many of them duplicates (and it's on my list to improve that), but the handshape section is a nice and clean 3 tags.
Link to comment
Share on other sites

If I use your example with the current release of the Toolkit, all chords except the first one in a handshape are not fully displayed, so I can't see the chord variations (only repeated chord boxes).

 

If I use your example with my specific release of the Toolkit (with the fully working "chordDensity" attribute) It works fine.

 

So, your way to do it can make the job.

 

EDIT : #248 issue has been opened in GitHub in order to have the full control of the "chordDensity" tag

Link to comment
Share on other sites

@@raynebc,

 

  The use of only one level of handShapes may have a little caveat about the displayed chord name in the game.

 

  In your last example, the first occurrence of G chord at time 1.750 has a chordId (11) which is not the same as this of the associated handShape (12).

  The RSToolkit always uses the "chordName" attribute of the chord to set the name which is displayed in the game. In this specific case, the chordTemplate of this chord has no name (or possibly another name because this chord does not have all notes of the G chord).

 

  When I have used the two levels handShapes technique for a chord, the used  name was the one referenced by the handShape.

 

  Of course, this case can also be managed in EOF.

 

Thank you

Link to comment
Share on other sites

  • 2 weeks later...

Hi guys,

 

So I finally fell upon this thread that discusses chlipouni's new findings.... Silly me, I should check this section of the site more often.

 

I read this thread but need to read it again to make sure I understand all the details.

 

A couple of early questions come to mind:

 

1. @@Chlipouni, you went a slightly different direction than I thought you might have.

- The main handshapes start at 5.9, 7.9 and 9.9 and never have a note or a chord at their startTime position. They are used to define the handShape period and the finger positions.

- The embedded handshapes are used as usual, and associated to each sequence of chord variation (the highDensity attribute of chords tells which occurrences need to be fully displayed).

 

 

I thought you were going to say the fingerings were taken care of by the "embedded handshapes", so that individual chords in the main hand-shape would show their unique fingerings instead of the fingering of the first chord in the main handshape.

 

Would you know if it works when the "embedded handshapes" get the fingering assignments instead of the "main handshapes"?

 

I guess I'll have to re-read the thread to better understand the need for the embedded handshapes as you propose, as it currently seems to me that the main handshape does all the "work".

 

2. Heart Shaped Box being an on-disk song, I am wondering where that psarc file is located so I can look inside too. It's not in the DLC folder, so where is it?

 

3. What does "-nop" stand for in the chord templates? Does it act any differently than setting that to nothing ( "")

 

Thanks for your patience with my questions. This is all quite impressive work you did!!

"A dreamer is someone who wants beyond what is reasonable. A hero is a dreamer who cannot take no for an answer." (Martin Spina)

My Released CDLC - Blaze Bayley - Stare at the Sun & MacGyver Theme Song & Iron Maiden - No More Lies

Check out the Tech Notes Tutorial Version 1.1 // Chordify Tutorial Rough Draft.

Link to comment
Share on other sites

Hi @@Berneer,

 

  In the internal coding structures used by RS2014, each event (single note or chord) can be associated with two distinct handShapes.

  For now, the RSToolkit uses the first level handShape for chords and the second level handShape for arpeggios.

 

  I successfully tried to update the RSToolkit code in order to use these two levels for a same chord.

  The first level is used to define the current notes of the chord (embedded handShape) and the second level is used to define the global finger positions (which may have more notes).

 

  To differentiate the two handShape levels, I had to use different time positions :

   - if the HS time is lower than the first event -> it is treated like a main HS

   - if the HS time is equal than the first event -> it is treated like a embedded HS

 

  After a discussion with @@raynebc, we have found that embedded handShapes are not mandatory because :

  - we can now display a chord with the "high density" status even if the chord is not the first one of its handShape.

  - the chordTemplate used by a handShape can be different from the one used by a chord

 

  So, for my first video example which shows variations of chords in the same handShape, we can simply make it with :

  - only one handShape (with the full finger positions)

  - one or several chords which can use all notes or a subset of notes of the full chord

  - the "high density" status to control which occurrence to display as a full chord box or as a repeated box

 

  As the simplicity is better than complexity, for now, we are not going to implement embedded handShapes ...

 

  PS : about the "-nop" tag, I don't know exactly its real meaning.

          It is used in official DLCs in case of embedded handShapes.

          I tried to use or remove it but with no visible change, maybe another limitation of the RSToolkit.

  • Like 1
Link to comment
Share on other sites

  PS : about the "-nop" tag, I don't know exactly its real meaning.

          It is used in official DLCs in case of embedded handShapes.

          I tried to use or remove it but with no visible change, maybe another limitation of the RSToolkit.

I need examples and you'll get mask for -nop chords, cuz IDK about this status tho

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Guidelines. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. - Privacy Policy