Intermediate step today (only 1/2 step)
Heutiger Zwischenschritt, nur halb geschritten:
Output
perl konzeptentwickler-2.1.pl
Welcher Grundton? (C, D, E, F, G, A oder B mit - oder + angeben!)
A-
Die ausgewählte Progression hat die Nummer: 2.
Progressions-Takt Nr.: 1
Der Akkord zum Grundton A- ist:
A--DurMaj7
A-
C
E-
G
Progressions-Takt Nr.: 2
Der Akkord zum Grundton F ist:
F-Moll7
F
A-
C
E-
Progressions-Takt Nr.: 3
Der Akkord zum Grundton B- ist:
B--Moll7
B-
D-
F
A-
Progressions-Takt Nr.: 4
Der Akkord zum Grundton E- ist:
E--Dur7
E-
G
B-
D-
Progressions-Takt Nr.: 5
Der Akkord zum Grundton C ist:
C-Moll7
C
E-
G
B-
Progressions-Takt Nr.: 6
Der Akkord zum Grundton F ist:
F-Dur7
F
A
C
E-
Progressions-Takt Nr.: 7
Der Akkord zum Grundton B- ist:
B--Moll7
B-
D-
F
A-
Progressions-Takt Nr.: 8
Der Akkord zum Grundton E- ist:
E--Dur7
E-
G
B-
D-
Und? Stimmt's?*
Code
#!/usr/bin/perl
# konzeptentwickler-2.1.pl
use strict;
use warnings;
# Variablen
my %chordtypes = (
"DurMaj7" => ["DurMaj7", "0", "4", "7", "11"],
"Dur7" => ["Dur7", "0", "4", "7", "10"],
"MollMaj7" => ["MollMaj7", "0", "3", "7", "11"],
"Moll7" => ["Moll7", "0", "3", "7", "10"],
"Moll7b5" => ["Moll7b5", "0", "3", "6", "10"],
"Dim7" => ["Dim", "0", "3", "6", "9"]
);
my %chroma = (
"C-" => 0,
"C" => 1,
"D-" => 2,
"D" => 3,
"E-" => 4,
"E" => 5,
"F-" => 5,
"F" => 6,
"G-" => 7,
"G" => 8,
"A-" => 9,
"A" => 10,
"B-" => 11,
"B" => 12 );
my %chroma_inv = (
"0" => "C-",
"1" => "C",
"2" => "D-",
"3" => "D",
"4" => "E-",
"5" => "E",
"6" => "F",
"7" => "G-",
"8" => "G",
"9" => "A-",
"10" => "A",
"11" => "B-",
"12" => "B" );
my %progressions = (
"1" => ["2", "Moll7", "7", "Dur7", "0", "DurMaj7", "0", "DurMaj7"],
"2" => ["0", "DurMaj7", "9", "Moll7", "2", "Moll7", "7", "Dur7", "4", "Moll7", "9", "Dur7", "2", "Moll7", "7", "Dur7"],
"3" => ["0", "DurMaj7", "0", "DurMaj7", "0", "Moll7", "7", "Dur7",
"10", "DurMaj7", "10", "DurMaj7", "11", "Moll7", "5", "Dur7", "8",
"DurMaj7", "8", "DurMaj7", "8", "Moll7", "3", "Dur7"],
"4" => ["0", "DurMaj7", "1", "Dim7", "2", "Moll7", "3", "Dim7", "4", "Moll7", "9", "Dur7"] );
# Programm
## Grundton erfragen
print "\nWelcher Grundton? (C, D, E, F, G, A oder B mit - oder + angeben!)\n";
my $grundton = <STDIN>;
chomp $grundton;
## Progression per Zufall aussuchen
my $progression_choice = int rand(scalar keys %progressions) + 1;
print "\n\nDie ausgewählte Progression hat die Nummer: $progression_choice.\n\n";
my $progression_ref = $progressions{$progression_choice};
my @progression = @$progression_ref;
### Progression transformieren
foreach ( @progression ) {
if ( $_ =~ m/^[0-9]+/ ) { $_ = $chroma{$grundton} + $_ }
if ( $_ =~ m/^[0-9]+/ && $_ > 12 ) { $_ = $_ - 12 }
if ( $_ =~ m/^[0-9]+/ ) { $_ = $chroma_inv{$_} }
}
### Progression ausdrucken
print "\n";
for ( my $p = 0; $p < scalar @progression; $p+=2 ) {
# Ausgabe der Progressions-Taktnummer
print "Progressions-Takt Nr.: ", ($p + 2)/2, "\n";
# Akkordtyp, Akkordarray und Grundton pro Schritt ermitteln
my $grundton = $progression[$p];
my $chordtype = $progression[$p + 1];
my $chord_ref = $chordtypes{$chordtype};
my @chord = @$chord_ref;
## Akkordbezeichnung
$chord[0] = "$grundton-".$chord[0];
## Akkordtöne
for ( my $i = 1; $i < 5; $i++ ) {
$chord[$i] = $chroma{$grundton} + $chord[$i];
if ( $chord[$i] > 12 ) { $chord[$i] = $chord[$i] - 12 }
$chord[$i] = $chroma_inv{$chord[$i]};
}
# Ausgabe der Töne
print "\nDer Akkord zum Grundton $grundton ist:\n\n";
print map { $_, "\n" } @chord;
print "\n";
};
print "\n";
Kommentare
Kommentar veröffentlichen