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";





* Ich werde es erst später prüfen. Muß noch was anderes arbeiten.

Kommentare

Beliebte Posts aus diesem Blog

·

Es brennt.

Bye, bye Nord Stream 2!