Running Status & System Messages Πρωτόκολλα Μουσικής Επικοινωνίας Θεωρία Χρυσούλα Αλεξανδράκη
Running Status Είναι τρόπος συµπίεσης δεδοµένων MIDI Χρησιµοποιείται προκειµένου να απεφευχθούν µεγάλες καθυστερήσεις λόγω συσσώρευσης δεδοµένων που µπορεί να προκληθεί από εκτεταµένη χρήση των continuous controllers Είναι καθήκον του δέκτη να αναγνωρίζει πότε τα δεδοµένα που του έρχονται είναι συµπιεσµένα Κάποιες συσκευές συµπιέζουν µονάχα όταν η πυκνότητα δεδοµένων ξεπεράσει ένα προκαθορισµένο όριο
Τεχνικές που αξιοποιούνται Σε διαδοχικά µηνύµατα µε το ίδιο status byte Στέλνεται µόνο το status byte του πρώτου Το Note Off στέλνεται σα note on µε velocity 0 H µέθοδος χρησιµοποιείται µόνο για channel messages Όπως θα δούµε στη συνέχεια η φύση των system messages είναι τέτοια ώστε να µην µπορούν να συµπιεστούν
Running Status Buffer Πρόκειται για την προσορινή µνήµη στην οποία αποθηκεύεται το status byte. Η διαχείρησή του γίνεται ως εξής: 1. Καθαρισµός buffer όταν ανοίγει η συσκευή 2. Αποθήκευση status byte για κάθε channel msg που καταφθάνει 3. Καθαρισµός buffer όταν φτάνουν system exclusive & system common 4. To buffer παραµένει ανέπαφο µε τα System Realtime 5. Αγνοούνται τα data bytes που φθάνουν όταν το buffer είναι κενό.
Επεξήγηση για System Msg Tα system realtime µηνύµατα αποτελούνται µονάχα από ένα byte το (status), και µπορούν να σταλούν οποτεδήποτε, ακόµα και ανάµεσα σε ένα channel msg άρα δεν έχει νόηµα η αποθήκευση αυτού του byte Τα system common επί της ουσίας αλλάζουν τη ροή ενός sequencer άρα καθαρίζουν το buffer καθώς τα επόµενα channel µηνύµατα δεν απευθύνονται στην ίδια ροή πληροφορίας Τα system exclusive επίσης αλλάζουν σηµαντικά τις ρυθµίσεις του οργάνου κατά συνέπεια δεν έχει νόηµα η επαναχρησιµοποίηση ενός προηγούµενου status
System messages Απευθύνονται σε όλη τη MIDI διασύνδεση κι όχι σε συγκεκριµένο κανάλι Το πρώτο τους ψηφίο είναι πάντα F Χωρίζονται σε τρεις κατηγορίες: System Exclusive (2) F0, F7 System Common (6) F1- F6 System Realtime (8) F8 - FF
System Exclusive F0, F7 (EOX) Πρόκειται για µηνύµατα που απευθύνονται σε εξοπλισµό συγκεκριµένου κατασκευαστή. Τα µηνύµατα αυτά καθώς περνούν από όλη τη MIDI διασύνδεση αγνοούνται από συσκευές διαφορετικών κατασκευαστών Παράδειγµα χρήσης: Έστω ότι υπάρχει ένας συγκεκριµένος ήχος πιάνου σε ένα synthesizer ενός κατασκευαστή και ότι θέλετε να χρησιµοποιήσετε τον ίδιο ήχο σε ένα δεύτερο synth του ίδιου κατασκευαστή. Αντί να περάσετε τις παραµέτρους µία-µία µπορείτε να στείλετε µία λίστα µε τις παραµέτρους του συγκεκριµένου ήχου µέσω ενός sysex µηνύµατος
SysEx - Dumps Η ανταλλαγή λίστας παραµέτρων µέσω µηνύµατος sysex ονοµάζεται System Exclusive Dump ή Parameter Dump Εάν το dump περιέχει παραµέτρους για όλες τις φωνές που βρίσκονται στη µνήµη του synth τότε ονοµάζεται Bulk dump
SysEx Man ID To byte που ακολουθεί το status F0Hex (header), ονοµάζεται manufacturer ID, είναι µοναδικό για κάθε κατασκευαστή MIDI εξοπλισµού και χορηγείται από τον ΜΜΑ και τον JMSC (Japanese MIDI Standards Committee) Π.χ. (για ID > F0 00 και < F0 7D) ΥΑΜΑΗΑ -> F0 43 Casio -> F0 44 Lexicon ->F0 06 Κ.λ.π.
SysEx Man ID F0 00 Λόγω της ευρείας διάδοσης του MIDI to ManID αποτελείται πλέον από 3 bytes εκ των οποίων το πρώτο είναι 00. Τα ManID έχουν διαιρεθεί γεωγραφικά ως εξής: USA: 00 00 01 00 1F 7F Europe + Australia: 00 20 00 00 3F 7F Japan: 00 40 00 00 5F 7F Other areas: 00 60 00 00 7F 7F
Μετά το ManID Τα bytes που ακολουθούν το ManID καθορίζονται πλήρως από τον συγκεκριµένο κατασκευαστή, αρκεί Να είναι µικρότερα του 7F (δηλαδή να είναι data byte) αν έρθει µεγαλύτερο τότε το sysex διακόπτεται) Δεν εφαρµόζεται το running status O running status buffer αδειάζει σε κάθε sysex Πολλοί κατασκευαστές χρησιµοποιούν subids προκειµένου να απευθύνουν µηνύµατα σε συγκεκριµένα µοντέλα ή/και deviceid προκειµένου να απευθυνθούν σε ορισµένες συσκευές (οι οποίες µπορούν να είναι συντονισµένες σε διαφορετικό κανάλι). Άλλωστε µπορούν να έχουν 128 διαφορετικά deviceid ενώ τα κανάλια είναι µόνο 16
Μήκος του sysex Όλα τα sysex µηνύµατα τελειώνουν µε το byte: F7 Hex (EOX) Απαιτείται επειδή τα sysex µηνύµατα δεν έχουν προκαθορισµένο µήκος Όταν ληφθεί το ΕΟΧ όλες οι συσκευές που αγνοούσαν το sysex ξυπνούν
Σηµαντικές εφαρµογές των sysex Πολύ συχνά χρησιµοποιούνται για τον προγραµµατισµό ενός synth από ένα υπολογιστή µέσω λογισµικού (patch editor) Για αυτό τα περισσότερα syth σήµερα έχουν ελάχιστα controls ή και καθόλου controls. Θεωρητικά οποιοσδήποτε µπορεί να επιχειρήσει να στείλει µηνύµατα µε ID άλλου κατασκευαστή Κάθε κατασκευαστής απαιτείται να δηµοσιοποιεί το πλήρες sysex format για κάθε νέα συσκευή, µέσα σε ένα χρόνο από την κυκλοφορία της Αυτό σηµαίνει ότι οποιοσδήποτε µπορεί να γράψει ένα νέο πρόγραµµα ή να εφεύρει ένα νέο controller o οποίος αξιοποιεί τα sysex µηνύµατα οποιασδήποτε συσκευής
Universal System Exclusive Είναι υποκατηγορία των µηνυµάτων sysex µε ειδική χρήση τα οποία στη θέση του ManID έχουν: 7D: Experimental, Non-commercial Για εσωτερική χρήση σε ακαδηµαϊκά ιδρύµατα και ερευνητικά ινστιτούτα, δεν χρησιµοποιούνται από τελικά προϊόντα 7Ε: Non-Real Time Universal Sample Dump Standard, Tuning Standard 7F: Real Time Universal MIDI Timecode, MIDI machine Control, MIDI Show Control Προφανώς κι αυτά τα µηνύµατα τερµατίζονται µε ένα ΕΟΧ (F7)
System Common Λέγονται έτσι γιατί είναι κοινά για όλες τις συσκευές που τα λαµβάνουν Status byte F1 F6 F1 MIDI Time code Quarter Frame 1 data (timecode) F2 Song Position Pointer 2 data (MSB, LSB) F3 - Song Select 1 data (song number) F4 undefined F5 undefined F6 tune request 0 data
MIDI Time Code (MTC) F1 F1 Χρησιµοποιείται γενικότερα για συγχρονισµό πολυµεσικών δεδοµένων και εξοπλισµού και όχι µονάχα για MIDI. Είναι µία εναλλακτική µέθοδος του SMPTE time code συγχρονισµού, η οποία µπορεί να γίνει µέσω MIDI Κάθε SMPTE frame (80bit) αντιστοιχεί σε 4 ΜΤC µηνύµατα Η ταχύτητα fps εξαρτάται από το data format (π.χ. PAL, SECAM) SMPTE time = hh: mm: ss: ff (80 bits) Το data byte του MTC µηνύµατος χρησιµοποιείται για την αποστολή είτε του LSb είτε του MSb για µιά από αυτές τις πληροφορίες (π.χ. Hours) To format του data byte έχει ως εξής 0nnndddd, όπoυ nnn σου λέει τι εκφράζει το dddd (h, m, s, f) Για να σταλεί όλο το SMPTE frame απαιτούνται 8 MTC µηνύµατα, κι εποµένως έχουν εντωµεταξύ περάσει δύο frames
Song Position Pointer F2 Αποστέλλεται προκειµένου να συγχρονιστούν οι συσκευές MIDI στο ίδιο σηµείο µιας µουσικής εκτέλεσης 2 data bytes MSB, LSB αντιστοιχούν σε έναν αριθµό από 0 έως 16,383 ο οποίος ερµηνεύεται από τις συσκευές ως το πλήθος των 16 ων που έχουν παρέλθει από την έναρξη ενός MIDI sequence 11110010 (F2) 0xxxxxxx (LSB) 0yyyyyyy (MSB) Ένα start (realtime) µήνυµα ενεργοποιεί τον SPP που αρχίζει να µετρά, όταν έρθει stop αποθηκεύεται η τιµή αυτή, η οποία συνεχίζει να αυξάνεται µε το continue
Song Select F3 Επιλογή ενός συγκεκριµένου MIDI sequence από 128 τιµές σε µία συσκευή που διαθέτει πολλά κοµµάτια όπως για παράδειγµα σε ένα sequencer ή ένα rhythm box 1 data 11110011 (F3) 0xxxxxxx (song number)
Tune Request F6 Χρησιµοποιείται από τα ψηφιακά ελεγχόµενα αναλογικά synths προκειµένου να εκτελεστεί διαδικασία χορδίσµατος Παρόλο που υπάρχουν αρκετά τέτοια synths, εντούτοις λίγα από αυτά ανταποκρίνονται σε αυτήν την εντολή Κατά πάσα πιθανότητα επειδή τα σηµερινά αναλογικά synth είναι αρκετά σταθερά για να χρειάζονται χόρδισµα
System Realtime Πρόκειται για µηνύµατα που αποσκοπούν στο συγχρονισµό των συσκευών και αποστέλλονται κατά τη διάρκεια της λειτουργίας τους. Αποτελλούνται από 1 byte (status), δηλαδή δεν συνοδεύονται από data bytes Μπορούν να εκπεµφθούν οποιαδήποτε στιγµή ακόµα και στη µέση ενός άλλου µηνύµατος Μπορούν να εκπεµφθούν ακόµα και στη µέση ενός Running Status (o RS buffer τα αγνοεί) Είναι τα F8 - FF
F8 Timing Clock F9 undefined FA Start FB Continue FC Stop FD undefined FE Active sensing FF System Reset System Realtime
Timing Clock (F8) Χρησιµοποιείται προκειµένου δύο ή περισσότερες συσκευές να κλειδώσουν στο ίδιο tempo. Αποστέλλεται από µία συσκευή Master Device, σε πολλαπλές συσκευές slave devices, µετά από ένα start ή ένα continue Το χρονικό διάστηµα που µεσολαβεί ανάµεσα σε δύο διαδοχικά µηνύµατα timing clock εξαρτάται από το tempo, καθώς το µήνυµα αυτό αποστέλλεται 24 φορές ανά αξία τετάρτου Άσκηση Πόσος χρόνος µεσολαβεί ανάµεσα σε δύο timing clock µηνύµατα όταν το tempo είναι 160 bpm
Start (FA) FA Ειδοποιεί µία συσκευή να προχωρήσει στην αρχή του κοµµατιού και να ξεκινήσει να παίζει µε το tempo που καθορίζεται από το timing clock To µήνυµα start θα πρέπει να σταλεί τουλάχιστον 1ms νωρίτερα από το timing clock ώστε οι slave συσκευές να προλάβουν να αντιδράσουν
Continue FB Όπως το start µόνο που η συσκευή δεν χρειάζεται να ξεκινήσει την εκτέλεση από την αρχή Ένα µήνυµα SPP µε data bytes 00 00 ακολουθούµενο από ένα Continue είναι ισοδύναµο µε το µήνυµα start
Stop FC Ειδοποιεί µία ή περισσότερες συσκευές να σταµατήσουν να παίζουν και να περιµένουν για ένα µήνυµα Start ή Continue
Active Sensing FE Είναι προαιρετικό µήνυµα για τους εκποµπούς MIDI Όταν χρησιµοποιείται, τότε αποστέλλεται ανά 300ms προκειµένου η συσκευή που το λαµβάνει να γνωρίζει ότι η σύνδεση είναι οµαλή, κι ότι π.χ. Δεν έχει γίνει αντικανονική αποσύνδεση καλωδίων Έτσι ώστε, εάν το active sensing ξαφνικά σταµατήσει, τότε ο δέκτης θα πρέπει να σταµατήσει την αναπαραγωγή ήχων Αποφεύγεται έτσι το φαινόµενο των stuck notes Εάν µία συσκευή δε λάβει active sensing, τότε συµπεριφέρεται σαν να µην υπήρχε το µήνυµα αυτό
System Reset FF Δε χρησιµοποιείται συχνά αλλά όταν χρησιµοποιείται θα πρέπει αυτό να γίνεται µε µεγάλη προσοχή και σε καµία περίπτωση δεν πρέπει να µεταδίδεται µέσω της MIDI thru θύρας Να καταγράφεται σε sequencers