Zufällige 12-Ton Reihen für Saxophonisten

saxophon

Newbie
Registriert
Okt. 2012
Beiträge
5
Hallo Liebe Programmierer,

als Musiker beschäftige ich mich teilweise intensiv mit Zahlen, bzw. Buchstaben.

durch Euer Forum inspiriert, hoffe ich darauf, einen gnädigen unter Euch zu finden, ein Rätsel zu lösen und passende Zeilen zu schreiben, welche folgende Aufgabe erfüllen:

Eine 12x12 Felder Matrix soll mit Zahlen von 1 - 12 zufällig gefüllt werden, wobei sowohl in jeder Reihe als auch in jeder Spalte jede Zahl nur einmal vorkommen soll.

Also ungefähr so:

11 10 2 6 8 4 9 5 3 7 1 12
6 9 5 12 2 3 8 7 4 10 11 1
10 2 6 9 4 11 1 3 12 5 8 7
1 3 12 2 10 6 4 8 7 11 9 5
12 4 9 8 6 5 11 10 1 2 7 3
3 12 8 1 5 10 7 11 2 9 4 6
5 7 3 4 9 2 12 1 6 8 10 11
8 6 1 7 3 12 10 9 11 4 5 2
7 5 11 10 1 9 6 2 8 12 3 4
4 1 7 5 11 8 2 12 9 3 6 10
9 11 4 3 12 7 5 6 10 1 2 8
2 8 10 11 7 1 3 4 5 6 12 9

Ziel der Geschichte ist, die Zahlen durch Buchstaben zu ersetzen, welche Akkorde repräsentieren und dadurch passendes Material für meine Saxophonübungen zu erstellen:

A G Db C E Bb F Eb Gb D Ab B
C F Eb B Db Gb E D Bb G A Ab
G Db C F Bb A Ab Gb B Eb E D
Ab Gb B Db G C Bb E D A F Eb
B Bb F E C Eb A G Ab Db D Gb
Gb B E Ab Eb G D A Db F Bb C
Eb D Gb Bb F Db B Ab C E G A
E C Ab D Gb B G F A Bb Eb Db
D Eb A G Ab F C Db E B Gb Bb
Bb Ab D Eb A E Db B F Gb C G
F A Bb Gb B D Eb C G Ab Db E
Db E G A D Ab Gb Bb Eb C B F

Es wäre praktisch, wenn die Zahlen in eine 12x12 Felder Tabelle ausgegeben werden.

Danke an alle, die sich die Mühe gemacht haben bis hierher zu lesen.

Ich freue mich auf Antworten von Euch.

Liebe Grüße
Sebastian
 
Das sollte in PHP machbar sein. Ich würde es sicher irgendwann hinbekommen irgendwie aber sicher gibt es Leute hier die es schneller und besser können als ich, evtl ja sogar jemand mit Webspace ums dort zu lagern.
 
Mir ist jetzt noch nicht ganz klar, ob du ein fertiges Programm oder lediglich eine Hilfestellung zum selbstprogrammieren?
 
saxophon schrieb:
hoffe ich darauf, einen gnädigen unter Euch zu finden, ein Rätsel zu lösen und passende Zeilen zu schreiben, welche folgende Aufgabe erfüllen
Steht doch da. Da er selbst nicht "vom Fach" ist, finde ich das okay. Wenn ich ein Saxophon-Sample für einen Soundeffekt brauche, will ich ja auch nicht erst Saxophon spielen lernen. ;)
 
Danke für Euere Antworten!

Mit Programmierung kenne ich mich leider "0" aus, weshalb ich im Endeffekt ein Programm suche, welches die Zufallszahlen liefert.

Das Sudoku könnte eine Hilfe für mein Problem sein. Ich werde es gleich ausprobieren....

Schön, der Sache langsam näher zu kommen.

Grüße
Sebastian
 
Tumbleweed schrieb:
Steht doch da. Da er selbst nicht "vom Fach" ist, finde ich das okay. Wenn ich ein Saxophon-Sample für einen Soundeffekt brauche, will ich ja auch nicht erst Saxophon spielen lernen. ;)

Ich sag ja auch gar nichts dagegen :)
Das ist eigentlich eine schöne Übungsaufgabe für alle, die hier am C++ lernen sind. Wenn sich keiner findet könnte ich mich mal ransetzen, sobald ich Zeit dafür finde.
 
Super! Dieses Sudoku gibt mir die Werte, die ich brauche.
http://www.sudoku-solutions.com/sudo...?SUDOKU_TYPE=5

Jetzt wäre es halt noch cool, die Tabelle stressfrei in meine Textverarbeitung zu kopieren im 12X12 Raster. Im Moment bekomme ich eine Tabelle mit 3X4 Zellen und jede Zelle hat 12 Werte. Die Werte sind alle Vertikal angeordnet :D

Das wundert mich, weil das Sudoku doch eigentlich nach einer 12X12 Zellen-Tabelle aussieht?!

Hat jemand noch einen letzten Ratschlag zu meinem Glück?
 
Der Link ist nicht ganz optimal... da abgeschnitten.
Ich hab mal aus Spaß ne reine Javascriptlösung geschrieben.
Code:
<!DOCTYPE html>
<html lang="de">
    <head>
        <meta charset="utf-8" />
        <title>Saxophon Übungsgenerator</title>
		<script>
  	var field_size = 12;
  	var scramble_time = field_size * field_size;
  	//Code from http://www.naden.de/blog/zufallszahlen-in-javascript-mit-mathrandom
  	function rand(min, max) {
  		var r;
  		do {
  			r = Math.random();
  		}
  		while (r == 1.0);
  		return min + parseInt(r * (max - min));
  	}
  	function genTestVector() {
  		var t = [];
  		var i = 0;
  		for (i = 0; i < field_size; ++i) {
  			t[i] = i + 1;
  		}
  		//Scamble
  		var pos1, pos2;
  		var buf;
  		for (i = 0; i < scramble_time; i++) {
  			pos1 = rand(0, field_size);
  			do {
  				pos2 = rand(0, field_size);
  			} while (pos1 == pos2);
  			buf = t[pos1];
  			t[pos1] = t[pos2];
  			t[pos2] = buf;
  		}
  		return t;
  	}
  	//Strategy: divide and conquer
  	function walk(field, x, y) {
  		var vector = genTestVector();
  		var i = 0;
  		for (i = 0; i < vector.length; ++i) {
  			var val = vector[i];
  			//check if valid to insert val at [x,y]
  			var j = 0;
  			var bad = false;
  			for (j = 0; j < field_size; ++j) {
  				if (bad)
  					break;
  				bad = field[x][j] == val || field[j][y] == val;
  			}
  			if (!bad) {
  				//it is valid to insert the val here, do it
  				field[x][y] = val;
  				//Check for a solution
  				var nextx = x + 1 >= field_size ? 0 : x + 1, nexty = x + 1 >= field_size ? y + 1 : y;
  				if (nexty >= field_size || walk(field, nextx, nexty) == 0) {
  					return 0; //It is a working solution, returning
  				}
  				else
  					field[x][y] = 0;
  			}
  		}
  		return 1;
  	}
  	function generate() {
  		var field = [];
  		var i = 0, j = 0;
  		for (i = 0; i < field_size; ++i) {
  			field[i] = [];
  			for (j = 0; j < field_size; ++j) {
  				field[i][j] = 0;
  			}
  		}
  		walk(field, 0, 0);
  		var html = "";
		//Hier die Werte für die Akkorde eintragen
  		var replace = [0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'];
  		html += "<table>";
  		for (i = 0; i < field_size; ++i) {
  			html += "<tr>";
  			for (j = 0; j < field_size; ++j) {
  				html += "<td>" + replace[field[i][j]] + "</td> ";
  			}
  			html += "</tr>";
  		}
  		html += "</table>";
  		document.getElementById("result").innerHTML = html;
  	}
		</script>
    </head>
    <body>
		<button onclick="generate()">Generieren</button>
        <div id="result"></div>
    </body>
</html>
In ne Datei rein, abc.html nennen und im Browser öffnen (Scripte ausführen lassen).
Für deine Akkorde einfach die var replace=...-Zeile anpassen.
Wenn ich das nach Word kopiere, dann macht der mir automatisch ne schöne Tabelle.
 
Wenn wirklich jemand eine Programmier - Übung daraus machen möchte, dann hätte ich direkt noch einige Parameter mehr, welche mit programmiert werden können.

(1.) Eine 12x12 Felder Matrix soll mit Zahlen von 1 - 12 zufällig gefüllt werden, wobei sowohl in jeder Reihe als auch in jeder Spalte jede Zahl nur einmal vorkommen soll, also so:
http://www.sebastianjost.de/upload/12z.png

2.1. Als Highlight sehe ich dann die Möglichkeit, die Werte 1 - 12 per Abfrage neue Werte in Form der 12 Halbtonschritte in der Musik (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B) zuordnen zu können, damit man mit der in (1.) erstellten Matrix sowohl dies:
http://www.sebastianjost.de/upload/12t.png
als auch dies:
http://www.sebastianjost.de/upload/12t2.png
oder beliebige andere Clone der gleichen Zahlenkombination erzeugen kann.

Wer sich etwas mit Tönen in der Musik auskennt, weiß vielleicht, daß Halbtöne entweder mit einen "b" oder einem "#" erzeugt werden. Damit sind die folgenden Paare gleich: D#/Eb, F#/Gb, G#/Ab, A#/Bb.

2.2. Witzig wäre natürlich auch wenn einfach die 12 ! = 479 001 600 Möglichkeiten ausgegeben werden und man diese nach belieben in die Textverarbeitung kopieren kann. Berücksichtigt man die Töne mit "b" und "#" werden die Möglichkeiten weiter erhöht. Zur Übersicht soll in jeder Zelle aber entweder der Ton mit # oder mit b erscheinen, nicht beide.

3. Die Krönung stellt die Fähigkeit des Programms dar, die aus 2.2. endliche Zahl der Möglichkeiten transponieren zu können. Es handelt sich dabei um eine Verschiebung. Dies soll aus der folgenden Grafik hervor gehen, wobei im Beispiel nur eine einzige der aus 2.2. generierten Möglichkeiten transponiert wurde.
http://www.sebastianjost.de/upload/bsp3.png

Nachdem ich mir die letzte Logik aus den Hirnwindungen gerungen habe, bin ich gespannt, ob jemand sich der Herausforderung stellen möchte, um ein Programm zu erstellen, welches die genannten Fähigkeiten besitzt.

Übrigens bin ich als Mac User nicht in der Lage .exe Dateien abzufahren. Am kompatibelsten wäre wahrscheinlich eine HTML-Oberfläche. Oder?

erneute schöne Grüße
Sebastian
 
Hi Hancock,

dankeschön! bisher hab ich das Script nicht zum Laufen gebracht. Es wir nur der Quelltext angezeigt. Ich benutze Safari bzw. Firefox auf dem Mac. Java und Javascript sind aktiviert.

Fehler gefunden...
Hatte es als formatierten Text abgespeichert...
Ergänzung ()

So, vielen herzlichen Dank an alle, die geholfen haben. Das Skript von Hancock läuft wunderbar! Mir wurde geholfen.

Schönen Sonntag Nachmittag an alle!

Grüße
Sebastian
 
Zuletzt bearbeitet:
Zurück
Oben