// ============== MATHIMA 5, ================= //

Σχετικά έγγραφα
// MATHIMA 4, //

// MATHIMA 2, // s.boot; s.makewindow.boot; // boot server!

Εργαστήριο 2. Ενεργοποιώντας τον ήχο (πατάμε στο ηχείο με το patch κλειδωμένο) ακούμε ένα ημίτονο με συχνότητα 440Hz.

ΜΑΘΗΜΑ 2, Έλεγχος ροής προγράμματος ΒΑΣΙΚΗ ΣΥΝΤΑΞΗ:

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 9 Ανάλυση Fourier: Από τη Θεωρία στην Πρακτική Εφαρμογή των Μαθηματικών

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 7 Ακούγοντας Πρώτη Ματιά στην Ανάλυση Fourier. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Μάθημα: Ψηφιακή Επεξεργασία Ήχου

Ήχος. Τεχνολογία Πολυμέσων και Πολυμεσικές Επικοινωνίες 04-1

ΕΝΑΡΞΗ ΜΕ DJCONTROL COMPACT ΚΑΙ DJUCED 18

Εργαστήριο 3 Μέρος 1ο Γεννήτριες κυματομορφών στο Max

Αφήγηση Μαρτυρία. Μουσική. Ενίσχυση μηνύματος Μουσική επένδυση Ηχητικά εφέ

Β τάξη. ΕΝΟΤΗΤΑ 1 Κεφάλαιο 2: Το εσωτερικό του Υπολογιστή. Εικόνα 2.1: Η Κεντρική Μονάδα.

Ο ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ Ζ διακριτές σήματα και συστήματα διακριτού χρόνου χρονοσειρές (time series)

Σημειώσεις κεφαλαίου 16 Αρχές επικοινωνίας με ήχο και εικόνα

25/3/2009. Η επεξεργασία του ψηφιακού σήματος υλοποιείται μέσω κατάλληλου αλγορίθμου. Φλώρος Ανδρέας Επίκ. Καθηγητής Παράμετροι ελέγχου

PRAAT -- ΟΔΗΓΟΣ ΓΙΑ ΤΑ ΠΡΩΤΑ ΒΗΜΑΤΑ Ανθή Χαϊδά

Ένα αναλογικό σήμα περιέχει άπειρες πιθανές τιμές. Για παράδειγμα ένας απλός ήχος αν τον βλέπαμε σε ένα παλμογράφο θα έμοιαζε με το παρακάτω:

15/3/2009. Ένα ψηφιακό σήμα είναι η κβαντισμένη εκδοχή ενός σήματος διάκριτου. χρόνου. Φλώρος Ανδρέας Επίκ. Καθηγητής

Περιγραφή του βασικού παραθύρου του Cubase SE3. Εικόνα 1

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 8 Επεξεργασία Σήματος με την Ανάλυση Fourier. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Ο Μπούκλας παίζει και μουσική όταν στην πράσινη σημαία γί νει κλικ. αίξε ήχο _ χρι τέλους περίμενε για _ χρόνους. περίμενε για δευτερόλεπτα.

Τεχνολογία Πολυμέσων. Ενότητα # 4: Ήχος Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ΕΕΓΔ Οδηγίες προς τους μαθητές για τη χρήση του λογισμικού εξέτασης (EL)

Ηχογραφώντας με το CUBASE

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Εισαγωγή στις Τηλεπικοινωνίες / Εργαστήριο

ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ

3-Φεβ-2009 ΗΜΥ Σήματα

Ήχος και φωνή. Τεχνολογία Πολυµέσων 04-1

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μαθήματα 6 και 7 Αναπαράσταση της Πληροφορίας στον Υπολογιστή. 1 Στέργιος Παλαμάς

ΠΕΙΡΑΜΑ 4: ΕΞΟΙΚΕΙΩΣΗ ΜΕ ΠΑΛΜΟΓΡΑΦΟ ΚΑΙ ΜΕΤΡΗΣΗ ΕΝΑΛΛΑΣΣΟΜΕΝΩΝ ΣΗΜΑΤΩΝ

Audacity Σύντομος οδηγός χρήσης

c xy [n] = x[k]y[n k] (1)

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Αναπαραγωγή και stop/pause έτοιμων ηχητικών clips

Πολυπλεξία. Creative Commons License 3.0 Share-Alike

ΤΑ ΠΡΩΤΑ ΒΗΜΑΤΑ ΜΕ ΤΟ DJCONSOLE RMX2 KAI TO DJUCED

ΔΙΑΛΕΞΗ ΙΙ ΕΝΑ ΒΗΜΑ ΠΑΡΑΠΑΝΩ ΜΕ SCRATCH ΕΠΙΛΕΓΩΝΤΑΣ & ΕΠΑΝΑΛΑΜΒΑΝΟΝΤΑΣ

ο σκύλος που τρέχει (Μπορούσε ο σκύλος της προηγούμενης εργασίας να κινηθεί;)

Συστήματα Πολυμέσων. Ενότητα 11: Χαρακτηριστικά Ψηφιακού Ήχου. Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

ΨΗΦΙΟΓΡΑΦΙΚΕΣ ΕΙΚΟΝΕΣ

Χρήση του Αudacity για επεξεργασία ήχου

ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ MIDI

DJUCED 18. Μπείτε στη λίστα των αρχείων σε έναν φάκελο: Περιηγηθείτε στη λίστα των φακέλων ή στα αρχεία:

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Ραδιοτηλεοπτικά Συστήματα Ενότητα 5: Ψηφιοποίηση και συμπίεση σημάτων ήχου

ΕΣΔ 200: ΔΗΜΙΟΥΡΓΙΑ ΠΕΡΙΕΧΟΜΕΝΟΥ ΙΙ. Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

Αυτόνομοι Πράκτορες. ΝΑΟ Μουσικός

ΦΥΣΙΚΗ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ Α ΛΥΚΕΙΟΥ

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Αρχές Τηλεπικοινωνιών

ΤΑ ΠΡΩΤΑ ΒΗΜΑΤΑ ΜΕ ΤΟ DJCONTROL INSTINCT ΚΑΙ ΤΟ DJUCED

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Διάλεξη 6: Δείκτες και Πίνακες

ΚΕΦΑΛΑΙΟ 5. Audacity

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

Ενότητα 4: Δειγματοληψία - Αναδίπλωση

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Διαδικασιακός Προγραμματισμός

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

Διορθώσεις σελ

Ιατρικά Ηλεκτρονικά. Χρήσιμοι Σύνδεσμοι. ΙΑΤΡΙΚΑ ΗΛΕΚΤΡΟΝΙΚΑ - ΔΙΑΛΕΞΗ 5α. Σημειώσεις μαθήματος: E mail:

Περιεχόµενα. ΕΠΛ 422: Συστήµατα Πολυµέσων. Μέθοδοι συµπίεσης ηχητικών. Βιβλιογραφία. Κωδικοποίηση µε βάση την αντίληψη.

Εξέταση Πρώτου Τετραδίου

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

HMY 429: Εισαγωγή στην Επεξεργασία Ψηφιακών

ΤΑ ΠΡΩΤΑ ΒΗΜΑΤΑ ΜΕ ΤΟ DJCONTROL AIR+ KAI TO DJUCED 40

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? )

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Εισαγωγή στις Τηλεπικοινωνίες / Εργαστήριο

ΠΛΗ21 Κεφάλαιο 1. ΠΛΗ21 Ψηφιακά Συστήματα: Τόμος Α Κεφάλαιο: 1 Εισαγωγή

Συστήματα Πολυμέσων. Ενότητα 2: Εισαγωγικά θέματα Ψηφιοποίησης. Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Φυσική για Μηχανικούς

ΦΥΣΙΚΗ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ

Public Address (PA) Ενίσχυση Συναυλιών. Κύκλος Διαλέξεων Ηλεκτρακουστικής 20/2/2012. Δευτέρα, 20 Φεβρουαρίου 12

ΠΑΡΑΡΤΗΜΑ IV. ΔΙΔΑΚΤΙΚΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΡΑΡΤΗΜΑ IV Ασκήσεις για το Robolab

Ψηφιακές Ιστορίες (παρουσιάσεις) - Hardware & Software

Slalom Race Computer Game on Scratch

Σειρά Προβλημάτων 5 Λύσεις

ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΑΝΕΛ ΕΝΤΟΛΩΝ 1. Μικρόφωνο εγγραφής μηνύματος ΣΗΜΕΙΩΣΕΙΣ ΚΑΤΑ ΤΗΝ ΛΕΙΤΟΥΡΓΙΑ

2. Ανάλυση και Σύνθεση κυματομορφών με την μέθοδο Fourier

Ποιές εντολές του Scratch πρέπει να ξέρω;

Διαγώνισμα 1 Α στα Μηχανικά κύματα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΛΟΓΙΣΜΙΚΟ ΠΡΟΣΟΜΟΙΩΣΗΣ ANYLOGIC

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Λογικές εκφράσεις και μεταβλητές

ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΑΣ. Κεφάλαιο 4 : Σήματα Χρήστος Ξενάκης. Πανεπιστήμιο Πειραιώς, Τμήμα Ψηφιακών Συστημάτων

Ψηφιακός ήχος και κινούμενα γραφικά

Εισαγωγή στις Τηλεπικοινωνίες / Εργαστήριο

Τηλεπικοινωνιακά Συστήματα ΙΙ

Σύνοψη είτε τις ολοκληρωµένες απαντήσεις

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Transcript:

// ============== MATHIMA 5, 28.03.12 ================= // /* ----------------------------------------------------------- SYNTHESIS DEFINITION ------------------------------------------------------------------- /* ======================================= SynthDef ============================================== /* Στα προηγούμενα παραδείγματα των Synth's είχαμε τα εξής 2 ζητήματα: 1. Έπρεπε κάθε φορά να τρέχουμε το Synth για να δημιουργηθεί ΚΑΙ το 'πρότυπο' και το παράδειγμα αυτού του προτύπου 2. Δεν μπορούσαμε να απομονώσουμε την εκκίνηση και τη διακοπή διαφορετικών παραδειγμάτων ενός ίδιου Synth, αλλά κλείναμε τον συνολικό ήχο όλων μαζί. 3. Δεν μπορούσαμε να αλλάζουμε τις τιμές των χαρακτηριστικών τους π.χ. συχνότητα, φάση, πλάτος χωρίς να διακόπτουμε τον ήχο. /* για να μπορέσουμε να έχουμε ουσιαστικό έλεγχο πάνω στον ήχο πρέπει να χρησιμοποιούσουμε Synth Definitions SynthDefs και κατόπιν να παίξουμε τον ήχο με Synth Η σύνταξη είναι : SynthDef\onoma, ugen graph εδώ μέσα }.sends; Ο πιο κοινός τρόπος για να δημιουργήσουμε μεταβλητές δηλ. πράγματα που μπορούμε να αλλάξουμε στο παράδειγμα του SynthDef που θα τρέξουμε είναι να τοποθετήσουμε arguments μέσα στο UGen Graph Function έτσι ονομάζεται η συνάρτηση που τοποθετείται μέσα στο SynthDef. Αυτό μας επιτρέπει να θέσουμε διάφορες τιμές όταν δημιουργήσουμε το ίδιο το Synthesizer Synth. Αυτά δίνονται ως πίνακες στο δεύτερο όρισμα του Synth. Ο πίνακας περιέχει ζευγάρια από ονόματα&τιμές μεταβλητών. Ένας βασικός μπούσουλας template : SynthDef"onoma", arg a=, b= ; // εδώ δηλώνουμε τα ορίσματα, ενδεχομένως και με αρχικές τιμές var sound; sound =... ; // εδώ αρχίζουμε να διαρθρώνουμε ugens. Out.ar0, sound }.sends x=synth"onoma"; y=synth"onoma",[\a,,\b,...]; y.set\b,...; x.free; y.free; /* ΠΑΡΑΔΕΙΓΜΑ //Σε συνάρτηση: x = SinOsc.ar660, 0, 0.2 // Το αντίστοιχο SynthDef: y = SynthDef.new"tutorial-SinOsc", Out.ar0, SinOsc.ar440, 0, 0.2 /* ============================ SCHEDULING ======================= // πως προγραμματίζω κάτι να γίνει στο μέλλον: SystemClock.schedχρόνος σε δευτερόλεπτα,..κώδικας εδώ.. ; nil }; // αν δεν βάλω το nil ο κώδικας θα εκτελείται διαρκώς ανα διαστήματα ίσα με τον χρόνο που έχω δώσει // ή.. κώδικας εδώ.. }.defer χρόνος σε δευτερόλεπτα // πως να δουλέψω με μια λογική 'παρτιτούρας' /* SynthDef"synth1",..}.sends; SynthDef"synth2",..}.sends; a = Synth"synth", [\..,..,\..,..] }.defer1; a.set\.., }.defer3 a.free}.defer5; b = Synth"synth2", [\..,..]}.defer2;... /* ΠΑΡΑΔΕΙΓΜΑ SynthDef"sine", arg freq=200, vol=1, pan=0; var sound; sou = vol*sinosc.arfreq; sound = Pan2.arsou, pan ; Out.ar0, sound; }.sends;

a = Synth"sine" }; a.set\freq,240}.defer1; a.set\pan,1}.defer3; a.free}.defer5; //ΠΡΟΣΟΧΗ, γιατί το SynthDef είναι κάτι που τρέχουμε μόνο μία φορά και άρα σε κάποια πράγματα έχει περιορισμούς. Π.χ. στη χρήση ψευδο-τυχαίων παραμέτρων. Δείτε τις διαφορές σε συνάρτηση και SynthDef εδώ: // first with a Function. Note the random frequency each time 'play' is called. f = SinOsc.ar440 + 200.rand, 0, 0.2 }; x = f.play; y = f.play; z = f.play; x.free; y.free; z.free; // Now with a SynthDef. No randomness! SynthDef"tutorial-NoRand", Out.ar0, SinOsc.ar440 + 200.rand, 0, 0.2 }.sends; x = Synth"tutorial-NoRand"; y = Synth"tutorial-NoRand"; z = Synth"tutorial-NoRand"; x.free; y.free; z.free; //ΣΤΑ SynthDef ΕΙΝΑΙ ΑΠΑΡΑΙΤΗΤΗ Η ΧΡΗΣΗ ΤΟΥ OUT!!! /* ============================================ OUT ============================================== /* Το Out,ar, γράφει ένα ηχητικό σήμα σε ένα ή σε έναν πίνακα από buses, τα οποία αντιστοιχούν στα κανάλια. το πρώτο όρισμά του είναι ο αριθμός της εξόδου απο όπου θα βγει ο ήχος 0 είναι η πρώτη, το δεύτερο ο ήχος που θα αναπαραχθεί, αν ο ήχος είναι πολυκάναλος τότε τα υπόλοιπα κανάλια θα αναπαραχθούν από τις αμέσως επόμενες εξόδους: Out.arkanali/a, sima; // kai an theloume na to akousoume: Out.arkanali/a, sima // akoma perissotero an theloume na spasoume ti sunartisi se kommatia, mporoume na poume oti // ena Ugen pou paragei ixo, p.x. to SinOsc.ar300,0,1 tha to xrisimopoiisoume ws sima mesa stin Ugen Out auto to sima tha einai pou tha bgei apo kapoia eksodo. Mporoume to SinOsc na to dwsoume prwta se mia metabliti, p.x. wave = SinOsc.ar300,0,1; // Sti sunexeia auto to wave einai to sima pou tha bgei apo tin Out, opou tin eksodo ti dinoume ws orisma: arg eksodos=1, sfreq=300, smul=1; var wave; wave = SinOsc.arsfreq,0,smul; Out.areksodos, wave; //Για παράδειγμα τα παρακάτω: /* ΕΝΑΣ ΗΧΟΣ ΕΞΕΡΧΕΤΑΙ ΜΟΝΟ ΑΠΟ ΤΟ ΑΡΙΣΤΕΡΟ ΚΑΝΑΛΙ //Το: SinOsc.ar200 }.scope // ή αλλιώς: SinOsc.ar[200,0] }.scope //είναι ισόδυναμό με το: [SinOsc.ar200, SinOsc.ar0] }.scope //και επίσης ισοδύναμο με το: Out.ar 0, SinOsc.ar200 // Δρομολογεί ένα ημίτονο στην αριστερή έξοδο /* ΕΝΑΣ ΗΧΟΣ ΕΞΕΡΧΕΤΑΙ ΜΟΝΟ ΑΠΟ ΤΟ ΔΕΞΙΟ ΚΑΝΑΛΙ //Το: SinOsc.ar[0,200] }.scope //είναι ισόδυναμό με το: [SinOsc.ar0, SinOsc.ar200] }.scope //και επίσης ισοδύναμο με το: Out.ar 1, SinOsc.ar200 // Δρομολογεί ένα ημίτονο στη δεξιά έξοδο //το παρακάτω Pan2 δεν προλάβαμε να το καλύψουμε στις 04.04.12, αλλά όποιος το καταλαβαίνει και θέλει, μπορεί να το χρησιμοποιήσει στην εργασία /* ========================= PAN2 ============================= // Αν θέλω να τοποθετήσω έναν μονοφωνικό ήχο σε οποιοδήποτε ενδιάμεσο σημείο της στερεοφωνικής εικόνας, μπορώ να κάνω χρήση του Ugen Pan2, η σύνταξη του οποίου είναι: Pan2.ar ήχος, θέση στο φάσμα - η θέση στη στερεοφωνική εικόνα είναι ένας αριθμός από το -1 έως το +1 όπου -1 ισοδυναμεί με τελείως αριστερά, +1 τελείως δεξιά και οι ενδιάμεσες τιμές κάπου ενδιάμεσα. // π.χ. για το κέντρο: Pan2.ar SinOsc.ar200, 0 // για αριστερά:

Pan2.ar SinOsc.ar200, -1 // για δεξιά: Pan2.ar SinOsc.ar200, 1 // τυχαία μετακίνηση του ήχου μεταξύ των καναλιών: Pan2.ar SinOsc.ar200, LFDNoise1.ar1, 1 // Χρησιμοποιώντας το MouseX και το Pan2 ελέγχουμε τη στερεοφωνική εικόνα δυναμικά Pan2.ar SinOsc.ar200, MouseX.kr-1,1 // Θα μπορούσαμε βέβαια να χρησιμοποιήσουμε το LFDNoise1 και για τη συχνότητα του ταλαντωτή: Pan2.arSinOsc.arLFDNoise1.ar4, 500, 450, LFDNoise1.ar2,1 /* Tha mporousame kalista na akousoume kai ton idio ton ixo apeutheias LFNoise1.ar200, 1 //το παρακάτω Mix δεν προλάβαμε να το καλύψουμε στις 04.04.12, αλλά όποιος το καταλαβαίνει και θέλει, μπορεί να το χρησιμοποιήσει στην εργασία /* ========================== MIX =============================== // Μπορώ επίσης να πάρω δύο σήματα, να τα μιξάρω και να βγάλω το ίδιο πράγμα και από τις δύο εξόδους, οπότε τελικά είναι μονοφωνικό το σήμα!!! // αν λοιπόν με τον παρακάτω τρόπο έχω δύο διαφορετικά σήματα στα δύο κανάλια, ~sound = SinOsc.ar[200, 1350], mul:0.5; Out.ar0, ~sound; //, στο παρακάτω μιξάρω τα σήματα αυτά δηλάδη τα προσθέτω μεταξύ τους και μετά τα στέλνω ισόποσα και στις δύο εξόδους, οπότε τα ακούω στη μέση: ~sound = Mix.arSinOsc.ar[200, 350], mul:0.5; Out.ar0, [~sound, ~sound]; // Mix in mono με διαφορετικές σχετικές εντάσεις Mix.ar SinOsc.ar[200, 400], mul:[0.5, 0.3] }.scope // mix in mono // ή αλλιώς ~sound = Mix.arSinOsc.ar[200, 350], mul:0.5; Out.ar[0,1], ~sound; // μεταβολή των σχετικών εντάσεων με 'τυχαίο' τρόπο ~sound = Mix.arSinOsc.ar[200,350], mul:lfdnoise1.kr3,0.5; Out.ar[0,1], ~sound; // μεταβολή και των δύο συχνοτήτων με 'τυχαίο' τρόπο ~sound = Mix.arSinOsc.ar[LFDNoise1.kr4,500,200,LFDNoise1.kr2,1000,50], mul:lfdnoise1.kr3,0.5; Out.ar[0,1], ~sound; // Mixing με 4 συχνότητες ~sound = Mix.arSinOsc.ar[200, 350, 400, 600], mul:0.25; Out.ar0, [~sound, ~sound]; // Λίγο πιο οργανωμένα με τη χρήση μεταβλητών: ~ixos = SinOsc.ar [50,120,315,600,70,800,122], 0, 0.1 ; //πολυφωνικός ~ixos2 = Mix.ar ~ixos ; //μονοφωνικός θα ακουγόταν στο αριστερό κανάλι ως έχει ~ixos3 = Pan2.ar~ixos2, -0.3; // ο προηγούμενος μονοφωνικός τοποθετημένος τώρα στη στερεοφωνία Out.ar0,~ixos3 //στέλνω αυτόν τον στερεοφωνικό πλέον ξεκινώντας από την έξοδο 0 κανάλια: 0,1 // Χρησιμοποιώντας το MouseX και το Pan2 ελέγχουμε τη στερεοφωνική εικόνα δυναμικά ~sound = Mix.arSinOsc.ar[200,400,500], mul:0.3; Out.ar0, Pan2.ar~sound, MouseX.kr-1,1; // Λίγο πιο οργανωμένα με τη χρήση μεταβλητών: ~ixos = SinOsc.ar [50,120,315,600,70,800,122], 0, 0.1 ; //πολυφωνικός

~ixos2 = Mix.ar ~ixos ; //μονοφωνικός θα ακουγόταν στο αριστερό κανάλι ως έχει ~mouse = MouseX.kr-1,1 ~ixos3 = Pan2.ar~ixos2, ~mouse; // ο προηγούμενος μονοφωνικός τοποθετημένος τώρα στη στερεοφωνία ανάλογα με τη θέση του ποντικιού Out.ar0,~ixos3 //στέλνω αυτόν τον στερεοφωνικό πλέον ξεκινώντας από την έξοδο 0 κανάλια: 0,1 // Δημιουργία πριονωτής κυματομορφής με Mix ενός πίνακα σχετικών συχνοτήτων και εντάσεων! Mix a=1,3..13; f=100; SinOsc.ar f*a, 0, 1/a /* Αν δεν κάναμε Mix, όπως φαίνεται παρακάτω, θα ακουγόταν κάθε ημίτονο και σε άλλο κανάλι φυσικά σε ένα σύστημα με 2 κανάλια εξόδου, ακούμε μόνο τα 2 πρώτα a=1,3..13; f=100; SinOsc.ar f*a, 0, 1/a // ΤΕΤΡΑΓΩΝΙΚΗ: // Approximating a square wave using tables f = 200; // base frequency a = [f, f*3, f*5, f*7, f*9, f*11] // odd harmonics only // odd harmonics with amplitudes 1/N in order to produce a square wave Mix.arSinOsc.ara, mul: [1, 1/3, 1/5, 1/7, 1/9, 1/11] // Or even better f = 200; // base frequency c = 1,3..11 // try this also -> c = 1,3..99 c*f // frequency array 1/c // amplitude array Mix.arSinOsc.arc*f, mul:1/c //1. sinewave SinOsc.ar1,3..13*50,0,1/1,3..1 // Τυχαία κίνηση ήχου ~sound = Mix.arSinOsc.ar[200,400,500], mul:0.3; Out.ar0, Pan2.ar~sound, LFDNoise1.kr3; /*ΔΙΑΦΟΡΑ ΠΑΡΑΔΕΙΓΜΑΤΑ //Παρακάτω θα βρείτε διάφορα παραδειγματάκια, έτσι για να σας δώσουν ιδέες. Ούτε κάποια συγκεκριμένη ύλη καλύπτουν, ούτε είναι τίποτα φοβερό. Επίσης, δεν θα ήθελα να τα χρησιμοποιήσετε αυτούσια - είναι απλώς έτσι, για να σας δώσουν ιδέες, πόσα πράγματα μπορείτε να κάνετε με αυτά που ήδη ξέρετε. /*--------------BEATS-------------- // ένας τρόπος... i=sinosc.ar75, mul:0.1; e=env.perc0, 1; k=impulse.kr4; //εξάγει τιμές=1 4 φορές/δευτερόλεπτο, το οποίο χρησιμοποιείται για να trig-άρεται κάθε τόσο η περιβάλλουσα a a=envgen.kre,gate:k; //δες τι κάνει το gate μέσα στο EnvGen ανοιγόκλειμα πύλης για περιβάλλουσα i * a // Εδώ απλώς χρησιμοποιούμε μια περιβάλλουσα που έχουμε φτιάξει εμείς με το Env.new και δίνουμε για χρόνο εξέλιξης της περιβάλλουσας το αντίστροφο του ρυθμού του Impulse οπότε όσο μεγαλύτερος αυτός ο ρυθμός, τόσο πιο σύντομη η περιβάλλουσα, για να μην υπάρχει περίπτωση επικάλυψης των διαδοχικών beat και άρα παραμόρφωση f=10; i=sinosc.ar175, mul:0.5; e=env.new[0,1,0.9,0], [0.05,0.45, 0.5],[-5,0,-5]; k=impulse.krf; a=envgen.kre,gate:k,timescale:1/f; i * a

// Εδώ ο ρυθμός του Impulse έχει αντικατασταθεί από τις οριζόντιες τιμές του ποντικιού: f=mousex.kr1,50; i=sinosc.ar175, mul:0.1; e=env.new[0,1,0.9,0], [0.05,0.45, 0.5],[-5,0,-5]; k=impulse.krf; a=envgen.kre,gate:k,timescale:1/f; i * a // Το ίδιο με πριν, αλλά με τυχαίες συχνότητες μεταξύ 50-1000Hz, που αλλάζουν με την ίδια συχνότητα 4φορές/δευτερόλεπτο k=lfdnoise1.kr4,950,50; i=sinosc.ark, mul:0.1; e=env.perc0, 1; k=impulse.kr4; a=envgen.kre,gate:k; i * a // Το ίδιο με πριν, αλλά με τυχαίο panning, που αλλάζει επίσης με την ίδια συχνότητα 4φορές/δευτερόλεπτο p=lfdnoise1.kr4,1; k=lfdnoise1.kr4,950,50; i=sinosc.ark, mul:0.1; e=env.perc0, 1; k=impulse.kr2; a=envgen.kre,gate:k; i * a * [p,1-p] // Όλα τα παραπάνω είναι προτιμότερο να μπουν σε SynthDef...: SynthDef"mine", arg sfreq=1000,pulse=4; p=lfdnoise1.krpulse,1; i=sinosc.arp*sfreq, mul:0.1; e=env.perc0, 1; k=impulse.kr0.5*pulse; a=envgen.kre,gate:k; o=envgen.krenv.linen1, 2, 3, 0.6,doneAction:2; Out.ar0,i * a * o * [p,1-p] }.sends; x=synth.new"mine"; y=synth.new"mine",[\sfreq,320,\pulse,9]; x.free; y.free; /*--------------RESONZ FILTER-------------- // Με Dust2: Resonz.arDust2.ar5, 300, 0.001, 100 + Resonz.arDust2.ar5, 600, 0.001, 100 + Resonz.arDust2.ar5, 900, 0.001, 100 * 3.reciprocal}.play // Τhis is equivalent to the previous: n = 3; // 99 f = 300; Mix.filln, arg i ; Resonz.arDust2.ar5, f * i+1, 0.001, 100 * n.reciprocal} }.play // borrowed from Chapter 3, The SC Book, MIT Press // Με WhiteNoise: i=impulse.ar5*whitenoise.arenvgen.krenv.perc0.05, 1, 1, -4; Resonz.ari, 300, 0.001, 100 + Resonz.ari, 600, 0.001, 100 +

Resonz.ari, 900, 0.001, 100 * 3.reciprocal}.play i=whitenoise.arenvgen.krenv.perc0.05, 1, 1, -4; Resonz.ari, 300, 0.001, 100 + Resonz.ari, 312, 0.001, 100* 2.reciprocal}.play i=whitenoise.arenvgen.krenv.perc0.05, 1, 1, -4,gate:Impulse.ar5; Resonz.ari, 300, 0.001, 100 + Resonz.ari, 312, 0.001, 100 + Resonz.ari, 600, 0.001, 100 + Resonz.ari, 608, 0.001, 100 + Resonz.ari, 900, 0.001, 100 + Resonz.ari, 905, 0.001, 100 * 6.reciprocal}.play n=6; f=300; j=whitenoise.arenvgen.krenv.perc0.05, 1, 1, -4,gate:Impulse.ar5; Mix.filln, arg i; Resonz.arj, f+2*i*i+1, 0.001, 100*n.reciprocal} /*-------------------ROYTINES------------------- // Αυτά δεν προλάβαμε να τα δείξουμε, αλλά για όποιον ενδιαφέρεται... 10.do arg a; a = a + 1; a.reciprocal.postln }; var func, arr, ffreq=100; SynthDef"example3", arg sfreq=ffreq,pulse=4; p=lfdnoise1.krpulse,1; i=sinosc.arp*sfreq, mul:0.1; e=env.perc0, 1; k=impulse.kr0.5*pulse; a=envgen.kre,gate:k; o=envgen.krenv.n1, 2, 3, 0.6,doneAction:2; Out.ar0,i * a * o * [p,1-p] }.sends; func = arg fores; var pitch; Routine.new fores.do arg fores, index, fr; fr=fores*index+1*ffreq; fr.postln; Synth.new"example3", [\sfreq, fr, \dur, 1]; "-----------------".postln; 6.6.wait; }; }; }; arr = 1,3..11; //Θα μπορούσαμε να το γράψουμε και έτσι: // arr = [ 1, 3, 5, 7, 9, 11]; func.valuearr.play;

// Σημείωση: // Δίνοντας στις fores έναν πίνακα, η επανάληψη εκτελείται όσο είναι το μέγεθος του πίνακα, ενώ το περιεχόμενό του χρησιμοποιείται εκεί που έχουμε δώσει την παράμετρο όρισμα fores, αφού το fores παίρνει την τιμή του arr που έχει δοθεί ως όρισμα μέσα στο func.value. Ουσιαστικά, αυτό που κάνουμε είναι ότι τοποθετούμε μια ρουτίνα μέσα σε μια συνάρτηση, έτσι ώστε να μπορούμε να έχουμε wait λόγω της ρουτίνας δεν υπάρχει η δυνατότητα αυτή στη συνάρτηση και χρήση ορισμάτων λόγω της συνάρτησης δεν υπάρχει απ'αυθείας στη ρουτίνα. Δίνοντας το ίδιο ή διαφορετικό όνομα στα ορίσματα της ρουτίνας και της συνάρτησης, περνάμε με τη μέθοδο value τιμές μέσω της συνάρτησης στη ρουτίνα. Στο wait έχω δώσει τιμή 6.6sec, γιατί τόσο διαρκεί η περιβάλλουσα του Synth. // Σημείωση: // Εδώ η συχνότητα αλλάζει σε κάθε instance του Synth. var func, arr, ffreq=100, ttime=1; SynthDef"example3", arg sfreq=ffreq,pulse=4,stime=ttime; p=lfdnoise1.krpulse,1; i=sinosc.arp*sfreq, mul:0.1; e=env.perc0, 1; k=impulse.kr0.5*pulse; a=envgen.kre,gate:k; o=envgen.krenv.linen1, 2, 3, 0.6,timeScale:stime,doneAction:2; Out.ar0,i * a * o * [p,1-p] }.sends; func = arg fores; var pitch; Routine.new fores.do arg fores, index, fr; fr=fores*index+1*ffreq; fr.postln; ttime=fores; Synth.new"example3", [\sfreq, fr, \stime, ttime]; "-----------------".postln; ttime.postln; ttime.wait; }; }; }; arr = 1,3..11; //Θα μπορούσαμε να το γράψουμε και έτσι: // arr = [ 1, 3, 5, 7, 9, 11]; func.valuearr.play; var func, arr, ffreq=200, ttime=1; SynthDef"example3", arg sfreq=ffreq,pulse=4,stime=ttime; p=lfdnoise1.krpulse,1; i=sinosc.arp*sfreq, mul:0.1; e=env.perc0, 1; k=impulse.kr0.5*pulse; a=envgen.kre,gate:k; o=envgen.krenv.linen0.1, 0.25, 0.6, 0.05,timeScale:stime,doneAction:2; Out.ar0,i * a * o * [p,1-p] }.sends; func = arg fores; var pitch; Routine.new fores.do arg fores, index, fr, dur; "-------".post; index+1.post; "o----------".postln; fr=fores*index+1*ffreq; "freqeuncy: ".post;fr.post;" Hz".postln; ttime=10.rand+1;

"duration: ".post;ttime.post;" sec".postln; Synth.new"example3", [\sfreq, fr, \stime, ttime, \pulse, 100/ttime]; 0.5*ttime.wait; }; }; }; arr = 1,3..9; //Θα μπορούσαμε να το γράψουμε και έτσι: // arr = [ 1, 3, 5, 7, 9, 11]; func.valuearr.play; // Άλλο παράδειγμα ρουτίνας απλώς καθυστέρηση διαδικασιών // Next we combine all the above using a Routine just for fun ~myroutine = Routine n = 10; f = 150; FreeVerb.arMix.filln, arg i ; Resonz.arDust2.ar2, f * i+1, 0.001, 100 * n.reciprocal}, 0.5, 0.5, 0.5, 7.dup; 4.wait; SinOsc.ar75, mul:0.1.tanh * EnvGen.krEnv.perc0, 1, gate: Impulse.kr4 SinOsc.ar150, mul:0.1 * EnvGen.krEnv.perc0, 1, gate: Impulse.kr1}.plays,1}.defer0.01; 4.wait; SinOsc.ar75*1.5, mul:0.1.tanh * EnvGen.krEnv.perc0, 2, gate: Impulse.kr1}.play}.defer0.1; 4.wait; Pan2.arHPF.arPinkNoise.ar0.5 * EnvGen.krEnv.perc0, 0.01, gate: Impulse.kr8, 10000, TChoose.krImpulse.kr8, [-1,1] }; ~myroutine.play; // play the routine /* ================================================================ /* ====================ΠΡΟΣΘΕΤΑ, ΕΚΤΟΣ ΥΛΗΣ======================= /* ================================================================ /* ====================== MICROPHONE INPUT ========================== // Using a Microphone with SoundIn Το SoundIn μας επιτρέπει να πάρουμε το σήμα από κάποια είσοδο της κάρτας ήχου του υπολογιστή. - > SoundIn.arbus, mul, add // το bus καθορίζει την είσοδο ή τις εισόδους από της οποίες θα διαβάσουμε, 0 είναι η πρώτη είσοδος της κάρτας ήχου. // χρησιμοποιείστε το built-in μικρόφωνο, φορέστε ακουστικά για να αποφύγετε το feedback SynthDef"input0", var sig; sig = SoundIn.ar0; Out.ar0, sig; }.sends; x = Synth"input0"; s.meter // για να δείτε ποιες εισόδους & εξόδους χρησιμοποιείτε κάθε φορά x.free;

/* ======================= SAMPLE =========================== // ΑΝΑΠΑΡΑΓΩΓΗ ΗΧΗΤΙΚΟΥ ΔΕΙΓΜΑΤΟΣ /*Το πρώτο όρισμα του PlayBuf είναι ο αριθμός των καναλιών του αρχείου που έχουμε φορτώσει στον buffer 2 αν είναι stereo. Το δεύτερο όρισμα είναι ο δείκτης του buffer που θα χρησιμοποιηθεί. Το τρίτο rate καθορίζει την ταχύτητα που θα παίξει το δείγμα 1: η συχνότητα δειγματοληψίας του server, 2: μία οκτάβα πάνω, 0.5 μία οκτάβα κάτω. Το τέταρτο trigger κάνει το PlayBuf να παίξει από το startpos αυτό μπορεί να συμβεί όταν ένα σήμα περάσει από το αρνητικό στο θετικό μέρος. Το πέμπτο startpos δηλώνει ένα sample frame από το οποίο αρχίζει να παίζει Το έκτο loop λουπάρει το αρχείο 1==true, 0==false // Ενός καναλιού για μονοφωνικό b = Buffer.reads, "sounds/bahauddin_l.wav"; // φορτώνει ένα αρχείο που βρίσκεται μέσα στο φάκελο sounds του SC. SynthDef"playBuf1", arg out = 0, bufnum = 0, rate = 1, amp=0.6; Out.arout, amp * PlayBuf.ar1, bufnum, rate, loop:1 }.sends; c=synth"playbuf1",[\bufnum,b, \rate,0.5]; // παίζει στην ταχύτητα δειγματοληψίας του server. c.set\rate,0.5 // οκτάβα πάνω c.set\rate,1.5 // πέμπτη καθαρή πάνω c.free; // ελευθερώνει το Synth // Δύο καναλιών για στερεοφωνία d = Buffer.reads, "sounds/kaz.wav"; // φορτώνει ένα αρχείο που βρίσκεται μέσα στο φάκελο sounds του SC. SynthDef"playBuf1", arg out = 0, bufnum = 0, rate = 1, amp=0.6; Out.arout, amp * PlayBuf.ar2, bufnum, rate, loop:1 }.sends; e=synth"playbuf1",[\bufnum,b, \rate,0.5]; // παίζει στην ταχύτητα δειγματοληψίας του server. e.set\rate,0.5 // οκτάβα πάνω e.set\rate,1.5 // πέμπτη καθαρή πάνω e.free; // ελευθερώνει το Synth