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