Ηχοποίηση σε πραγματικό χρόνο

From Soundscapes
Revision as of 20:29, 1 April 2026 by Petros Stergiopoulos (talk | contribs) (Created page with "Ο ήχος που παράγει το ηχείο (βουζέρ) του micro:bit έχει μικρή ισχύ και δεν αναπαράγει χαμηλές συχνότητες. Το micro:bit έχει επίσης πολύ περιορισμένη ικανότητα να παράγει ταυτόχρονα πολλαπλούς ήχους και ήχους με πιο σύνθετα ηχοχρώματα. Στο τελευταίο παράδειγμα, χρησιμο...")
Jump to navigation Jump to search

Η ηχοποίηση σε πραγματικό χρόνο είναι μια συναρπαστική τεχνική που μπορεί να ενισχύσει σημαντικά τη συμμετοχή των μαθητών στους τομείς STEAM. Η ηχοποίηση σε πραγματικό χρόνο σημαίνει ότι, λόγω της ταχύτητας της διαδικασίας, δεν μπορούμε να αντιληφθούμε το χρονικό διάστημα που μεσολαβεί μεταξύ της συλλογής των δεδομένων και της αντίστοιχης ήχου που παράγεται από τη συσκευή ηχοποίησης. Επιπλέον, οι μέθοδοι δημιουργίας ηχητικών αναπαραστάσεων των δεδομένων καθορίζονται ταυτόχρονα με τη συλλογή των δεδομένων (σε «πραγματικό χρόνο»).

Πριν ξεκινήσουμε, θέλουμε να τονίσουμε ότι η ποιότητα του ήχου, η οποία είναι υποκειμενική και επομένως εξαρτάται από το γούστο του χρήστη, πρέπει να είναι τέτοια ώστε τουλάχιστον να μην ενοχλεί τον χρήστη. Αντίθετα, θα είναι καλύτερα, αν είναι αρκετά ελκυστική ώστε να προσελκύει την προσοχή τού χρήστη. Από την άλλη πλευρά, όταν προσπαθούμε να κάνουμε κάτι «ευχάριστο», υπάρχει ο κίνδυνος να δημιουργηθούν ηχητικά αποτελέσματα που δεν εκπληρώνουν τον στόχο της καλής περιγραφής της συμπεριφοράς των δεδομένων εισόδου. Είναι επομένως απαραίτητο να βρεθεί ένας συμβιβασμός: ο ήχος πρέπει να είναι αρκετά ευχάριστος, αλλά και πλήρως ενημερωτικός.

Συσκευές Ηχοποίησης σε πραγματικό χρόνο

View of the micro:bit on the both sides
Ο μικροελεγκτής BBC micro:bit

Για τη δημιουργία μιας συσκευής ηχοποίησης σε πραγματικό χρόνο, είναι χρήσιμο να χρησιμοποιηθεί ένας μικροελεγκτής. Αυτοί είναι σαν «μικροί και απλοί υπολογιστές» με μία μόνο μονάδα επεξεργαστή. Ωστόσο, δεν είναι υπολογιστές. Η αρχιτεκτονική τους είναι πολύ απλούστερη και δεν μπορούν να εκτελέσουν λειτουργικό σύστημα. Παρ’ όλα αυτά, μπορούν να προγραμματιστούν ώστε να εκτελούν ένα μόνο πρόγραμμα κάθε φορά, το οποίο μπορεί να εκτελεί πολλαπλές εργασίες, αλλά διαδοχικά, σύμφωνα με τη σειρά των εντολών που αναφέρονται στο πρόγραμμα. Υπάρχουν διάφοροι τύποι μικροελεγκτών, με τον Arduino (arduino.cc) να είναι ο πιο δημοφιλής.

Αρχικά, το έργο SoundScapes προτείνει τη χρήση του μικροελεγκτή BBC micro:bit. Αυτό το εργαλείο είναι πολύ απλό στη χρήση, ευέλικτο και περιλαμβάνει διάφορους ενσωματωμένους αισθητήρες έτοιμους προς χρήση, εξαλείφοντας την ανάγκη κατασκευής ενός συγκεκριμένου ηλεκτρικού κυκλώματος για τη λειτουργία του. Το micro:bit μπορεί να προγραμματιστεί διαδικτυακά με το Makecode (χρησιμοποιώντας τον πλοηγό Chrome browser για καλύτερη συμβατότητα) σε python, javascript ή μπλοκς.

Ηχοποίηση με micro:bit

Πριν ξεκινήσετε την ηχοποίηση με το micro:bit, πρέπει πρώτα να εξοικειωθείτε με το περιβάλλον προγραμματισμού Makecode. Στην κεντρική σελίδα υπάρχουν διάφορα εκπαιδευτικά βίντεο, όπως το «Flashing Heart», το «Name Tag» κ.λπ., από τα οποία μπορείτε να επιλέξετε για να ξεκινήσετε. Εάν εγγραφείτε στην πλατφόρμα, τα έργα σας θα αποθηκευτούν στον λογαριασμό σας και θα μπορείτε να έχετε πρόσβαση σε αυτά από οποιαδήποτε συσκευή, αρκεί να συνδεθείτε. Διαφορετικά, αποθηκεύονται ούτως ή άλλως ως cookies, ωστόσο, μπορεί να τα χάσετε εάν καθαρίσετε την προσωρινή μνήμη του προγράμματος περιήγησής σας.

Έννοιες ήχου στο micro:bit

Στον επεξεργαστή Makecode, Makecode editor, υπάρχει μια χρήσιμη και ελκυστική βιβλιοθήκη αφιερωμένη στη μουσική, ειδικά για νεαρούς μαθητές. Αυτή η μουσική βιβλιοθήκη music library προσφέρει διάφορα μπλοκς που διευκολύνουν τη δημιουργία ήχων και μελωδιών. Υπάρχουν πολλά μπλοκς και συνδυασμοί μπλοκς που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε διαφορετικά είδη ήχων. Εδώ σας παρουσιάζουμε τα πιο βασικά μπλοκς και προχωράμε σε πιο σύνθετα παραδείγματα. Είναι μια καλή άσκηση να πειραματιστείτε με τα διαφορετικά μπλοκς και να ακούσετε τι συμβαίνει για να εξοικειωθείτε μαζί τους.

Δημιουργία ενός μεμονωμένου ήχου=

Δημιουργία ενός μεμονωμένου ήχου

Ο παρακάτω κώδικας δημιουργεί έναν μεμονωμένο ήχο με προκαθορισμένη συχνότητα «Μεσαίο Ντο» και διάρκεια 1 κτύπου όταν πατηθεί το κουμπί Α, ή έναν συνεχή ήχο «Μεσαίο Μι» όταν πατηθεί το κουμπί Β. Είναι δυνατό να αλλάξετε τη συχνότητα των τόνων, κάνοντας κλικ στα λευκά πεδία εισαγωγής με τις τιμές «Μεσαίο Ντο» και «Μεσαίο Μι». Από τα βέλη του αναπτυσσόμενου μενού, είναι επίσης δυνατό να αλλάξετε τη διάρκεια του παλμού του «Μεσαίου Ντο» καθώς και το αν ο ήχος θα αναπαραχθεί διαδοχικά με άλλα μπλοκς, στο παρασκήνιο ή σε επανάληψη. [Note 1].

Αναπαραγωγή μελωδίας

Για να αναπαράγετε μια μελωδία, χρησιμοποιήστε το παρακάτω σύστημα και κάντε κλικ πάνω του για να δημιουργήσετε τη μελωδία:

alt=Play melody block
alt=Play melody block

To παρακάτω παράδειγμα κώδικα αναπαράγει δύο μελωδίες με διαφορετικές τιμές χτύπων ανά λεπτό για τα κουμπιά A και B και σταματά όλους τους ήχους όταν πατηθούν ταυτόχρονα τα κουμπιά A και B. Μπορείτε να αλλάξετε τις μελωδίες κάνοντας κλικ στα λευκά πεδία εισαγωγής με τις πολύχρωμες μουσικές νότες. Όπως και στο προηγούμενο παράδειγμα, μπορείτε επίσης να αλλάξετε τη διάρκεια του ρυθμού και να ορίσετε αν ο ήχος θα αναπαραχθεί διαδοχικά με άλλα μπλοκς, στο παρασκήνιο ή σε επανάληψη.[Note 1]

Επεξεργασία της μεταβολής της συχνότητας, της κυματομορφής, της έντασης και της διάρκειας

Είναι επίσης δυνατό να δημιουργηθούν πιο σύνθετοι ήχοι μέσω της επεξεργασίας της μεταβολής της συχνότητας, της κυματομορφής, της έντασης και της διάρκειας με το ακόλουθο σύστημα:

alt=Complex sounds block
alt=Complex sounds block

Το παρακάτω παράδειγμα αναπαράγει δύο σύνθετους ήχους διαδοχικά, χωρίς διακοπή [Note 1]:

Ηχοποίηση μιας λογικής τιμής

Στην επιστήμη των υπολογιστών, ο τύπος δεδομένων Bool, ή λογικής, είναι μια θεμελιώδης πρωτότυπη τιμή που μπορεί να λάβει μία από τις δύο πιθανές τιμές: αληθής ή ψευδής, που συχνά αναπαρίστανται ως 1 ή 0. Για να απεικονίσουμε αυτή την έννοια, θα μετατρέψουμε σε ήχο τον απλούστερο τύπο δεδομένων, δεδομένων λογικής (του Bool). Συνηθισμένα παραδείγματα αισθητήρων που παράγουν λογικά δεδομένα περιλαμβάνουν αισθητήρες παρουσίας, αισθητήρες επαφής, διακόπτες και κουμπιά.

Το παρακάτω υλοποιεί τη μετατροπή ενός αισθητήρα Bool σε ήχο χρησιμοποιώντας το micro:Bit, εστιάζοντας συγκεκριμένα στο κουμπί Α. Όταν πατηθεί το κουμπί, θα ακούσουμε τη νότα Ντο, και όταν απελευθερωθεί, η νότα θα αλλάξει σε Φα. Αυτή η ακουστική ανατροφοδότηση παρέχει μια σαφή αναπαράσταση της κατάστασης του κουμπιού, ενισχύοντας την κατανόησή μας για τα δεδομένα Bool σε ένα πρακτικό πλαίσιο.[Note 1].

Λεπτομερής εξήγηση του κώδικα:

Τα μπλοκς αξιολογούνται διαδοχικά από πάνω προς τα κάτω μέσα στον βρόγχο «για πάντα», το οποίο επαναλαμβάνει την ακόλουθη ακολουθία αξιολόγησης έως ότου κάτι διακόψει το πρόγραμμα:

  1. Ορίστε τη μεταβλητή X στην κατάσταση του κουμπιού (αληθής ή ψευδής ανάλογα με το αν το ροζ κουμπί Α είναι πατημένο κατά τη στιγμή της επικύρωσης)
  2. Εάν η μεταβλητή/συνθήκη X δηλώνει το αληθές (το κουμπί είναι πατημένο), ήχος κλήσης (Hz), Μεσαίο Ντο, αλλιώς, ήχος κλήσης (Hz), Μεσαίο Μι

Ηχοποίηση εύρους τιμών (με αισθητήρες εισόδου)

Οι περισσότεροι αισθητήρες παρέχουν ένα εύρος τιμών, όχι μόνο 0 ή 1, οπότε πρέπει πρώτα να προσδιορίσουμε ποιές είναι οι χαμηλότερες και οι υψηλότερες πιθανές τιμές πριν ορίσουμε την αντιστοίχιση για τη μετατροπή σε ήχο. Αυτή η μεταβλητή είσοδος από τον αισθητήρα μπορεί να προέρχεται από τον αισθητήρα φωτεινότητας, το επιταχυνσιόμετρο, το μαγνητόμετρο, την ένταση του ήχου που καταγράφεται από το μικρόφωνο ή άλλους αισθητήρες που είναι συνδεδεμένοι στο micro:bit μέσω των ακίδων. Αυτά τα δεδομένα μπορούν εύκολα να συλλεχθούν από τον μικροελεγκτή.

Αλλαγή τόνου με σταθερό ρυθμό

Σε αυτό το παράδειγμα, δείχνουμε πώς να αντιστοιχίσουμε το επίπεδο φωτός σε ένα εύρος συχνοτήτων. Ο εσωτερικός αισθητήρας φωτός του micro:bit παρέχει μια τιμή μεταξύ 0 (σκοτεινό) και 255 (πολύ φωτεινό). Ονομάζουμε αυτή τη μεταβλητή εισόδου x. Ορίζουμε επίσης τις μεταβλητές x-Min και x-Max με τις ελάχιστες και μέγιστες τιμές του αισθητήρα μας. Με σκοπό την ηχοποίηση του μετρημένου επιπέδου φωτός, θα αντιστοιχίσουμε την τιμή του επιπέδου φωτός σε ένα ύψος μεταξύ 200 Hz (ελάχιστη τιμή) και 2000 Hz (μέγιστη τιμή), που παίζεται με σταθερό ρυθμό. [Note 1].

Λεπτομερής εξήγηση του κώδικα:

Τα μπλοκ που βρίσκονται μέσα στο μπλοκ «κατά την έναρξη» εκτελούνται διαδοχικά πριν από οτιδήποτε άλλο στο πρόγραμμα, όταν ενεργοποιείται το micro:bit.

  1. Ορίστε τη μεταβλητή x-Min στην χαμηλότερη δυνατή τιμή μέτρησης του επιπέδου φωτισμού, δηλαδή στο 0.
  2. Ορίστε τη μεταβλητή x-Max στην υψηλότερη δυνατή τιμή μέτρησης του επιπέδου φωτισμού, δηλαδή στο 255.

Τα μπλοκ μέσα στο μπλοκ «για πάντα» αξιολογούνται διαδοχικά σε έναν βρόχο από πάνω προς τα κάτω μετά την ακολουθία «κατά την έναρξη»:

  1. Ορίστε τη μεταβλητή x στο μετρημένο επίπεδο φωτός
  2. Παίξτε έναν ήχο ενός 1 χτύπου με συχνότητα που προκύπτει από την αντιστοίχιση της τιμής x (στο εύρος x-Min έως x-Max) στο επιλεγμένο εύρος συχνοτήτων στο μπλοκ «map».

Αλλαγή ρυθμού με σταθερό τόνο

Μια άλλη επιλογή είναι να διατηρηθεί ένας σταθερός τόνος ενώ μεταβάλλεται ο ρυθμός με βάση το επίπεδο φωτός. Αυτό μπορεί να επιτευχθεί παίζοντας μια νότα μικρής διάρκειας και εισάγοντας παύσεις που ποικίλλουν σε μήκος, κυμαινόμενες από 1000 ms (για συνθήκες σκοταδιού) έως 20 ms (για πολύ φωτεινές συνθήκες). Αυτή η προσέγγιση επιτρέπει μια δυναμική ακουστική αναπαράσταση των μεταβαλλόμενων επιπέδων φωτός.[Note 1]

Λεπτομερής εξήγηση του κώδικα:

Τα μπλοκ που βρίσκονται μέσα στο μπλοκ «κατά την έναρξη» εκτελούνται διαδοχικά πριν από οτιδήποτε άλλο στο πρόγραμμα, όταν ενεργοποιείται το micro:bit.

  1. Ορίστε τη μεταβλητή x-Min στην χαμηλότερη δυνατή τιμή μέτρησης του επιπέδου φωτός, δηλαδή στο 0.
  2. Ορίστε τη μεταβλητή x-Max στην υψηλότερη δυνατή τιμή μέτρησης του επιπέδου φωτός, δηλαδή στο 255.

Τα μπλοκ μέσα στο μπλοκ «για πάντα» αξιολογούνται διαδοχικά σε έναν βρόχο από πάνω προς τα κάτω μετά την ακολουθία «κατά την έναρξη»:

  1. Ορίστε τη μεταβλητή x στο μετρημένο επίπεδο φωτός.
  2. Παίξτε έναν ήχο Υψηλού Ρε ενός 1 χτύπου.
  3. Κάντε παύση για ένα διάστημα που υπολογίζεται από την αντιστοίχιση της τιμής x (στο εύρος x-Min έως x-Max) στο επιλεγμένο εύρος χρόνου στο μπλοκ «map».

Υπενθύμιση: Μπορείτε να αντικαταστήσετε το μπλοκ εισόδου στάθμης φωτός (input block) με οποιοδήποτε άλλο μπλοκ εισόδου αισθητήρα micro:bit input block (ή οποιουσδήποτε άλλους αισθητήρες συνδεδεμένους στο micro:bit μέσω των ακίδων) που παρέχει ένα εύρος τιμών. Απλά φροντίστε να επαναπροσδιορίσετε τις τιμές x-Min και x-Max αναλόγως, καθώς το επιταχυνσιόμετρο accelerometer και ο προσανατολισμός της πυξίδας compass, για παράδειγμα, λειτουργούν σε διαφορετικό εύρος.

Χρήση εξωτερικών αισθητήρων εισόδου

Για να χρησιμοποιήσετε έναν εξωτερικό ψηφιακό/αναλογικό αισθητήρα σε μια ακίδα micro ή χρησιμοποιώντας, για παράδειγμα, το πρωτόκολλο I2C (όλα αυτά τα μπλοκ βρίσκονται στις κατηγορίες για προχωρημένους), μπορείτε να χρησιμοποιήσετε τα ίδια προγράμματα, αλλά απλά αντικαταστήστε το μπλοκ εισόδου στάθμης φωτός με το αντίστοιχο μπλοκ ως εξής:

Digital read pin
Digital read pin
Analog read pin
Analog read pin
i2c
i2c

Προσοχή στον αριθμό ακίδας ή στη διεύθυνση i2c!

Πολλαπλές είσοδοι αντιστοιχισμένες σε έναν μόνο ήχο

Τα συστήματα ηχοποίησης συχνά χρησιμεύουν για την παροχή περισσότερων από μία πληροφοριών. Μπορούμε να αντιστοιχίσουμε τόσες μεταβλητές όσες είναι οι ηχητικές παράμετροι που μπορούμε να ελέγξουμε. Αρκεί ο ήχος να μην γίνεται δυσνόητος λόγω των πολλαπλών ηχητικών στρωμάτων που αναπαράγονται ταυτόχρονα. Αν λάβουμε υπόψη ότι μια φιλαρμονική ορχήστρα μπορεί να έχει πάνω από εκατό μέλη, διαθέτουμε κάποιο περιθώριο για την επικάλυψη αρκετών ήχων. Αντιθέτως στα οπτικά ερεθίσματα δεν μπορούμε να υπερβούμε έναν ορισμένο αριθμό, συνήθως μικρότερο από αυτόν των ηχητικών ερεθισμάτων. Τέλος, όπως και στην ορχήστρα, οι ήχοι πρέπει να συνδυάζονται προσεκτικά μεταξύ τους σε περίπτωση μεγάλου αριθμού.

Το παρακάτω ηχοποιeί το επίπεδο φωτός που αντιστοιχεί στο τονικό ύψος με μια παύση που ορίζεται από τον προσανατολισμό της πυξίδας που αντιστοιχεί σε χιλιοστά του δευτερολέπτου.[Note 1].

Η επέκταση ηχοποίησης SoundScapes για το micro:bit

Σε όλα τα προηγούμενα παραδείγματα, οι αριθμοί αντιστοιχίζονταν σε ένα συνεχές φάσμα συχνοτήτων, κάτι που είναι υπέροχο! Αλλά ακούγεται ελκυστικό; Για να βελτιώσετε την ακουστική εμπειρία, μπορείτε να αντιστοιχίσετε τους αριθμούς σε μια μουσική κλίμακα. Η επέκταση ηχοποίησης του SoundScapes for MakeCode micro:bit (SoundScapes) καθιστά αυτόν τον τύπο αντιστοίχισης εύκολο και προσιτό.

Ακολουθεί η διαδικασία εγκατάστασης της επέκτασης:

Install datalogger extension
Install datalogger extension

Αντιστοίχιση και αναπαραγωγή δεδομένων απευθείας από έναν αισθητήρα micro:bit

Για να αντιστοιχίσετε και να αναπαράγετε δεδομένα απευθείας από έναν αισθητήρα micro:bit, μπορείτε να χρησιμοποιήσετε το παρακάτω μπλοκ, το οποίο διαθέτει ένα αναπτυσσόμενο μενού για την επιλογή του αισθητήρα. Το εύρος εισόδου επιλέγεται αυτόματα ώστε να αντιστοιχεί στις ελάχιστες και μέγιστες τιμές που μπορούν να ληφθούν από τους αισθητήρες του micro:bit.

Αν και η σκληρή δουλειά γίνεται στα παρασκήνια, αυτό καθιστά για εσάς μεγαλύτερη πρόκληση να καινοτομήσετε στον τομέα της ηχοποίησης :)

Αυτό το παράδειγμα είναι ισοδύναμο με το παράδειγμα ηχοποίησης σε πραγματικό χρόνο που χρησιμοποιεί τη συνάρτηση χαρτογράφησης ηχοποίησης για μία τιμή, όπως ακολουθεί.

Αντιστοίχιση και αναπαραγωγή μιας μεμονωμένης τιμής σε μουσική κλίμακα

Η συνάρτηση χαρτογράφησης επιστρέφει έναν ακέραιο αριθμό από την αντιστοίχιση ενός αριθμού σε ένα συγκεκριμένο εύρος [χαμηλό, υψηλό] σε μια καθορισμένη μουσική κλίμακα, σε έναν καθορισμένο αριθμό οκτάβων. Για παράδειγμα, το ακόλουθο παράδειγμα αντιστοιχίζει την τιμή του επιπέδου φωτισμού στο εύρος [0,255] στη Μεσαία Ντο Μείζονα σε μία οκτάβα και την αναπαράγει για 500 ms επ' αόριστον:

Μπορούν επίσης να χρησιμοποιηθούν και άλλοι αισθητήρες (συμπεριλαμβανομένων εξωτερικών αισθητήρων που συνδέονται μέσω ακίδων στο micro:bit) καθώς και διαφορετικά εύρη εισόδου. Αυτό είναι χρήσιμο για την ηχοποίηση σε πραγματικό χρόνο, όταν ηχοποιείτε τα δεδομένα την ίδια στιγμή που τα συλλέγετε.

Για παράδειγμα, το παρακάτω παράδειγμα αντιστοιχίζει την τιμή της έντασης φωτός στο εύρος [0,255] στη Μεσαία Ντο Μείζονα σε μία οκτάβα και την αναπαράγει για 500 ms συνεχώς:

Μπορούν επίσης να χρησιμοποιηθούν και άλλοι αισθητήρες (συμπεριλαμβανομένων εξωτερικών αισθητήρων που συνδέονται μέσω ακίδων στο micro:bit) καθώς και διαφορετικά εύρη εισόδου. Αυτό είναι χρήσιμο για την ηχοποίηση σε πραγματικό χρόνο, όταν ηχοποιείτε τα δεδομένα την ίδια στιγμή που τα συλλέγετε.

Αντιστοίχιση και αναπαραγωγή σε προσαρμοσμένη κλίμακα

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

Για παράδειγμα, το παρακάτω αντιστοιχίζει την τιμή του επιπέδου φωτός στο εύρος [0,255] στην αρμονική του μεσαίου Ντο σε μία οκτάβα και την αναπαράγει για 500 ms:

όπου το "Αρμονικό" (harmonic) είναι ένας πίνακας αριθμών που περιέχει τις αναλογίες συχνοτήτων της αρμονικής κλίμακας. Δεδομένου ότι κάθε νότα στην αρμονική κλίμακα απέχει ακριβώς μία οκτάβα από την προηγούμενη, η αλλαγή του αριθμού της οκτάβας σε αυτή τη συγκεκριμένη περίπτωση θα επεκτείνει απλώς το εύρος της αρμονικής σειράς.

Ηχοποίηση με MIDI (το micro:bit ως όργανο MIDI)

Ο ήχος που παράγει το ηχείο (βουζέρ) του micro:bit έχει μικρή ισχύ και δεν αναπαράγει χαμηλές συχνότητες. Το micro:bit έχει επίσης πολύ περιορισμένη ικανότητα να παράγει ταυτόχρονα πολλαπλούς ήχους και ήχους με πιο σύνθετα ηχοχρώματα. Στο τελευταίο παράδειγμα, χρησιμοποιήσαμε ένα «τέχνασμα» για να μετατρέψουμε σε ήχο τις τιμές πολλαπλών εισόδων. Χρησιμοποιήσαμε την παύση (διάρκεια σιωπής μεταξύ διαδοχικών ήχων) ως έξοδο ηχοποίησης. Έξυπνο, αλλά αυτό που θα μας άρεσε πραγματικά θα ήταν η ταυτόχρονη αναπαραγωγή πολλών ήχων που θα εξέφραζαν διάφορα επίπεδα δεδομένων. Μπορούμε να επιτύχουμε καλύτερη ποιότητα ήχου και να παίζουμε περισσότερα όργανα ταυτόχρονα χρησιμοποιώντας το πρωτόκολλο MIDI.

MIDI is a protocol that facilitates real-time communication between electronic musical instruments. MIDI stands for Musical Instrument Digital Interface and it was developed in the early ’80s for storing, editing, processing, and reproducing sequences of digital events connected to sound-producing electronic instruments, especially those using the 88-note chromatic compass of a piano-keyboard. We can roughly, but easily, understand MIDI as the advanced successor of the “piano rolls”, which, more than a century ago, were perforated papers or pinned cylinders, in which music performances were either recorded (in real-time) or notated (in step time). These paper-rolls were then played automatically by specially designed mechanical instruments, the mechanical pianos (pianolas) or music machines, using them as their “program”.

Setup the MIDI

The following video explains in detail how to connect the micro:bit to your DAW (Digital Audio Workstation) or digital synthesizer through MIDI on Windows:


Step-by-step instructions (see the video):

  1. Install the MIDI Extension for Makecode.
  2. Create a very basic program using the MIDI extension to test your setup.
  3. Install Hairless MIDI, open it, and from serial port drop-down menu select the com port (USB port) to which the micro:bit is connected to.
  4. Install loopMIDI, open it, and click the + button at the bottom-left corner to create a new virtual port.
  5. Go back to the HairlessMIDI window and on the MIDI out drop-down menu select loopMIDI port
  6. You might need to unplug and plug in the micro:bit again for it to work.
  7. You are ready to play!

How it works: The micro:bit sends MIDI messages through serial communication. These messages are then received by Hairless MIDI, which forwards them to LoopMIDI. Acting as a virtual MIDI port, LoopMIDI makes the MIDI messages accessible to computer software/web apps (like DAWs or digital synthesizers) that receive these messages and generate the corresponding sounds, completing the connection.

There are plenty of free (and some open-source, cross-platform) DAW stations like LMMS that you can download and configure to play MIDI input. The easiest method is to play directly from the browser through a web app such as midi.city, the Online Sequencer and many others to discover online. In principle, web apps such as midi.city will readily detect your midi instrument (the micro:bit in this case) and you are ready to play after giving the browser permissions to access your device (which you will be asked to do).

MIDI is a powerful tool for sonification because it allows you to control a wide range of sound parameters, such as pitch, volume, and timbre. This setup allows for multiple Microbits to send MIDI data to a single synthesizer, enabling synchronized sonification of multiple data streams. It also allows a single micro:bit to send MIDI data over multiple MIDI chanels.

Note: On Linux install ttymidi instead of hairlesMIDI and loopMIDI.

Sensor data over MIDI

Previous examples using sensor data can be adapted to send data over MIDI with the Makecode MIDI extension, meaning that the sounds will play not on the micro:bit but through a properly configured computer software/web application. The following example maps the light level to MIDI notes and sends them through MIDI channel 1 [Note 1].

Detailed explanation of the code:

The blocks inside the on start block are evaluated sequentially before anything else in the program when the micro:bit is turned on.

  1. Show a fancy musical note icon on the LED screen just to make it nicer.
  2. Set the Instrument_1 variable to midi channel 1. Thus any changes to the variable Instrument_1 are actions on the MIDI channel 1.
  3. midi use raw serial is what will get the micro:bit to "talk" to the MIDI output device.

The blocks within the block forever are evaluated sequentially in a loop from top to bottom after the on start sequence:

  1. Set the Note variable to a MIDI note by mapping the light level range of possible values to the chosen MIDI range 40 to 85 (within 0 and 128) using the map block.
  2. Set the sound volume of Instrument_1 (on MIDI channel 1) to 100.
  3. Play MIDI note Note (measured light level mapped to MIDI) with Instrument_1 (on MIDI channel 1).
  4. Pause for 250 ms.
  5. Stop playing the MIDI note Note.
  6. Pause for 100 ms.

Using multiple MIDI channels

This example maps the light level to MIDI and uses multiple MIDI channels allowing one to choose to play the notes either with a button or by shaking the micro:bit [Note 1].

Detailed explanation of the code:

The logic behind this example is very similar to the previous one. However, an extra MIDI channel 10 (it could have been any other number between 1 and 16) is set on start as variable Instrument_2. Thus, any changes on this variable are actions on the MIDI channel 10. The mapping of the light level to MIDI is still set within the loop, but the Instrument_1 related blocks and pauses were moved to the input block on button B pressed. The input block on shake just repeats the same code for Instrument_2. Note, that when you play a note, irrespectively of the instrument chosen, a musical note appears and disappears from the LED screen.

Notes

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 Click the button "Simulator" on the top bar to interact with a virtual micro:bit and test the code. You can edit the code by clicking "Edit" on the top-right corner.