So if I want to print out a diagram of major scale in C (C, D, E, F, G, A, B), this little jewel works great. Just type this on your console and out pops your diagram:#!/usr/bin/perl -w use strict; my %octave = ('A', '-', 'A#', '-', 'B', '-', 'C', '-', 'C#', '-', 'D', '-', 'D#', '-', 'E', '-', 'F', '-', 'F#', '-', 'G', '-', 'G#', '-'); my @strings = ('G', 'D', 'A', 'E'); my @notes = @ARGV; my $note; foreach $note (@notes) { $note = uc($note); if($note =~ /^([A-G])B$/) { if($1 eq "A") { $note = "G#"; } else { $note = chr(ord($1) - 1) . "#"; } } $octave{$note} = $note; } my @octave_old = sort keys %octave; my @octave_new = (); foreach (@octave_old) { push(@octave_new, $octave{$_}); } print " 0 1 2 3 4 5 6 7 8 9 10 11 1 +2\n"; foreach $note (@strings) { while ($note ne $octave_old[0]) { push(@octave_new, shift(@octave_new)); push(@octave_old, shift(@octave_old)); } foreach $note (@octave_new) { print "| $note "; if ($note !~ /[#&]/) { print " "; } } print "| $octave_new[0]\n"; }
neckdia.pl C D E F G A B 0 1 2 3 4 5 6 7 8 9 10 11 12 | G | - | A | - | B | C | - | D | - | E | F | - | G | D | - | E | F | - | G | - | A | - | B | C | - | D | A | - | B | C | - | D | - | E | F | - | G | - | A | E | F | - | G | - | A | - | B | C | - | D | - | E
my @strings = ('G', 'D', 'A', 'E');
If I want a standard guitar tuning I just change this line of code to my @strings = ('E', 'B', 'G', 'D', 'A', 'E');
Or if I want drop D tuning on my bass (who would want that, honestly?), bang: my @strings = ('G', 'D', 'A', 'D');
This is pretty basic right now. I just whipped this up the other day out of frustration. Please note that if you enter flats on the command line that they will be switched to the appropriate shrap for simplicity sake. DO NOT put flats in the @strings array. That will produce unruly behavior.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Guitar neck diagram thingy
by larsen (Parson) on Mar 13, 2001 at 14:07 UTC | |
|
Re: Guitar neck diagram thingy
by cei (Monk) on Mar 14, 2001 at 00:16 UTC |