Αναλύονται σύγχρονες τεχνικές για την αυτόματη σύνθεση μουσικών δομών που μπορούν να υλοποιηθούν μέσω υπολογιστή. Επίσης, πραγματοποιείται ανασκόπηση των αλγοριθμικών συστημάτων από τον Kircher και τον Schillinger μέχρι και τον Schoenberg και τους σειραϊστές, τους Messiaen, Ξενάκη, καθώς και άλλους μεταπολεμικούς συνθέτες. Εξετάζονται αλγοριθμικές τεχνικές, από αυτές των κοινών λογισμικών sequencer μέχρι ειδικές πειραματικές τεχνικές, όπως αυτές που βασίζονται στα fractals, στα l-systems, στους στοχαστικούς και γενετικούς αλγόριθμους και στα κυτταρικά αυτόματα. Συγχρόνως, γίνεται χρήση εξειδικευμένου λογισμικού με στόχο την εφαρμογή και την επίδειξη αλγοριθμικών τεχνικών μουσικής σύνθεσης, ενώ παράλληλα γίνονται ατομικές ασκήσεις σύνθεσης.
Σημειώσεις απο τις Παρουσιάσεις
Θεωρία
Τονικότητα
Under develpment -NEED correction
- Curt Sachs
- Γεωργιάδης Θρασύβουλος
- Franz Schubert -> ατονικότητα
Ανάλυση Μουσικών Δομών. Θεώρηση της μελωδίας, της τονικότητας του ρυθμού ώς μουσική. Κατάργηση ευροκεντρισμού 19 αιώνας. Στον 20ο αιώνα ανοίγει και ο τρόπος που βλέπουμε την μουσική κουλτούρα.
Αρχές: Δημιουργία μουσικής
- απο κραυγή - πάθος
- απο ρυθμό
- απο τον λόγο (λογοκεντρική)
- μελογενείς (εγγυής ανατολή - Ελλάδα)
- αρμογενείς (Γερμανία)
Μια πρώτη προσπάθεια προσέγγισης.
Παρατήρηση χρακτηριστικών του ήχου απο κάποια απόσταση. Βλέπουμε την μουσική σαν δομή ήχου. Περισσότερο ρυθμό περισσότερο αρμονία - μελωδία-ρυθμός;
Το φαινόμενο της τονικότητας
Για να κατανοήσουμε το φαινόμενο τηα ατονικότητας. Πάντρεμα μελωγενείς απο ανατολή(αρχαία μουσική) με την ομοφωνία και την αρμονία απο τους βόρειας, συνδιάζοντας την γραφή και την τυπογραφία (αλληλένδετα). Χωρίς την τυπογραφία ο Λούθηρος δεν θα μπορούσε. Εφόσον λέει οτι ο κάθε άνθρωπος μπορεί να βρεί τον Θεό μέσα απο την Βίβλο. Έρχονται σιγά σιγά και ιεραρχούνται οι νότες σε βαθμίδες (πολλά συστήματα (βυζάντιο-μακάμ)). Αγιοπολίτης 13ος αιώνας - εξάχορδο μινορε - ματζόρε dur - mole. Τσέμπαλα με μόρια. H Ισμαλική Ισπανία έπεσε το 1453 γίνεται όλο το πέρασμα απο τον αραβικό κόσμο στο δυτικό. Leonardo Dapiza - Fibonacci, την ίδια εποχή περνάει και το μονόχορδα. everything goes - όλα παίζουν.
Μικροτονικότητα ->
raphness είναι η αγριάδα που βγαίνει απο τα ασύγχονα σε ατίθεση με τα 200/400 ή τα 300/400 με τα 300/410.
Την αρμονική στήλη την βρίκε ο Ραμό και 6 συνχορδίες (3 ματζόρε, 3 μεινόρε) Η "Διατριβή στην Αρμονία" του 1722 ψυχολογική θεωρία
Θεωρία των βαθμίδων παλαιότερη.
Ψυχοακουστική
- Hermann von Helmholtz - Acoustics and aesthetics
- Ernst Kurth θεωρία περι λύσης έντασης
- Boris Asafyev θεωρία περι λύσης έντασης
Αρχύτας απο αυτόν έχουμε το Πυθαγόρειο σύστημα (1-2-3-4) το 10 είναι το πλήθος το άπειρο. Η μονάδα δεν ήταν αριθμός για τους Έλληνες. Τέτρακτυς - Pascal's triangle. Πυθαγόρας σύνδεση μουσικής και αριθμών. Συμβολική έννοια των ΑΡΙΘΜΏΝ στο κόσμο - Πυθαγορισμός
Μουσική αρμονία
Η σχέση των αριθμών. Τα κλάσματα η πρόσθεση και η παραγωγή μουσικής. Αριστόξενος, Πτολεμαίος κ.α. 1/2, 2/3, 3/4 σύμφωνα διαστήματα ενώ στη πράξη υπάρχει η τρίτη αλλα στην θεωρία απαγορεύται. 4/5, 5/6 παραφωνίες απο εκεί και πάνω διαφωνίες. Σήμων Καρράς (εθνοκεντρικός) μέγα θεωρητικό (link). Έτσι η αποδοχή αυτών και παραπάνω μας οδηγεί στην ατονικότητα. Το εναρμόνιο γένος στους Αρχαίου Έλληνες ο αριθμός 7. Modeverdi (barrok) H χειραφέτηση της 7ης (monteverdi madrigalia, Wagner το πρελούδιο του Στεφάνου και της Ιζόλδης η πτώση της τονικότητας στην ατονικότητα fa-re-si-mib μια ελλατωμένη συγχορδία και μια μικρη έβδομη) φα - λα# - σι - μι. Συγχορδία 3 νότες που δημιουργούν μια πέμπτη 2/3 (1/2 δεν υπάρχει γιατι είναι η ίδια νότα) και μια μικρή έβδομη σιb δημιουργεί την τάση (4η: αυξημένη το διάστημα του διαβόλου) ελάσσων 5/6
Συζήτηση σχετικά με το ύψος. Τι γίνεται με την Ένταση και τον Ρυθμός;
Πρακτική - SuperCollider
- 2000 Objects - Classes - Πρότυπα (αρχίζουν με μεγάλο γράμμα)
- Στείλαμε το μήνυμα default στο πρότυπο Server και πήραμε μια απάντηση "localhost". Κάθε έίδος αντικειμένου καταλαβαίνει διαφορετκά μηνύματα (interface) ή ίδια αννα έχει άλλο αποτέλεσμα.
Server.default;
τα μηνύματα αρχίζουν πάντα με μικρό γράμμα.)
Primitives είναι κώδικας κομπιλαρισμένος έτσι ώστε να δουλέυει το σύστημα. Βασικές διαδικασίες που χρειάζεται ο κώδικας για να τρέξει. Η πράξη της πρόσθεσης είναι γραμμένος σε κώδικα μηχανής και οχι σε γλώσσα SuperCollider. Όπως τα άτομα στον περιοδικό πίνακα για να δημιουργήσουμε μόρια.
Λεξιλόγιο - Interface
Οργάνωση Προτύπων βάση των οργανισμών. Καθορισμός αρχής λειτουργίας. Το κλειδί της κατανόησης είναι να μεταδόσουμε την αρχή λειρουργία και απο πίσω κρύβεται μια ιστορία (βιολογικό - narrative http://en.wikipedia.org/wiki/Paradigm).
Τρόπος να βρεί ένα προγραμμα να μεγαλώνει. Κατασεκυή software. Αρχιτεκτονική. Αν κάνεις το software πιο μεγάλο φτάνεις στα όρια. Λόγω στατικών. Narrative. Με βασική αρχή δόμισης οτι όταν να μεγαλώνει να μπορεί να στέκεται. Αντικειμενοστραφής προγραμματισμός.
Η γλώσσα γνωρίζει τον ευατό της και μπορεί να αλλάζει.
Collection.dumpClassSubtree
Collection είναι ένα αντικείμενο που μπορεί να μαζέψει άλλα αντικείμενα.
Δείγμα απο Διάλεξη
/* Αλγοριθμική δόμηση ήχου Taking notes from IZ lecture Aris Bezas 12:13 PM Mar 7, 2013 */ /* - Πως λειτουργεί? - Το αρχείο που γράφουμε είναι ένα workspace (from Smalltalk) - Όταν γράφουμε κώδικα σε έα workspace δεν κομπιλάρουμε όλα τα περιεχόμενα του workspace όπως την C ή άλλα προγράμματα εκτελούμε μέρη αυτού επιλέγοντας το και με Cmdd -O Server είναι ένα Software Synthesizer εκεί τρέχουν όλες οι διαδικασίες σύνθεσης. - Η αλγοριθμική δομή μπορεί να είναι σε δύο επίπεδα ή sample προς sample (στη σύνθεση του ήχου ατού προς αυοτύ σε επίπεδο SynthDef) ή νότα προς νότα. To SynthDef καθορίζει την αλγοριθμική δομή του ήχου σε επίπεδο sample προς sample. */ ( SynthDef("noisy", { var output; // ; για να δηλώσουμε οτι τελίωσε το statement output = WhiteNoise.ar; Out.ar(0, output); } ).send ) /* To πρότυπο Out.ar(0, output) δηλώνει οτι τα κανάλια αρχινάνε απο το 0 (που είναι το αριστερό) και στέλνει σε αυτό το output. Αν θέλουμε να στείλουμε σε 2 κανάλια χρησιμοποιούμε το Array ή συστοιχία */ ( SynthDef("noisy", { var output; output = WhiteNoise.ar; Out.ar(0, [output, output]); } ) ) //Αν θέλουμε 20 κανάλια (απο το 0~19) ( SynthDef("noisy", { var output; output = WhiteNoise.ar; Out.ar(0, output ! 20); //Out.ar(0, output.dup(20)); } ) ) //Αν θέλουμε 20 κανάλια που να αρχίζουν απο το 12 (απο το 12~31) ( SynthDef("noisy", { var output; output = WhiteNoise.ar; Out.ar(12, output!20,); } ) ) d = Synth(\izClass) /* Ο αλγόριθμος αποτελείται απο κόμβους οι οποίοι είναι γεννήτριες. Inputs, controls, παράμετροι τα γράφουμε σαν ορίσματα στο function. Παρενθεση μετα απο πρότυπο (λέξη με κεφαλαίο γράμμα) είναι συντόμευση του .new. Μέσα στο function γράφουμε με σωστή σειρά και σωστή ενφώλευση. Η δήλωση των μεταβλητών (var) γίνεται στην αρχή του function, μετά το άγκιστρο (σύμβαση για την ταχύτητα). Φτιάχνω ένα δοχείο για να βάλω κάτι και αυτό το κάτι έχει και όνομα. Οι υπολογιστές δουλέυουν με αριθμούς όχι με ονόματα. Και αυτοί οι αριθμοί είναι θέσεις μνήμης. Δημιουργούμε θέση στο C++ έχει συγκεκριμένο μέγεθος. Στο SC που είναι non-type γλώσσα δεν δηλώνω μέγεθος είναι ένα σακί. Η τελέια σημαίνει στείλε ένα μήνυμα στο κουτί. Το ίσον είναι βρές αυτό το δοχείο και βάλτου κάτι μέσα. ============================================================= */ ( SynthDef("noisy", { var output; output = WhiteNoise.ar; Out.ar(0, [output, output]); } ).add ) //Εδώ έχουμε φτιάξει το patch. Δεν έχουμε πατήσει κάποια νότα (το Synth είναι η νότα) γι' αυτό και δεν ακούμε κάτι. Synth("noisy") // Cmd + . σταματάει //============================================================= // Τα variables δεν χρειάζεται να έχουν διαφορετικά ονόματα γιατί αυτά τα ονόματα ισχύουν μόνο μέσα στα function που βρίσκονται (black boxes). ( SynthDef("noisy2", { var output; output = WhiteNoise.ar(LFNoise0.kr(7).range(0.05, 0.3)); Out.ar(0, [output, output]); } ).add ) Synth("noisy2") //============================================================= // Τοποθέτηση παραμέτρων για έλεγχο // Όπου υπάρχουν αριθμοί μπορούμε ν βάλουμε ονόματα και να ελέγουμε αυτά τα ονόματα (ορίσματα - μεταβλητές) // αυτές δεν τις ορίζουμε σαν απλές μεταβλητές αλλα σαν ορίσματα - arguments ( SynthDef("noisy3", { |freq=7, lo=0.05, hi=0.3| //arg lfNoiseFreq=7, lo=0.05, hi=0.3; var output; output = WhiteNoise.ar(LFNoise0.kr(freq).range(0.05, 0.3)); Out.ar(0, [output, output]); } ).add ) Synth("noisy3", \freq, 1) Synth("noisy3", [\freq, 1, \lo, 0.1]) //============================================================= // Έλεγχος την ώρα που τρέχει ( SynthDef("noisy4", { |freq=7, lo=0.05, hi=0.3| var output; output = WhiteNoise.ar(LFNoise0.kr(freq).range(0.05, 0.3)); Out.ar(0, [output, output]); } ).add ) a = Synth("noisy4") a.set(\freq, 200) //============================================================= // Έλεγχος στην κατασκευή του αλγορίθμου ( SynthDef("rezNoise", { |freq=400, rate = 7| var source, output; source = WhiteNoise.ar(LFNoise0.kr(freq).range(0.05, 0.3)); output = Ringz.ar(source, freq); Out.ar(0, [output, output]); } ).add ) a = Synth("rezNoise") // Δημίουργια λγόριθμου που θα αλλάζει το freq // Ο αλγόριθμος θα τρέχει σε μια Routine δηλαδή θα τρέχει στον χρόνο. // Δημιουργούμε ρουτίνες στέλνοντας σε ένα function το μήνυμα fork (r = {}.fork) ( r = { loop { 0.04.wait; a.set(\freq, 200 rrand: 4000) } }.fork ) // Mια μικρή μελωδία ( r = { var melody; melody = ([0, 4, 7, 10, 9, 8, 7, 3, 0] + 60).midicps; inf.do { |index| 0.1.wait; //a.set(\freq, melody.at((index%7))) a.set(\freq, melody@@index) } }.fork )
Τελική Εργασία
Υπάρχει εργασία με θέμα σχετικό με το τίτλο του μαθήματος. Η εργασία μπορεί να είναι θεωρητική ή και πρακτική με κάποια εφαρμογή.
Με βάση αυτό παραδίδεται μια θεωρητική εργασία με
- περίληψη
- συζήτηση και σκέψεις του φοιτητή
- βιβλιογραφία, επιπλέον πηγές.
Διευκρινίζεται ότι κάθε εργασία συνοδεύεται και από ένα θεωρητικό κείμενο με βιβλιογραφία. Το κείμενο μπορεί να βασίζεται σε περιγραφή της πρακτικής εργασίας, σχολιάζει όμως έστω και σύντομα το θεωρητικό υπόβαθρο.
Βιβλιογραφία
Ενδεικτκή βιβλιογραφία του μαθήματος υπάρχει στο zotero:
Μπορείται να γίνεται μέλη της συγκεκριμένης ομάδας και να μοιραστείται περαιτέρω βιβλιογραφία και σημειώσεις.