NAME
Music::FretboardDiagram - Draw fretboard chord diagrams
VERSION
version 0.1304
SYNOPSIS
use Music::FretboardDiagram;
my $dia = Music::FretboardDiagram->new(
chord => 'xx0232',
frets => 5, # the default
position => 1, # the default
font => '/path/to/TTF/font.ttf',
outfile => 'Dm',
type => 'png', # the default
);
$dia = Music::FretboardDiagram->new(
chord => [[1,'022000'], [2,'--1342'], [7,'-13321']], # Em chords
frets => 13,
absolute => 1,
outfile => 'fretboard',
horiz => 1,
verbose => 1,
);
$dia->chord('x02220'); # set a new chord
$dia->position(1); # set a new position
$dia->outfile('mystery-chord'); # set a new filename
$dia->showname('Xb dim'); # "X flat diminished"
$dia->draw;
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. The default order of the strings is 654321
from lowest to highest.
For an array-ref of chord specifications, the first element is the chord position, and the second is the chord string.
Chord string examples:
C: x32010
D: xx0232
E: 022100
F: xx3211
G: 320003
A: x02220
B: x24442
Cm: xx5543
Dm: xx0231
Em: 022000
Fm: xx3111
Gm: xx5333
Am: x02210
Bm: x24432
C7: x32310
D7: xx0212
E7: 020100
F7: xx1211
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.
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;
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 before drawing, 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;
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.
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
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.