The next half half intermediate step (von heut') - wolla!
Die nächste Hälfte ist hiermit immerhin zur Hälfte geschritten (sprich: 3/4 Zwischenschritt ist geschafft!)
Code
#!/usr/bin/perl
# konzeptentwickler-2.2.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"] );
my @buchse;
my $stecker = "0";
# Programm
## Grundton erfragen
print "\nWelcher Grundton? (C, D, E, F, G, A oder B mit - oder + angeben!)\n";
my $grundton_init = <STDIN>;
chomp $grundton_init;
## Vier Zufallsprogressionen mit Steckverbindung
for ( my $round = 1; $round < 5; $round++ ) {
## Stecker, falls Buchse vorhanden (nach erster Runde)
if ( $round > 1 ) { $stecker = int rand(scalar @buchse); $grundton_init = $buchse[$stecker] }
print "\nDer Stecker sei: $stecker => $grundton_init!\n\n";
## 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_init} + $_ }
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 ) {
print "\nScalar Progression: ", scalar @progression, "\n";
# 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";
# Steckerarray einlesen
if ( $p == (scalar @progression) - 2 ) {
$buchse[0] = $chord[1];
$buchse[1] = $chord[2];
$buchse[2] = $chord[3];
$buchse[3] = $chord[4]
} else { next }
}
print "\nDie Buchse ist:\n\n";
print map { $_, "\n" } @buchse;
print "\n";
print "\n";
}
Output
Welcher Grundton? (C, D, E, F, G, A oder B mit - oder + angeben!)
E
Der Stecker sei: 0 => E!
Die ausgewählte Progression hat die Nummer: 3.
Scalar Progression: 24
Progressions-Takt Nr.: 1
Der Akkord zum Grundton E ist:
E-DurMaj7
E
A-
B
E-
Scalar Progression: 24
Progressions-Takt Nr.: 2
Der Akkord zum Grundton E ist:
E-DurMaj7
E
A-
B
E-
Scalar Progression: 24
Progressions-Takt Nr.: 3
Der Akkord zum Grundton E ist:
E-Moll7
E
G
B
D
Scalar Progression: 24
Progressions-Takt Nr.: 4
Der Akkord zum Grundton B ist:
B-Dur7
B
E-
G-
A
Scalar Progression: 24
Progressions-Takt Nr.: 5
Der Akkord zum Grundton D ist:
D-DurMaj7
D
G-
A
D-
Scalar Progression: 24
Progressions-Takt Nr.: 6
Der Akkord zum Grundton D ist:
D-DurMaj7
D
G-
A
D-
Scalar Progression: 24
Progressions-Takt Nr.: 7
Der Akkord zum Grundton E- ist:
E--Moll7
E-
G-
B-
D-
Scalar Progression: 24
Progressions-Takt Nr.: 8
Der Akkord zum Grundton A ist:
A-Dur7
A
D-
E
G
Scalar Progression: 24
Progressions-Takt Nr.: 9
Der Akkord zum Grundton C ist:
C-DurMaj7
C
E
G
B
Scalar Progression: 24
Progressions-Takt Nr.: 10
Der Akkord zum Grundton C ist:
C-DurMaj7
C
E
G
B
Scalar Progression: 24
Progressions-Takt Nr.: 11
Der Akkord zum Grundton C ist:
C-Moll7
C
E-
G
B-
Scalar Progression: 24
Progressions-Takt Nr.: 12
Der Akkord zum Grundton G ist:
G-Dur7
G
B
D
F
Die Buchse ist:
G
B
D
F
Der Stecker sei: 3 => F!
Die ausgewählte Progression hat die Nummer: 2.
Scalar Progression: 16
Progressions-Takt Nr.: 1
Der Akkord zum Grundton F ist:
F-DurMaj7
F
A
C
E
Scalar Progression: 16
Progressions-Takt Nr.: 2
Der Akkord zum Grundton D ist:
D-Moll7
D
F
A
C
Scalar Progression: 16
Progressions-Takt Nr.: 3
Der Akkord zum Grundton G ist:
G-Moll7
G
B-
D
F
Scalar Progression: 16
Progressions-Takt Nr.: 4
Der Akkord zum Grundton C ist:
C-Dur7
C
E
G
B-
Scalar Progression: 16
Progressions-Takt Nr.: 5
Der Akkord zum Grundton A ist:
A-Moll7
A
C
E
G
Scalar Progression: 16
Progressions-Takt Nr.: 6
Der Akkord zum Grundton D ist:
D-Dur7
D
G-
A
C
Scalar Progression: 16
Progressions-Takt Nr.: 7
Der Akkord zum Grundton G ist:
G-Moll7
G
B-
D
F
Scalar Progression: 16
Progressions-Takt Nr.: 8
Der Akkord zum Grundton C ist:
C-Dur7
C
E
G
B-
Die Buchse ist:
C
E
G
B-
Der Stecker sei: 0 => C!
Die ausgewählte Progression hat die Nummer: 1.
Scalar Progression: 8
Progressions-Takt Nr.: 1
Der Akkord zum Grundton D ist:
D-Moll7
D
F
A
C
Scalar Progression: 8
Progressions-Takt Nr.: 2
Der Akkord zum Grundton G ist:
G-Dur7
G
B
D
F
Scalar Progression: 8
Progressions-Takt Nr.: 3
Der Akkord zum Grundton C ist:
C-DurMaj7
C
E
G
B
Scalar Progression: 8
Progressions-Takt Nr.: 4
Der Akkord zum Grundton C ist:
C-DurMaj7
C
E
G
B
Die Buchse ist:
C
E
G
B
Der Stecker sei: 2 => G!
Die ausgewählte Progression hat die Nummer: 3.
Scalar Progression: 24
Progressions-Takt Nr.: 1
Der Akkord zum Grundton G ist:
G-DurMaj7
G
B
D
G-
Scalar Progression: 24
Progressions-Takt Nr.: 2
Der Akkord zum Grundton G ist:
G-DurMaj7
G
B
D
G-
Scalar Progression: 24
Progressions-Takt Nr.: 3
Der Akkord zum Grundton G ist:
G-Moll7
G
B-
D
F
Scalar Progression: 24
Progressions-Takt Nr.: 4
Der Akkord zum Grundton D ist:
D-Dur7
D
G-
A
C
Scalar Progression: 24
Progressions-Takt Nr.: 5
Der Akkord zum Grundton F ist:
F-DurMaj7
F
A
C
E
Scalar Progression: 24
Progressions-Takt Nr.: 6
Der Akkord zum Grundton F ist:
F-DurMaj7
F
A
C
E
Scalar Progression: 24
Progressions-Takt Nr.: 7
Der Akkord zum Grundton G- ist:
G--Moll7
G-
A
D-
E
Scalar Progression: 24
Progressions-Takt Nr.: 8
Der Akkord zum Grundton C ist:
C-Dur7
C
E
G
B-
Scalar Progression: 24
Progressions-Takt Nr.: 9
Der Akkord zum Grundton E- ist:
E--DurMaj7
E-
G
B-
D
Scalar Progression: 24
Progressions-Takt Nr.: 10
Der Akkord zum Grundton E- ist:
E--DurMaj7
E-
G
B-
D
Scalar Progression: 24
Progressions-Takt Nr.: 11
Der Akkord zum Grundton E- ist:
E--Moll7
E-
G-
B-
D-
Scalar Progression: 24
Progressions-Takt Nr.: 12
Der Akkord zum Grundton B- ist:
B--Dur7
B-
D
F
A-
Die Buchse ist:
B-
D
F
A-
Kommentare
Kommentar veröffentlichen