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.: 1Der Akkord zum Grundton A- ist:A--DurMaj7A-CE-GProgressions-Takt Nr.: 2Der Akkord zum Grundton F ist:F-Moll7FA-CE-Progressions-Takt Nr.: 3Der Akkord zum Grundton B- ist:B--Moll7B-D-FA-Progressions-Takt Nr.: 4Der Akkord zum Grundton E- ist:E--Dur7E-GB-D-Progressions-Takt Nr.: 5Der Akkord zum Grundton C ist:C-Moll7CE-GB-Progressions-Takt Nr.: 6Der Akkord zum Grundton F ist:F-Dur7FACE-Progressions-Takt Nr.: 7Der Akkord zum Grundton B- ist:B--Moll7B-D-FA-Progressions-Takt Nr.: 8Der Akkord zum Grundton E- ist:E--Dur7E-GB-D-
Und? Stimmt's?*
Code
 #!/usr/bin/perl# konzeptentwickler-2.1.pluse strict;use warnings;# Variablenmy %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 erfragenprint "\nWelcher Grundton? (C, D, E, F, G, A oder B mit - oder + angeben!)\n";my $grundton = <STDIN>;chomp $grundton;## Progression per Zufall aussuchenmy $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 transformierenforeach ( @progression ) {    if ( $_ =~ m/^[0-9]+/ ) { $_ = $chroma{$grundton} + $_ }    if ( $_ =~ m/^[0-9]+/ && $_ > 12 ) { $_ = $_ - 12 }    if ( $_ =~ m/^[0-9]+/ ) { $_ = $chroma_inv{$_} }}### Progression ausdruckenprint "\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