NAME
Music::FretboardDiagram - Draw fretboard chord diagrams
VERSION
version 0.1315
SYNOPSIS
use Music::FretboardDiagram;
my $dia = Music::FretboardDiagram->new(
chord => 'xx0232',
frets => 5, # the default
position => 1, # the default
outfile => 'Dmajor',
type => 'png', # the default
);
$dia = Music::FretboardDiagram->new(
chord => [[1,'022000'], [2,'--1342'], [7,'-13321']], # Em chords
frets => 13,
absolute => 1,
size => 50, # relative units, not pixels
horiz => 1,
showname => 'Em',
outfile => 'fretboard',
font => '/path/to/TTF/font.ttf',
verbose => 1,
);
$dia->chord('x02220'); # set a new chord
$dia->position(7); # set a new position
$dia->outfile('mystery-chord'); # set a new filename
$dia->showname('Xb dim'); # "X flat diminished"
$dia->draw;
$dia->spec_to_notes('x02220'); # [A E A Db E]
DESCRIPTION
A Music::FretboardDiagram
object draws fretboard chord diagrams including neck position and chord name annotations for guitar, ukulele, banjo, etc.
ATTRIBUTES
chord
$dia->chord('xx0232');
$dia->chord([[1,'022000'], [2,'--1342'], [7,'-13321']]);
$chord = $dia->chord;
A required chord given as a string or array reference of specifications.
For a chord string, non-zero digits represent frets, x
(or X
) indicates a muted string, 0
(or o
or O
) indicates an open string, and a dash (-
) means skip to the next string.
For an array-ref of chord specifications, the first element is the chord position, and the second is the chord string.
Chord string examples at position 1:
C: x32010
D: xx0232
E: 022100
F: xx3211
G: 320003
A: x02220
B: x24442
Cm: x3101x
Dm: xx0231
Em: 022000
Am: x02210
C7: x32310
D7: xx0212
E7: 020100
G7: 320001
A7: x02020
B7: x21202
etc.
position
$dia->position(3);
$position = $dia->position;
The neck position of a chord to be diagrammed. This number is rendered to the left of the first fret in vertical mode. When drawing horizontally, the position is rendered above the first fret.
Default: 1
absolute
$absolute = $dia->absolute;
Use an absolute neck position for rendering a chord on a full length fretboard.
If not set, the chord will be rendered relative to the first fret.
Default: 0
strings
$strings = $dia->strings;
The number of strings.
Default: 6
frets
$frets = $dia->frets;
The number of frets.
Default: 5
size
$size = $dia->size;
The relative size of the diagram. The smallest visible diagram is size = 6
. (This is not a measure of pixels.)
Default: 30
outfile
$dia->outfile('chord-042');
$outfile = $dia->outfile;
The image file name minus the extension.
Default: chord-diagram
type
$type = $dia->type;
The image file extension.
Default: png
font
$font = $dia->font;
The (TTF) font.
Default: /usr/share/fonts/truetype/freefont/FreeMono.ttf
tuning
$tuning = $dia->tuning;
An arrayref of the string tuning. The order of the notes is from highest string (1st) to lowest (6th). For accidental notes, use flat (b
), not sharp (#
).
Default: [ E B G D A E ]
horiz
$horiz = $dia->horiz;
Draw the diagram horizontally. That is, with the first string at the top and the 6th string at the bottom, and frets numbered from left to right.
Default: 0
image
$image = $dia->image;
Boolean to return the image from the draw method instead of writing it to a file.
Default: 0
string_color
$string_color = $dia->string_color;
The diagram string color.
Default: blue
fret_color
$fret_color = $dia->fret_color;
The diagram fret color.
Default: darkgray
dot_color
$dot_color = $dia->dot_color;
The diagram finger position dot color.
Default: black
showname
$dia->showname(0); # Do not show chord names
$dia->showname(1); # Show computed names
$dia->showname('Xb dim'); # Show a custom name
$showname = $dia->showname;
Show a chord name or not.
Sometimes the computed chord name is not accurate or desired. In those cases, either set the showname to a string of your choosing, or to 0
for no chord name.
Default: 1
verbose
$verbose = $dia->verbose;
Monitor the progress of the diagram construction.
Default: 0
fretboard
$fretboard = $dia->fretboard;
A hashref of the string notes. This is a computed attribute based on the given tuning.
METHODS
new
$dia = Music::FretboardDiagram->new(
chord => $chord,
position => $position,
strings => $strings,
frets => $frets,
size => $size,
tuning => $tuning,
font => $font,
showname => $showname,
horiz => $horiz,
image => $image,
string_color => $string_color,
fret_color => $fret_color,
dot_color => $dot_color,
outfile => $outfile,
type => $type,
verbose => $verbose,
);
Create a new Music::FretboardDiagram
object.
draw
$dia->draw;
$image = $dia->draw; # if the image attr is set
Render the requested chord diagram as an image file of the given type.
If the image attribute is set, return the image object instead of writing to a file.
spec_to_notes
$notes = $dia->spec_to_notes('x02220'); # A E A Db E
Convert a "spec string" to a list of named notes.
THANK YOU
Paweł Świderski for the horizontal drawing and webservice suggestions
SEE ALSO
The eg/ files in this distribution
Similar modules:
GD::Tab::Guitar and GD::Tab::Ukulele
For a real chord analyzer:
https://www.oolimo.com/guitarchords/analyze
Or maybe:
https://www.scales-chords.com/chord-namer/guitar
AUTHOR
Gene Boggs <gene@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2022 by Gene Boggs.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.