File Coverage

blib/lib/App/Music/PlayTab/NoteMap.pm
Criterion Covered Total %
statement 15 17 88.2
branch 4 4 100.0
condition n/a
subroutine 6 8 75.0
pod 0 4 0.0
total 25 33 75.7


line stmt bran cond sub pod time code
1             #! perl
2              
3             # Author : Johan Vromans
4             # Created On : Wed Aug 22 22:33:31 2007
5             # Last Modified By: Johan Vromans
6             # Last Modified On: Tue Apr 19 16:24:17 2011
7             # Update Count : 6
8             # Status : Unknown, Use with caution!
9              
10             package App::Music::PlayTab::NoteMap;
11              
12 6     6   19225 use strict;
  6         13  
  6         164  
13 6     6   28 use warnings;
  6         12  
  6         198  
14              
15             our $VERSION = "1.005";
16              
17 6     6   27 use base qw(Exporter);
  6         12  
  6         571  
18             our @EXPORT_OK;
19             BEGIN {
20 6     6   1215 @EXPORT_OK = qw(@FNotes @SNotes note_to_key key_to_note);
21             }
22              
23             # All notes, using sharps.
24             our @SNotes =
25             # 0 1 2 3 4 5 6 7 8 9 10 11
26             ('C', 'C#','D', 'D#','E', 'F', 'F#','G', 'G#','A', 'A#','B');
27              
28             # All notes, using flats.
29             our @FNotes =
30             # 0 1 2 3 4 5 6 7 8 9 10 11
31             ('C', 'Db','D', 'Eb','E', 'F', 'Gb','G', 'Ab','A', 'Bb','B');
32              
33             # The current mapping. This can be changed by set_flat/set_sharp.
34             my $Notes = \@SNotes;
35              
36             # Reverse mapping (plain notes only).
37             my %Notemap;
38             for ( my $i = 0; $i < @SNotes; $i++ ) {
39             $Notemap{$SNotes[$i]} = $i if length($SNotes[$i]) == 1;
40             }
41              
42             sub set_flat {
43 0     0 0 0 my $Notes = \@FNotes;
44             }
45              
46             sub set_sharp {
47 0     0 0 0 my $Notes = \@SNotes;
48             }
49              
50             sub note_to_key {
51 699     699 0 2283 $Notemap{uc shift()};
52             }
53              
54             sub key_to_note {
55 819     819 0 1931 my ($key, $flat) = @_;
56 819 100       2741 return $Notes->[$key] unless defined $flat;
57 381 100       1288 return $FNotes[$key] if $flat;
58 96         294 $SNotes[$key];
59             }
60              
61             1;
62              
63             __END__