Skip to main content
Topic: GuitarChord.ms (2.2) (Read 21744 times) previous topic - next topic

GuitarChord.ms (2.2)

This object can be used to draw guitar chord charts above a note or chord, and optionally "strum" the notes.

When adding a new chord, the user can choose one of 132 predefined chords, or can choose "(Custom)" to create a chord chart from scratch. When a chord is added to a staff, if there is another GuitarChord object earlier in the staff, it will inherit the style and properties of that object.

Following are the parameters used to configure the chart:

Chord Name: Name of the chord, drawn above the chart. Default value is blank.
Font Style: The font style to be used for the chord name and label text. The possible values are Serif (MusikChordSerif, Times New Roman), Sans (MusikChordSans, Arial) and Swing (SwingChord, SwingText). The default setting is Serif.
Fingerings: Contains the fret position (and optional finger number, separated by ':') for each string. o = open, x = don't play. Default value is blank.
Barres: Contains start:end string numbers for a set of strings to be held down by a particular finger. An arc is drawn over the string pair. Note that the strings are numbered from low pitch to high pitch. Default value is blank.
Chart Size: Size of the chord chart. This value can be thought of as a scale factor. Default value is 1
Frets to Show: Number of frets to show in the chart. Default value is 4.
Top Fret: Top fret displayed in the chart. When the value is 2 or more, "# fr." is displayed to the right of the chart. Default value is 1.
Fret Text Location: Determines whether the fret text (for Top Fret > 1) is displayed next to the top or bottom row of finger dots. Default value is 'top'.
Top Barre Offset: - this allows a barre at the top of the chord chart to be moved upward a specified distance, to avoid collision with "x" or "o" string labels. Default value is 0, which specifies no movement.

The Fingerings parameter above determines the notes which will be played back by the object, based on standard guitar tuning (E A D G B E). The following additional parameters are for playback only:

Capo Position: Indicates whether the chord should be transposed upward the specified number of steps. Default value is 0.
Note Span: Determines how many notes/rests the chord playback should span. A value of 0 will disable playback. Pressing the + or - keys while the object is selected will increase/decrease the span value. Default value is 0.
Strum Direction: Determines the direction in which the chord is strummed. This direction is the physical direction that the strings would be strummed on a guitar, so 'down' is from low- to high-pitched strings, and 'up' is the opposite. Default value is 'down'.
Anticipated Playback: Specifies that the strum should anticipate (precede) the chord, so that the final played note occurs on the chord's beat position. When unchecked, the first played note of the strummed chord is at the chord's beat position. Default value is on (checked).

The code for the object is attached to the post. A sample clip follows, which will sound best with the staff instrument set to one of the acoustic guitars.

Code: (nwc) [Select · Download]
!NoteWorthyComposerClip(2.75,Single)
|Clef|Type:Treble
|TimeSig|Signature:4/4
|User|GuitarChord.ms|Pos:6|Name:A/E|Frets:5|Size:1.5|Finger:"o o 2:1 2:1 2:1 o"|Barre:3:5|Span:2
|Rest|Dur:Half
|Note|Dur:Half|Pos:-8
|Bar
|User|GuitarChord.ms|Pos:6|Name:Ebsus/Bb|Frets:5|Size:1.5|Finger:"2:1 2:1 4:2 4:2 5:3 x"|Barre:"1:2 3:4"|Span:2|Style:Sans
|Rest|Dur:Half
|Note|Dur:Half|Pos:b-4
|Bar
|User|GuitarChord.ms|Pos:6|Name:Db|Frets:5|Size:1.5|Finger:"x 4 6 6 6 x"|TopFret:3|Barre:3:5|Span:2|Style:Swing
|Rest|Dur:Half
|Note|Dur:Half|Pos:b-5
|Bar
|User|GuitarChord.ms|Pos:6|Size:1.5|Frets:5|Name:Gb|Finger:"2:T 4:2 4:3 3:4 2:1 2:1"|Barre:5:6|Span:2
|Rest|Dur:Half
|Note|Dur:Half|Pos:b-9
|Bar
|User|GuitarChord.ms|Pos:6|Size:1.5|Frets:5|Name:Ab/Gb|Finger:"2 x 1 1 1 x"|Barre:3:5|Span:2
|Rest|Dur:Half
|Note|Dur:Half|Pos:b-8
|Bar
|User|GuitarChord.ms|Pos:6|Size:1.5|Frets:5|Name:(open)|Finger:"o o o o o o"|Span:3
|Rest|Dur:Half
|Note|Dur:Half|Pos:-4^
|Bar
|Note|Dur:Whole|Pos:-4
!NoteWorthyComposerClip-End

As always, feedback and suggestions are welcome.

Mike

Re: GuitarChord.ms (version 0.94)

Reply #1
The GuitarChord.ms object has been updated, with the following changes:

  • Help text is added
  • Minor rendering adjustments

Please refer to the parent post for a description of the available parameters and a sample clip.

As always, feedback and suggestions are greatly appreciated.

Mike

Re: GuitarChord.ms (version 0.96)

Reply #2
The GuitarChord.ms object has been updated, with the following changes:

  • Addition of Font Style parameter
  • Minor help text edits

Please refer to the parent post for a description of the available parameters and a sample clip.

As always, feedback and suggestions are greatly appreciated.

Mike

Re: GuitarChord.ms (version 0.97)

Reply #3
The GuitarChord.ms object has been updated, with the following change:

  • Addition of Anticipated Playback parameter

Please refer to the parent post for a description of the available parameters and a sample clip.

As always, feedback and suggestions are greatly appreciated.

Mike

Re: GuitarChord.ms (version 1.0)

Reply #4
You can use these below with code name. eg) CH -> C△6/9
What do you know anything else?

" natural
% 6/9
' add
@ add
< Maj
, Maj
> min
. min
: 11
; 13
H △6/9
I △6
J △7
K △9
L △13
M M
N △7(#11)
O △9(#11)
P △6/9(#11)
Q 6/9(#11)
R △13(#11)
S △7(b5)
T △7(#5)
U △9(b5)
V △9(#5)
W sus
X sus4
Y sus4(b9)
Z 7sus
[ (
] )
^ △ (means "Major")
b flat
x double sharp
é 11 13
è 6 7
È double flat
Ì 5 13
²-6
ä multi measure rest
ÿ hyphen
Ä b
Ë 5 5
ç 5 9
æ 4 2
Æ x
Œ # #
¤ natural
€ 9 9
$ $
½ space
¾ major triad
¼ o
¿ major triad(b5)
‰ flat sharp
å 5 11
® 9 13



Re: GuitarChord.ms (version 1.0)

Reply #6
Thanks a lot for your reply.

And I give you a link.

If you are in Windows 10, I recommend you click and install this free app.

https://www.microsoft.com/en-us/store/apps/guitar-chord-collections/9wzdncrdkbsl

"Chord Dictionary Collection" maybe help you.

Later, I wish someone can implement these functions below:

1. p i m a (fingers) play styles support.
2. root note mark with ◇ diamond (or colored) e.g.) G -> root g in ◇, G/B -> root b in ◇
3. random chord generating (must be fingered available) with chord name

Re: GuitarChord.ms (version 1.0)

Reply #7
Only two suggestions:
  • Quote
    Barres: Contains start:end string numbers for a set of strings to be held down by a particular finger.
    In guitar music strings are usually numbered as 6-5-4-3-2-1 from lowest to higest pitch (EADGBE), but barres option interprets string numbers as 1-2-3-4-5-6. I think it could be a little confusing when making custom chord charts... for example, when the object creates a barre for a 'F' chord it types 5:6 (to barre B and E strings), but usually those strings would be 2:1. It's not a serious issue, only a little confusing.

  • My other suggestion is about Strumming. I think it would be good to add an option for 'Strum Duration'. Even it's not displayed in the chord chart, it's not the same a strum played with Sixteenth notes than other played with Eighth notes, so I think it would improve playback function of the object (although it's already very good).
[...] y el mayor bien es pequeño: que toda la vida es sueño, y los sueños, sueños son.

Re: GuitarChord.ms (version 1.0)

Reply #8
Hi Lloyd,
  • In guitar music strings are usually numbered as 6-5-4-3-2-1 from lowest to higest pitch (EADGBE), but barres option interprets string numbers as 1-2-3-4-5-6. I think it could be a little confusing when making custom chord charts... for example, when the object creates a barre for a 'F' chord it types 5:6 (to barre B and E strings), but usually those strings would be 2:1. It's not a serious issue, only a little confusing.
I don't contest what you are saying here, but the problem is that the object has been out there for a while now, and if I changed the interpretation of the numbers in that parameter, it would break a lot of existing scores. I would probably need to create a new parameter and translate/reverse the numbers from the old parameter to the new one.

To be completely honest, I think that the method required to enter chords for GuitarChord.ms is clumsy at best. It needs some sort of graphical "widget" that lets users put the dots and barres where they want them, and then populates the necessary parameter values that allows the chord chart to be drawn. How good are you with JavaScript? :)
  • My other suggestion is about Strumming. I think it would be good to add an option for 'Strum Duration'. Even it's not displayed in the chord chart, it's not the same a strum played with Sixteenth notes than other played with Eighth notes, so I think it would improve playback function of the object (although it's already very good).
This would not be that difficult to add, since the "strum" code has much in common with that in Arpeggio.ms, which has a playback rate parameter. However, there have been other suggested changes/additions to the Strum parameter, to allow custom "finger picking". If there were a finger picking option, then speed/rate would also be needed.

Maybe you want to take a crack at adding this? :)

Re: GuitarChord.ms (version 1.0)

Reply #9
Quote
[...]the object has been out there for a while now,[...]
That's right... changing things could break lots of works, and as I said, the object is working fine now ;)

Quote
How good are you with JavaScript? :)
:'( Didn't you see the code in my objects?? I'm sorry but I can't be worst programing in ANY language  8) , in fact, those plugins are my first contact with programing, I'm really sorry...
But I have some suggestion about entering chords, here's one of them (it's only the code for spec table... it won't work, but you can see the idea):
Code: [Select · Download]
-- Version 0.0
--[[--------------------------------------------------------------------------
--]]--------------------------------------------------------------------------
local strumStyles = { 'up', 'down' }
local fretTextPos = { 'top', 'bottom' }
local styleList = { 'Serif', 'Sans', 'Swing' }
local FretList = {'o', '1', '2', '3', '4', '5', 'x'}
local obj_spec = {
   { id='Name', label='Chord Name', type='text', default='Enter Chord Name Here' },
   { id='Style', label='Font Style', type='enum', default=styleList[1], list=styleList },
   { id='Size', label='Chart Size', type='float', default=1, min=0.5, max=5, step=.5 },
   { id='Span', label='Note Span', type='int', default=0, min=0 },
   { id='6th_Fret', label='6th String', type='enum', default=FretList[1], list=FretList},
   { id='5th_Fret', label='5th String', type='enum', default=FretList[1], list=FretList},
   { id='4th_Fret', label='4th String', type='enum', default=FretList[1], list=FretList},
   { id='3th_Fret', label='3rd String', type='enum', default=FretList[1], list=FretList},
   { id='2th_Fret', label='2nd String', type='enum', default=FretList[1], list=FretList},
   { id='1th_Fret', label='1st String', type='enum', default=FretList[1], list=FretList},
   { id='Barre', label='Barres', type='text', default='' },
   { id='Capo', label='Capo Position', type='int', default=0, min=0 },
   { id='TopFret', label='Top Fret', type='int', default=1, min=1 },
   { id='Strum', label='Strum Direction', type='enum', default='down', list=strumStyles },
   { id='TopBarreOffset', label='Top Barre Offset', type='float', default=0, min=0, step=.5 },
   { id='Anticipated', label='Anticipated Playback', type='bool', default=true },
}
return {
spec = obj_spec,
}

The finger picking option could even be more interesting with a tablature object. I'm not sure how fingerpicking must be shown in Chord Charts (are we talking about P I M A fingers, right?) but, could it be added to the Fret List in the code above (0, 1, 1p, 1i, 1m, 1a, 2, 2p,...)? ::)  anyway, if it's only for playback purposes, well... maybe it will be too much information for only a chord chart, don't you think? Of course, it's the same for strum speed/rate... but I'm still thinking that at least the option "disabled" must be present within the strum options  ;D
[...] y el mayor bien es pequeño: que toda la vida es sueño, y los sueños, sueños son.

Re: GuitarChord.ms (version 1.0)

Reply #10
But I have some suggestion about entering chords, here's one of them (it's only the code for spec table... it won't work, but you can see the idea):
Code: (lua) [Select · Download]
local FretList = {'o', '1', '2', '3', '4', '5', 'x'}
local obj_spec = {
...
  { id='6th_Fret', label='6th String', type='enum', default=FretList[1], list=FretList},
  { id='5th_Fret', label='5th String', type='enum', default=FretList[1], list=FretList},
  { id='4th_Fret', label='4th String', type='enum', default=FretList[1], list=FretList},
  { id='3th_Fret', label='3rd String', type='enum', default=FretList[1], list=FretList},
  { id='2th_Fret', label='2nd String', type='enum', default=FretList[1], list=FretList},
  { id='1th_Fret', label='1st String', type='enum', default=FretList[1], list=FretList},
...
}
That's an interesting suggestion. There was no 'enum' parameter type when the GuitarChord.ms object was created, and this seems like a reasonable way to enter chords. I would probably want to allow for higher fret numbers than 5 though, since the fret numbers are the actual fret number on the guitar neck, and that can go up to 20 or so, I think. Also, I think that parameter values can't start with a number.
The finger picking option could even be more interesting with a tablature object. I'm not sure how fingerpicking must be shown in Chord Charts (are we talking about P I M A fingers, right?) but, could it be added to the Fret List in the code above (0, 1, 1p, 1i, 1m, 1a, 2, 2p,...)? ::)  anyway, if it's only for playback purposes, well... maybe it will be too much information for only a chord chart, don't you think? Of course, it's the same for strum speed/rate... but I'm still thinking that at least the option "disabled" must be present within the strum options  ;D
When I said "finger picking", I meant a playback-only option, which would effectively play the strings in a particular order/sequence (most likely looped) to simulate how the chord would sound when finger picked. For true finger picking, tablature notation is probably a must.

Re: GuitarChord.ms (version 1.0)

Reply #11
Quote
I would probably want to allow for higher fret numbers than 5 though, since the fret numbers are the actual fret number on the guitar neck, and that can go up to 20 or so, I think.
4 (or 5)  are usually the number of frets shown in chord charts, when the fret is over 4 (or 5) the 'Top Fret' marking is added to the diagram, and then just simple arithmetics: Fret 6 (with Top Fret 1) = Fret 2 (with Top Fret 5), this is (TopFret-1)+Fret. In this way you don't need to draw more than 4 (or 5) frets to the diagram.  ;D

Quote
I meant a playback-only option, which would effectively play the strings in a particular order/sequence (most likely looped) to simulate how the chord would sound when finger picked.
I'm sure it would be interesting for someone (there's always someone interested in almost everything) but I've never seen a finger picked guitar notated only with a chord chart ::) , for those kind of things there's always a line (tablature or staff) that indicates fingering and, of course, much more things. In my own opinion, it's ok if the object plays (strums) the notes in the correct order (for example Am=xAEACE) and it already does it  ;D  but if you think that this finger-picked playback is good for your object, then it's ok for me  :)
[...] y el mayor bien es pequeño: que toda la vida es sueño, y los sueños, sueños son.

Re: GuitarChord.ms (version 1.0)

Reply #12
4 (or 5)  are usually the number of frets shown in chord charts, when the fret is over 4 (or 5) the 'Top Fret' marking is added to the diagram, and then just simple arithmetics: Fret 6 (with Top Fret 1) = Fret 2 (with Top Fret 5), this is (TopFret-1)+Fret. In this way you don't need to draw more than 4 (or 5) frets to the diagram.  ;D
I agree that generally only 4 or 5 frets need to be visible at once. The Top Fret parameter basically gives you a "window" of the region of the fretboard you wish to see. However, GuitarChord.ms expects the user to provide the absolute fret number for each string, not the number relative to the specified Top Fret. Perhaps this change in operation would be appropriate for GuitarChord 2.0 (or GuitarChord.fso :) )

Re: GuitarChord.ms (version 1.0)

Reply #13
Fine, your decision seems good to me  ;)
As I said before, your object is currently doing a good job. Thanks for it  :))
[...] y el mayor bien es pequeño: que toda la vida es sueño, y los sueños, sueños son.

Re: GuitarChord.ms (version 1.0)

Reply #14
Well, here is one minor drawback to your idea of 6 separate parameters for string fret positions: a custom object's spec table can have a maximum of 16 parameters. GuitarChord.ms currently has 13 parameters, and adding 5 more would give us a total of 18. (And this does not include strum speed). So tell me which of the 3 existing parameters/features you would like me to remove :)

Re: GuitarChord.ms (version 1.0)

Reply #15
a custom object's spec table can have a maximum of 16 parameters.
Depends on how you define "parameter." See MarkupPage where I have 9 markups with 2 settings for each.
Registered user since 1996

Re: GuitarChord.ms (version 1.0)

Reply #16
You're completely right, Mike, but I must say that it can't be called a minor drawback... since the object has to loose some of it's functions, my idea for entering the chords becomes not viable (that's more like super-major drawback ;) ). As you said, maybe a version 2.0 or even an alternate version (which not replaces the current 1.0) could use this method for entering chords, but for now I think is better to left GuitarChords.ms as is.
[...] y el mayor bien es pequeño: que toda la vida es sueño, y los sueños, sueños son.

Re: GuitarChord.ms (1.1)

Reply #17
The GuitarChord.ms object has been updated, with the following change:

  • Addition of custom menu and multi-spin parameter update

Please refer to the parent post for a description of the available parameters and a sample clip.

Re: GuitarChord.ms (1.2)

Reply #18
The GuitarChord.ms object has been updated, with the following change:

  • New chord insertions will now inherit selected properties from the closest prior chord in the staff, if one is found. (Note that this does not apply to chords added via a selector)

Please refer to the parent post for a description of the available parameters and a sample clip.

Re: GuitarChord.ms (1.2)

Reply #19
Mike,
Thanks for your great tool!
However, it is unfortunate that "flat" chords (e.g. Eb) are missing.
Not being a guitar player I find it extremely hard for me to add these chords myself.
Would it be a lot of work for you to add those chords to GuitarChords.ms?
Kindly,
Hans Horn

Re: GuitarChord.ms (1.2)

Reply #20
Mike,
Thanks for your great tool!
However, it is unfortunate that "flat" chords (e.g. Eb) are missing.
Not being a guitar player I find it extremely hard for me to add these chords myself.
Would it be a lot of work for you to add those chords to GuitarChords.ms?
Kindly,
Hans Horn

Thanks for the feedback Hans. It would not be too difficult to add more predefined chords, but the challenge is deciding which to add, since there are thousands of possible chords. I will look at adding more chords, but in the meanwhile, you might want to check out the ChordPlay.nw object. While it does not display the guitar charts, it does provide for playback, and supports all of the chromatic chord names and many additional chord types.

Thanks,
Mike

Re: GuitarChord.ms (1.2)

Reply #21
Mike,
thanks for getting back to me!
Was just thinking about the standard major and minor keys with flats.
Hans

Re: GuitarChord.ms (1.2)

Reply #22
Mike,
Thank you for this useful extension to NoteWorthy Composer.

However, I'm still missing a few useful features.
For one, when I'm transposing the staff, the chords are not transposed and I'm forced to go through them one by one, which is obviously a quite tedious task.
Next, I rarely use the default char size and position, so each time whe I insert a new chord, I have to modify the corresponding values. I would prefer that these values, once entered, are kept as new defaults at least for the current session.

Perhaps you could concider to include these features into a possible future release. I would be greatful for it.

Regards
hataibu

Re: GuitarChord.ms (1.2)

Reply #23
Hello @hataibu,

Thank you for the kind comments.

For your first item, that would be possible to do, but I would probably want to make it optional somehow. Also, since the object has both standard chords as well as allowing custom chords to be created, it would be a challenge to know how to transpose custom chords. One option you could do today, for certain transpositions, would be to adjust the Capo setting for all chords. Of course this only works if you are going up in pitch, or if your chords are already capo'ed and you are going down in pitch no more than the current capo position number of steps.

For the second item, the object should be remembering the scale, font and vertical position when you insert a new chord, assuming you are adding them from left to right in the score. See this post for the description of the addition. As noted, that feature does not currently work if you are using the selector menu to insert chords; you would need to pick the chords from the built-in menus for this to work.

Also, please note that in the current beta version of NWC 2.75a, there is an updated object which includes a much expanded set of predefined chords. There are now 11 chord types (major, minor, 6th, 7th, 9th, minor 6th, minor 7th, major 7th, diminished, augmented and suspended) in each chromatic key.

Thanks,
Mike

Re: GuitarChord.ms (2.1)

Reply #24
The GuitarChord.ms object has been updated for version 2.75a, with the following changes:

  • Increased the number of predefined chords from 35 to 132, now including 11 chord types (major, minor, 6th, 7th, 9th, minor 6th, minor 7th, major 7th, diminished, augmented and suspended) in each chromatic key.
  • Improved interactive chord editing functions.

Please refer to the parent post for a description of the available parameters and a sample clip.

Re: GuitarChord.ms (2.1)

Reply #25
I've just started needing to add more obscure chords to my scores and this object looks as though it should do that for me, however, having loaded it I cannot find the help text or see how to write or construct the new chords. Nor can I find anything other than 35 chords! What am I doing wrong?

Re: GuitarChord.ms (2.1)

Reply #26
I've just started needing to add more obscure chords to my scores and this object looks as though it should do that for me, however, having loaded it I cannot find the help text or see how to write or construct the new chords. Nor can I find anything other than 35 chords! What am I doing wrong?
I just noticed that the help text was never updated, and still says there are only 35 chords available. If the version says 2.1, you have the latest version with 132 chords. If you have an older version, you'll need to refresh the object to the latest version. Go to Tools -> Manage Objects... and click the "Online Synch..." button. A dialog will pop up, confirming that you want to scan for new plugin downloads. Click the "OK" button and it will scan for changes and indicate how many are available. Then click "Install Updates..." to complete the refresh.

When you are adding or editing a chord and the Notation Properties are displayed, you will see all of parameters for the chord in question. Click the "?" in the dialog title bar and then click one of the property fields for help text on that parameter. If you create a few sample chords and look at the parameter values for those chords, it shouldn't take too long to figure out how to create your own chords.

Re: GuitarChord.ms (2.2)

Reply #27
The GuitarChord.ms object has been updated to version 2.2, with the following change:
  • Corrected a bug where playback did not honor current staff transposition.

Please refer to the parent post for a description of the available parameters and a sample clip.