Perl-Composer M3T-Progressions Version 1.034


Code


#!/usr/bin/perl

# composer_200618.plx

use strict;
use warnings;
use 5.010;

# Variablen

my @zwoelftoene = ( "c", "c+", "d", "d+", "e", "f", "f+", "g", "g+", "a", "a+", "b",
                    "c'", "c+'", "d'", "d+'", "e'", "f'", "f+'", "g'", "g+'", "a'", "a+'", "b'", "c''", "c+''" );
my @startchord = ( 0, 4, 7, 11 );
my @folgechord;
my @m3t4tchords;
my %m3t4tchords;

# Variablenbelegung

@m3t4tchords = ( [ 4,3,4,"Xmaj7" ], [ 4,3,3,"X7" ], [ 3,4,4,"xmaj7" ], [ 3,4,3,"x7" ], [ 3,3,3,"X0" ],
                 [ 5,2,5,"Xsus4" ], [ 5,2,4,"Xsus4maj7" ], [ 5,2,3,"Xsus47" ], [ 4,3,5,"X" ],
                 [ 3,4,5,"x" ], [ 4,3,7,"Xsus2" ], [ 3,4,7,"xsus2" ] );

# Akkordschlange

my @akkordschlange;
my @akkordschlangentyp;
$akkordschlange[0] = join ( ",", map { $_ } @startchord );
$akkordschlangentyp[0] = "Schau'n mer mal. ;-)";

# Schleife

for ( 1 .. 111 )
{

    # Zufallsauswahl
    # Welcher Ton aus dem Startchord?
  
    my $startton = $startchord[int(rand(scalar @startchord))];
  
    print "\n\nStartton: $startton\n\n";
    
    # Welcher Akkord? Welcher Akkordtyp?
  
    my $rndchord = $m3t4tchords[int(rand(scalar @m3t4tchords))];
  
    print "\n\nRandomchord: $rndchord\n";
    my @rndchord = @$rndchord;
    print "Randomchord und -typ: @rndchord\n\n";   
    my $akkordtyp = pop @rndchord;
    print "Akkordtyp: $akkordtyp\n\n";
    print "Randomchord: @rndchord\n\n";
    #sleep 5;
   
    $akkordschlangentyp[$_] = "   Typ: $akkordtyp";

    # Hash aus Zufallsauswahl erstellen
    # Ton 1 - Möglichkeiten
  
    my $i = 1;
    my $tmpton = $startton;
    print "\nTempton $i: $tmpton\n";
    $m3t4tchords{$i} = $startton;

    foreach ( @rndchord )
    {
        $i = $i + 1;
        $tmpton = $tmpton + $_;
        print "\nTempton $i: $tmpton\n";  
        $m3t4tchords{$i} = $tmpton;
    }
      
    print "\n\n", map { $_, " :> ", $m3t4tchords{$_}, "\n" } sort {$a <=> $b } keys %m3t4tchords;
  
    @startchord = split ( ",", join ( ",", map { $m3t4tchords{$_} } sort {$a <=> $b } keys %m3t4tchords ) );
  
   # Startchord ggf. ändern
  
   print "\nStartchord jetzt: ", map { $_, " " } @startchord, "\n";
   #sleep 2;
  
   my $versatzpos = int(rand(@startchord));
   print "\nMeine Versatzposition: ", $versatzpos, "\n";
   my $versatz = $startchord[$versatzpos] - $startchord[0];
   print "\nMein Versatz: ", $versatz, "\n";
   #sleep 2;
  
   my @tmpstartchord;
  
   foreach ( @startchord )
   {
       push @tmpstartchord, $_ - $versatz
    }
   
    @startchord = @tmpstartchord;
    undef @tmpstartchord;
   
    print "\nStartchord nach (ggf.) Änderung: ", map { $_, " " } @startchord, "\n";
    #sleep 2;
   
    if ( $startchord[0] < 0 )
    {
        foreach ( @startchord ) { push @tmpstartchord, $_ + 12 }
        @startchord = @tmpstartchord;
    }
   
    print "\nStartchord nach (ggf.) Korrektur: ", map { $_, " " } @startchord, "\n";
    #sleep 2;
   
    undef @tmpstartchord; 
  
    if ( $startchord[0] > 12 )
    {
        foreach ( @startchord ) { push @tmpstartchord, $_ - 12 }
        @startchord = @tmpstartchord;
    }
  
    print "\nStartchord nach (ggf.) 2. Korrektur: ", map { $_, " " } @startchord, "\n";
    #sleep 2; 
  
    # Akkordschlangenbildung
   
    $akkordschlange[$_] = join ( ",", map { $_ } @startchord );
}

# Akkordschlange ausdrucken

print "\n\n", map { $_, "\n" } @akkordschlange;

# Akkordschlange mit Noten

my $i = 0;
my $grundton_lc;
my $grundton_uc;
my $akkord;

foreach ( @akkordschlange )
{
    chomp $_;
    my @tmparray = split ( ",", $_ );
    print map { $_, " : ", $zwoelftoene[$_], " || " } @tmparray;
    #print @akkordschlangentyp[$i];
    #print " Grundton: $zwoelftoene[$tmparray[0]]";
    $grundton_lc = $zwoelftoene[$tmparray[0]];
    $grundton_uc = uc $grundton_lc;
    $akkord = @akkordschlangentyp[$i];
    $akkord =~ s/Typ: //;
    $akkord =~ s/x/$grundton_lc/;
    $akkord =~ s/X/$grundton_uc/;
    print " Akkord: $akkord";
    print "\n";
    $i++;
}

Output (Ausschnitt)

"Schau'n mer mal" = Cmaj7

...

0 : c || 4 : e || 7 : g || 11 : b ||  Akkord: Schau'n mer mal. ;-)
4 : e || 7 : g || 11 : b || 14 : d' ||  Akkord:    e7
0 : c || 4 : e || 7 : g || 11 : b ||  Akkord:    Cmaj7
4 : e || 7 : g || 11 : b || 15 : d+' ||  Akkord:    emaj7
4 : e || 8 : g+ || 11 : b || 16 : e' ||  Akkord:    E
0 : c || 4 : e || 7 : g || 11 : b ||  Akkord:    Cmaj7
7 : g || 11 : b || 14 : d' || 17 : f' ||  Akkord:    G7
2 : d || 5 : f || 8 : g+ || 11 : b ||  Akkord:    D0
1 : c+ || 5 : f || 8 : g+ || 13 : c+' ||  Akkord:    C+
1 : c+ || 4 : e || 8 : g+ || 13 : c+' ||  Akkord:    c+
1 : c+ || 4 : e || 8 : g+ || 15 : d+' ||  Akkord:    c+sus2
4 : e || 8 : g+ || 11 : b || 15 : d+' ||  Akkord:    Emaj7
11 : b || 15 : d+' || 18 : f+' || 22 : a+' ||  Akkord:    Bmaj7
6 : f+ || 9 : a || 13 : c+' || 20 : g+' ||  Akkord:    f+sus2
6 : f+ || 10 : a+ || 13 : c+' || 20 : g+' ||  Akkord:    F+sus2
4 : e || 8 : g+ || 11 : b || 15 : d+' ||  Akkord:    Emaj7
9 : a || 12 : c' || 16 : e' || 20 : g+' ||  Akkord:    amaj7
9 : a || 12 : c' || 16 : e' || 21 : a' ||  Akkord:    a
6 : f+ || 9 : a || 13 : c+' || 16 : e' ||  Akkord:    f+7
6 : f+ || 10 : a+ || 13 : c+' || 16 : e' ||  Akkord:    F+7
2 : d || 5 : f || 9 : a || 16 : e' ||  Akkord:    dsus2
8 : g+ || 11 : b || 14 : d' || 17 : f' ||  Akkord:    G+0
8 : g+ || 11 : b || 15 : d+' || 20 : g+' ||  Akkord:    g+
4 : e || 7 : g || 11 : b || 14 : d' ||  Akkord:    e7
9 : a || 13 : c+' || 16 : e' || 19 : g' ||  Akkord:    A7
9 : a || 13 : c+' || 16 : e' || 23 : b' ||  Akkord:    Asus2
4 : e || 7 : g || 11 : b || 16 : e' ||  Akkord:    e
5 : f || 8 : g+ || 11 : b || 14 : d' ||  Akkord:    F0
10 : a+ || 15 : d+' || 17 : f' || 22 : a+' ||  Akkord:    A+sus4
3 : d+ || 6 : f+ || 10 : a+ || 13 : c+' ||  Akkord:    d+7
11 : b || 15 : d+' || 18 : f+' || 22 : a+' ||  Akkord:    Bmaj7
4 : e || 8 : g+ || 11 : b || 16 : e' ||  Akkord:    E
8 : g+ || 12 : c' || 15 : d+' || 22 : a+' ||  Akkord:    G+sus2
8 : g+ || 11 : b || 15 : d+' || 18 : f+' ||  Akkord:    g+7
10 : a+ || 15 : d+' || 17 : f' || 21 : a' ||  Akkord:    A+sus4maj7
1 : c+ || 5 : f || 8 : g+ || 12 : c' ||  Akkord:    C+maj7
8 : g+ || 12 : c' || 15 : d+' || 18 : f+' ||  Akkord:    G+7
6 : f+ || 9 : a || 13 : c+' || 17 : f' ||  Akkord:    f+maj7
6 : f+ || 10 : a+ || 13 : c+' || 17 : f' ||  Akkord:    F+maj7
8 : g+ || 11 : b || 15 : d+' || 22 : a+' ||  Akkord:    g+sus2
5 : f || 10 : a+ || 12 : c' || 17 : f' ||  Akkord:    Fsus4
12 : c' || 17 : f' || 19 : g' || 24 : c'' ||  Akkord:    C'sus4

...


Taugt recht gut zum Lernen/Üben.

Kommentare

Beliebte Posts aus diesem Blog

·

Es brennt.

Bye, bye Nord Stream 2!