SensOrchestra


Sensor-zu-MIDI-Konverter


Bedienungsanleitung

Stand: Nov.2004


Einführung


SensOrchstra (in der Folge als SO bezeichnet) ist ein Sensor-zu-MIDI-Konverter auf Mikrocontrollerbasis. Es ist konzipiert zur Integration sowohl in existierende Instrumente, als auch in eigene Entwürfe. Deshalb wird es zwar betriebsfertig, jedoch ohne Gehäuse geliefert. Haupteigenschaften sind die kleine Baugröße, Sensibilität in musikalischem Sinne, gegeben durch hohe Abtastgenauigkeit und Schnelligkeit (geringe Latenz) sowie einfache Erweiterbarkeit. Die Grundkonfiguration bietet 16 analoge Eingänge, wobei diese Anzahl durch Hinzufügen weiterer SO-Module sehr einfach nahezu beliebig erhöht werden kann. Eingangsseitig können einerseits widerstandsveränderliche Signalquellen, wie druck- oder lichtempfindliche Sensoren (FSR, LDR) oder Potentiometer, andererseits Spannungen (CV) verwendet werden. Am Ausgang können nahezu alle definierten Midi-Nachrichten erzeugt werden. Der Konvertierungsprozeß wird durch eine Vielzahl von Parametern gesteuert, welche benutzerseits mittels Midi System-exclusive-Nachrichten (Sysex) einstellbar sind. Der Einsatz von SO erfordert keine speziellen technischen Fähigkeiten. Für Änderungen an der Konfiguration sind jedoch Kenntnisse von Midi Sysex und entsprechender Software, sowie der hexadezimalen Zahlendarstellung erforderlich.



Benutzungshinweise


Vorsichtige Behandlung zur Vermeidung mechanischer Schäden beim Einbau wird ebenso vorausgesetzt wie Schutz vor elektrischer Beschädigung durch Kurzschluß, Überspannung oder ungeeignete Eingangssignale. Insbesondere dürfen Piezo-Sensoren NICHT verwendet werden, da sie die Schaltung zerstören können. Die Module sollten beim Einbau an geschützter Stelle so positioniert werden, daß die LEDs sichtbar bleiben, und dort gut befestigt (angeklebt, angeschraubt) werden. Auch die Zugentlastung der Stecker sollte gewährleistet sein. Die Kabel zwischen den SO-Komponenten sowie zu den Sensoren sollten so kurz wie möglich bemessen werden; Maximallängen sind schwer anzugeben, da die elektrischen Umgebungsbedingungen wie auch die Anzahl der SO-Module eine Rolle spielen können. Sensorkabel bis 1 Meter scheinen zwar verläßlich, im Zweifelsfall sind jedoch entsprechende Tests ratsam. Die Sensoren sollten einzeln Stück für Stück angeschlossen und getestet werden, da eventuelle Fehler so leichter zu entdecken sind. Besonders wichtig ist der sorgfältige Umgang mit den gut geeigneten aber auch empfindlichen FSR-Sensoren (Hersteller IEE). Sie sollten auf möglichst ebener, nicht gebogener Fläche befestigt werden. Keinesfalls sollten sie geknickt oder mit harten Gegenständen gespielt werden!



Teilebeschreibung


Ein SO-Basissystem besteht aus aus folgenden Elementen:

1. SObar, die zentrale SO-Komponente trägt zwei Mikrocontroller(SOchips) mit je 8 analogen Sensor-Eingängen an den Steckern A und B. Aus den dort gemessenen Sensor-Eingangswerten werden Mididaten erzeugt. (Informationen über Systeme mit mehr als einem SObar siehe unter "Erweiterung" am Ende der Anleitung)

2. Midi-power-Adapter enthält Anschlüsse für Midi-Ausgang und Midi-Eingang (für Konfigurationszwecke) sowie für die Stromversorgung. Der Midi-Ausgang dient gleichzeitig als Midi-Thru.

3. Flachbandkabel 10-polig, zur Verbindung dieser beiden Teile.


Für ein komplett funktionsfähiges System werden weiters benötigt:

4. Steckernetzteil, stabilisiert, Stecker 2.1mm, DC 7,5V, 300mA (für ein SObar; bei Anschluß mehrerer SObars stärkeres Netzteil verwenden)

5. Sensorkabel; üblicherweise 16-polige Flachbandkabel, evtl. auch Einzelkabel, je nach Einbauentfernung der Sensoren

6. Sensoren: widerstandsändernde Typen wie FSR, LDR, Potentiometer etc.; (auch Spannung 0-2.5 V möglich)

7. Midi-Kabel

8. Midi-Empfänger: Synthesizer, Sampler, Computer


Die Teile 4, 5, 6, 7 werden je nach Bedarf bzw. Vereinbarung mitgeliefert oder müssen benutzerseits beschafft werden.



Installation und Funktionstest


[SObar und Midi-power-Adapter sollten im Lieferzustand verbunden sein. Andernfalls mittels 10-poligen Flachbandkabels verbinden.]


1. Sensor an SObar anschließen: dazu 16-poliges Sensorkabel in SObar-Anschluß A oder B und Sensor ans andere Kabelende stecken (zum Testen vorerst nur einen Sensor). Falls 2-poliges Kabel für Einzelsensor verwendet wird, eines der Pin-Paare 1 - 8 lt. Beschriftung benutzen.


2. Midi-out des Midi-power-Adapters mit Midi-in von Tonerzeuger oder Computer mittels Midi-Kabels verbinden.


3. Stromversorgung: (vorher Lautstärke zurückdrehen!): Steckernetzteil mit Midi-power-Adapter verbinden, dann Netzteil einstecken.


Jetzt sollten am SObar zwei rote LEDS für ca. 2 Sekunden aufleuchten, anschließend dann die gelbe und grüne LED permanent leuchten. Sollte dies nicht geschehen, bitte Strom ausstecken, Polarität der Stromversorgung und alle Verbindungen prüfen. Bleibt das Problem bestehen, bitte rückfragen!


Falls jedoch alles wie erwartet funktioniert, sollte bei Betätigung des Sensors der Midi-Klangerzeuger zu hören oder Midi-Daten am Midi-Monitor zu sehen sein; in der Standardkonfiguration sendet SO Noten auf Midi-Kanal 1. Die Helligkeit der roten LED entspricht dabei der Stärke des Sensorsignals. Wenn alle Sensoreingänge fehlerfrei arbeiten, sollte SO bereit zum Einbau und zur produktiven Verwendung sein.



Standardeinstellung


SO enthält vier vorkonfigurierte Programme (SOprg, sogenannte "SO-Progs"), welche folgende Midi-Daten erzeugen:


SOprg 1: note on/off, chip A: Notennummer 36-43, chip B: 44-51 (d.h. ab Note c0 chromatisch steigend)

SOprg 2: continuous controller, chip A controller Nummer 1-8, chip B controller Nummer 17-24

SOprg 3: note on/off und CC, d.h. SOprg 1 und 2 zugleich

SOprg 4: note on/off, aber Noten umgekehrt wie bei SOprg 1


Im Lieferzustand wird beim Einschalten SOprg 1 gewählt, womit Noten auf Midi-Kanal 1 erzeugt werden. Zwischen den SOprgs kann durch Midi Program Change Nachrichten (program 1 - 4) auf Midi-Kanal 1 umgeschaltet werden.

Die Standardkonfiguration mag für den Anfang reichen, oder auch bei Verwendung von SO als Midi-Signalquelle für Pakete wie PD oder Max/MSP, in welchen Midi-Daten modifiziert werden können. Üblicherweise wird freilich der Wunsch bestehen, SO den eigenen Bedürfnissen anzupassen. Es folgt ein Überblick über die derzeit dafür gegebenen Möglichkeiten.



Parameter und Software-Konfiguration


[ Hexadezimale (hex) Zahlen werden in der Folge wie üblich durch vorangestelltes "0x" gekennzeichnet. ]

Die Funktionen von SO sind benutzerseitig durch Parameter in weitem Bereich einstellbar. Dies umfaßt die Analyse der Sensor-Eingangswerte, die Erzeugung der Midi-Daten sowie diverse weitere Funktionen. Beispiele für solche Parameter sind Midi Noten-Nummern, Midi controller-Nummern, Midikanäle, Rauschpegel, Entprellung, Kurven für die Zuordnung von Eingangswerten zu Midi-Ausgangswerten, Midi-Basiskanal etc. Es gibt über 30 Parametertypen und die Gesamtzahl der einstellbaren Einzelparameterwerte pro SOchip liegt bei ca.550. Die Parameteränderungen erfolgen durch Midi System exclusive (Sysex) Nachrichten.


Da das Verständnis des SO-Konzepts für den Konfigurations- oder Editiervorgang unerläßlich ist, folgt ein kurzer Überblick. Die kleinste SO-Funktionseinheit ist ein SOchip mit den 8 dazugehörigen Sensoren bzw. Eingängen. Die gegenwärtige Bauform SObar mit zwei SOchips wurde lediglich aus praktischen Erwägungen gewählt und ist für den Konfigurationsprozeß ohne Belang. Somit läßt sich das SO-Konzept folgendermaßen als Drei-Ebenen-Modell darstellen:

1. Einzelner Sensor/Eingang

2. SOchip

3. SO-Instrument (ein Midi-power-Adapter mit einer Kette beliebig vieler SObars bzw. SOchips)


Im Spiel- oder Performance-Modus bleibt die Ebene 2 (SOchip) außer Betracht; als BenutzerIn interagiert man nur mit den Ebenen 1 und 3 (Sensor und SO-Instrument). Um aber im Editiermodus einen Parameterwert eines bestimmten Sensors an einem bestimmten SOchip ändern zu können, muß dieser eindeutig adressierbar sein. Eine vollständige Adresse besteht aus:

(a) der SOchip-Identitätsnummer SOchip-Id

(b) der Nummer des Sensor-Eingangs an diesem SOchip und

(c) der Parameter-Nummer.


Wie kommt man nun zu diesen Adressinformationen?

zu (a) Jeder SOchip muß zu Beginn des Editiervorganges durch eine Sysex-Nachricht eine eindeutige SOChip-Id zwischen 1 und 123 (0x01-0x7B) erhalten, sinnvollerweise von 1 weg aufsteigend. Damit wird der unterschiedlichen Anzahl von SOchips in verschiedenen SO-Instrumenten Rechnung getragen. (Siehe auch unter "Erweiterung") Beim Einschalten tragen alle SOchips die SOchip-Id 0.

zu (b) Die Sensornummer entspricht dem entsprechenden Eingang (0x00-0x07) am jeweiligen SOchip.

zu (c) Die gewünschte Parameter-Nummer ist Tabelle 1 im Anhang zu entnehmen.


Zum Editieren müssen Midi-Verbindungen vom Editor-PC zum SO-Midi-Eingang sowie vom SO-Midi-Ausgang zum Editor-PC hergestellt werden.

Mit den Adressdaten lassen sich dann Sysex-Nachrichten der Art "Ändere Parameter 0x23 (=Notennummer) bei Sensor 5 an SOchip 2 auf den Wert 0x54" an SO schicken. SO antwortet darauf mit einer Sysex-Nachricht, welche einen Antwortcode zur Signalisierung der korrekten Verarbeitung oder etwaiger Fehler (ungültiger Wert oder Parameter) enthält. Die SOchips sind in Serie geschaltet; jeder SOchip erkennt anhand der SOchip-Id Nachrichten, die für ihn bestimmt sind und verarbeitet sie; die übrigen werden unverändert durchgeschleift.


Alle Parameterwerte lassen sich darüber hinaus auch ohne vorherige Änderung einfach abfragen (damit ist kompletter dump request möglich).



Editieren der Parameter


Der Editiervorgang umfaßt das Einlesen, Darstellen und Verändern der Parameterwerte im SO. Weiters wäre das Laden von und das Speichern auf externem Speicher (Festplatte) nützlich. Ein graphischer Editor für SO wäre dafür die Ideallösung, existiert jedoch gegenwärtig nicht. (Ein entsprechendes Projekt in Java wurde zwar vor einiger Zeit begonnen, die Fertigstellung ist aber im Moment nicht absehbar.) Sollte jemand interessiert daran sein, einen Editor zu schreiben, so steht die SO-Spezifikation sowie Unterstützung gerne zur Verfügung!


Somit ist man zur Zeit also darauf angewiesen, die entsprechenden Sysex-Nachrichten manuell zu erstellen und mittels eines geeigneten Programms (Midiox, Cubase,...) an SO zu schicken. Die Antwort von SO sollte anschließend geprüft werden. Man kann auch Sysex-Dateien mit mehreren Nachrichten erstellen, speichern und abschicken. Dabei sollte beim Versenden eine Pause von ca.20 Millisekunden zwischen den einzelnen Nachrichten eingehalten werden.

Als Zwischenlösung kann das Tcl/Tk-Programm SoTools (für Windows) zur Verfügung gestellt werden. Dieses bietet gewisse Unterstützung beim Editieren (automatische Vergabe der SOchip-Id, Prüfung der Antwort-Meldungen, Fehlerausgabe, dump request und Speichern der Parameterwerte, Kopieren der Gesamtkonfiguration auf anderes SO-Instrument.) Bei Bedarf bitte nachfragen!

Weiters können nach Vereinbarung auch fertige Konfigurationsdateien zur Verfügung gestellt werden.



SensOrchestra Sysex-Format


Diese Zusammenfassung enthält jene Informationen über das SO-Sysex-Format, welche zum Editieren notwendig sind.


Eine SO-Sysex-Nachricht besteht aus 17 Bytes folgender Bedeutung (alle Werte hexadezimal):


Bytes 1-6: F0 7D 46 48 01 01 - konstant (Start Sysex, Herstellerkennung, Version)

Byte 7: report class, kommt in SO-Antwort: 10=okay, sonst Fehler

Bytes 8: report number, kommt in SO-Antwort; details zu report class

Bytes 9: target device Id: für wen ist Nachricht bestimmt?

Bytes 10: source device Id: wer hat Nachricht abgeschickt?

(Nummernbereiche: 01-7B): SOchip, 7C-7E:master (PC), 7F:broadcast=an alle)

Byte 11: instruction, Werte: 61=adjust & request (an SO: Wert ändern, lesen und als Antwort schicken), 21=request (an SO: Wert nur lesen und als Antwort schicken), 11=reply (von SO: Nachricht ist die Antwort von SO)

Byte 12: Parameternummer; siehe Tab. 1

Bytes 13-14: Index und Sub-Index zu Parameter, wo nötig (z.B. SOprg-Nr. und Sensornummer); siehe Tab. 1

Bytes 15-16: Parameterwert, geteilt in nibbles, um Werte größer als 7F (Limit für Midi-Datenbytes) senden zu können; siehe Tab. 1

Byte 17: Ende Sysex


Ein praktisches Beispiel mit drei Sysex-Nachrichten könnte so aussehen:

F0 7D 46 48 01 01 00 00 00 7C 61 40 00 00 00 01 F7

F0 7D 46 48 01 01 00 00 00 7C 61 40 00 00 00 02 F7

F0 7D 46 48 01 01 00 00 01 7C 61 23 03 02 04 05 F7

Die ersten beiden Nachrichten setzen zwei SOchips vom Einschaltzustand 0 auf SOchip-Id 1 und 2. Dieser Nachrichtentyp muß nach dem Einschalten nur ein mal geschickt werden.

Die dritte message setzt die zu sendende Notennummer bei SOchip 01, Programm 03, Sensor 02 auf 45.


Bei fehlerfreier Verarbeitung kommen folgende Nachrichten zurück:

F0 7D 46 48 01 01 10 00 7C 01 11 40 00 00 00 01 F7

F0 7D 46 48 01 01 10 00 7C 02 11 40 00 00 00 02 F7

F0 7D 46 48 01 01 10 00 7C 01 11 23 03 02 04 05 F7

Bytes 7 und 8 (10 00) signalisieren die erfolgreiche Verarbeitung; Bytes 9 und 10 sind jetzt vertauscht, da die SOchips als source (Quelle) Nachrichten an target 7C (master, PC) senden; laut Byte 11 sind diese vom Typ reply (Antwort). Bytes 12-16 enthalten Parameter, Index, Subindex und gelesenen Wert (nach Änderung).



SensOrchestra-Editierparameter


Tabelle 1 enthält eine Liste derjenigen SO-Parameter, die für den Editiervorgang von Bedeutung sind. Diese fallen je nach ihrer Funktionen in eine der folgenden Kategorien:

a) allgemeine Midi-Konfiguration: Parameter 01, 03, 04, 05

b) Midi-Ausgabe-Steuerung: Parameter 20-27

c) Meßwerterfassung und Konvertierung: Parameter 02, 06-0F

d) sonstige / temporäre Parameter: Parameter 40-42, 60


Parameterwerte der Kategorien a), b) und c) lassen sich dauerhaft in SO speichern, während die Parameter unter d) ihren Wert mit dem Ausschalten verlieren.

Parameteränderungen für Parameter 01, 03, 06, 07 erfordern Aus- und Einschalten, um wirksam zu werden.


Erläuterungen zu Parameter 02: Der Parameter dient dazu, die Empfindlichkeit der Sensoren der eigenen Spielweise anzupassen. Dazu können die Sensormeßdaten, dargestellt als Werte im Bereich 00-FF mittels einer Kurve aus 17 Punkten und Interpolation auf Midi-Werte von 0-127 abgebildet werden. Die Zuordnung kann z.B. linear, logarithmisch, in fixen Stufen, im Prinzip aber beliebig sein. Es können z.B. auch zwei Sensoren von einer fixen Mittelposition (Pitchbend!) aus nach oben und nach unten gehen (Meßwerte 0-255 --> Zuordnung auf Midi-Werte 64-127 bzw. 63-0).


Für erste anschauliche Editier-Tests empfehlen sich die Parameter im Bereich 20-27 (Midi-Ausgabe-Steuerung), z.B. 23 (Notennummer) wie in obenstehendem Beispiel.



Erweiterung


Zur Erweiterung eines SO-Systems stehen zwei Wege offen. Zum einen kann man einfach zusätzliche komplette SO-Systeme in die Midi-Kette hängen. Dies hat den Vorteil, daß man mit normalen Midi-Kabeln auch weitere Distanzen (bis 15m) überbrücken kann (z.B. für Rauminstallationen). Zum anderen ist SO jedoch so konzipiert, daß ein Basissystem (=Midi-power-Adapter und SObar) durch dazustecken weiterer SObars auf nahezu beliebig viele Eingänge erweitert werden kann (größtes System bisher: 24 SOchips, 192 Sensoren). Diese Lösung besitzt den Vorteil geringerer Latenz und Baugröße. Die SObars werden dazu über Flachbandkabel verbunden. Für das Editieren ist konzeptbedingt davon auszugehen, daß alle SOchips innerhalb einer Midi-Kette ungeachtet der Art ihrer Verbindung als ein SO-Instrument betrachtet werden. Bei größeren Systemen ist auf genügende Stromversorgung (stärkeres Netzteil), sowie bei kompaktem Einbau auf entsprechende Luftzirkulation zur Kühlung zu achten.


SensOrchestra Editierparameter


Parametername Param. Index Subindex Werte- Erläuterungen

nummer

bereich






PwrUpSoPrgNr 01 00 00 00-03 SoPrgNr. nach Einschalten
MeasToMidiMapTables 02 00-05 00-10 00-FF 6 Kurven/Tabellen mit je 17 Werten (Meßwert -> MIDI)
PwrUpUseRunningStatus 03 00 00 00-01 Running status für Midi-Ausgabe von SO: 0=off, 1=on
MidiBasicChannel 04 00 00 00-0F Midi Basiskanal
SoPrgAssignedToPrgChg 05 00-7F 00 00-03 Zuordnung Midi Prg.change (00-7F) auf SoPrgNummer (00-03)
SensorType 06 Sensor 00 00-FF Sensortyp: 01=FSR; 00=kein Sensor
PwrUpAdcSamplingPeriod 07 00 00 00-07 Sample rate (Standardwert = 06 --> 2.1 kHz/Sensor)
IgnoranceLevel 09 Sensor 00 00-FF unterer Schwellmeßwert für Sensormessung (Rauschpegel)
TrigInertia 0A Sensor 00 00-FF Trigger-Verzögerung (Trigger-Bedingung muß soviele samples lang bestehen)
ReEnableLevel 0B Sensor 00 00-FF Schwellwert (=Parameterwert mal 4) muß vor neuerlichem Trigger unterschritten werden
ReEnableDelay 0C Sensor 00 00-FF Mindestverzögerung (in samples) vor neuerlichem Trigger
MinSlopeCausingTrig 0D Sensor 00 00-FF Wertänderung (zwischen 2 Folge-samples) kleiner als dieser Wert löst Trigger aus
MinContTimeDiffOfValGrain 0E Sensor 00 00-7F Mindestzeit (=Parameterwert mal 32 samples) zwischen continuous messages
MaxContValGrain 0F Sensor 00 00-7F Änderung stärker als dieser Wert (als Midi-Wert) löst cont.msg vor Mindestzeit aus
SingleMsgMode 20 SoPrgNr Sensor 00-7F 00=single message aus, 01=NoteOn/NoteOff, 0F=PrgChange
SgEvntMidiChannel 21 SoPrgNr Sensor 00-0F Midikanal für single message
VelocityMapTableNr 22 SoPrgNr Sensor 00-05 Empfindlichkeitskurve für single message lt. Parameter 02
MidiNotePrgChg 23 SoPrgNr Sensor 00-7F single message Nummer (Note oder Midi Prog.nr. je nach Param. 20)
ContinuousMapTableNr 24 SoPrgNr Sensor 00-05 Empfindlichkeitskurve für continuous message lt. Parameter 02
ContMsgTypeAndNr 25 SoPrgNr Sensor 00-82 00-7F=Controller, 80=PolyAftert.(Note v. Param.23), 81=ChannelAftert., 82=Pitchbend
ContinuousMsgMode 26 SoPrgNr Sensor 00-7F 00=continuous message aus, 01=ein
ContinuousMidiChannel 27 SoPrgNr Sensor 00-0F Midikanal für continuous message
DeviceId 40 00 00 00-7B SoChip-Id zur Adressierung, vor Editieren zu setzen (Startwert=0)
SoPrgNr 41 00 00 00-03 aktuelle SoPrgNr (Startwert aus Parameter 01 gelesen)
IdentifyNextActiveSensor 42 00 00 00-01 01=Sensoridentifikation ein, schickt komplette Adresse lt. Param.60
SensorActivity 60 SoPrgNr Sensor 00 Sensor schickt komplette Adresse (SoChipId+SoPrgNr+Sensor) wenn Param.42 = 01






Anmerkungen:




- alle Werte hexadezimal




- in Spalten Index/Subindex: Wert “Sensor” äquivalent zu 00-07, Wert “SoPrgNr” äquivalent zu 00-03




- single messages / Typ und Statusbyte: NoteOn (9x), Note Off(8x), Program Change (Cx)




- continuous messages / Typ und Statusbyte: continuous controller(Bx), polyphoner Aftertouch(Ax), channel Aftertouch(Ax), Pitchbend(Ex)




- “Trigger” bedeutet Erzeugung einer Midi single message




- “sample” = einzelne Messung