Blofeld Sysex & Maxforlive

sushiluv

||||||||||
Hi,

ich bastel mir gerade einen kleinen Editor fürs Push 2 und den Blofeld.

Live 10 kann ja jetzt sysex über maxforlive, die komunikation funktioniert aber ich habe massive Probleme dem Blofeld einen Befehl zu schicken, als Beispiel FM Source von Oscillator 1

Laut Midimonitor schickt der Blofeld folgenden String:

00 F0 3E 13 00 20 00 00 06 0B F7 (06 für LFO 2)

Ändere ich nun die 06 auf 05 für LFO 1 und schicke das zurück an den Blofeld passiert nichts.

das schicke ich an den Blo mittels maxmsp

240 0 F0 3E 13 0 20 0 0 6 6 F7 247

dann passiert was eigenartiges, die Message ist nun anders, zur Erklärung habe ich ein Foto beigefügt, erster Eintrag was vom Blofeld kommt, zweiter was ich zurückschicke.

Bildschirmfoto 2018-09-16 um 09.28.09.jpg

Bitte um Hilfe, danke!
 
Hast Du das SysEx Manual von Waldorf schon angeschaut? Unter Blofeld/Dowloads/Tools auf der Homepage.
Ansonsten verstehe ich nicht, was Du genau machst. Habe es dreimal gelesen. Sorry...
 
Hey, ich habe mir das manual angesehen vorher, aber ich spreche leider nicht fließend sysex.

Ich versuche dem blofeld mittels msxmsp einen Befehl zu senden, den er versteht und habe Probleme es richtig zu machen. Maxmsp bietet syxformat als Element an, allerdings wird mein sysex string von diesem Element nicht akzeptiert, es gibt einen Fehler und ich weiß nicht, wie ich richtig zu formatieren habe.

Danke.
 
Der zweite String auf dem Foto ist falsch, der kann nicht gehen, da fehlt die Hersteller ID.

Halte Dich an das im Manual angegebene Format, generelle Formatierung von Sysex ist diese hier:

F0 <HerstellerID> <Daten> F7

Hersteller ID ist entweder 1 Byte, wie bei Waldorf, oder 00, dann folgen aber 3 Bytes für die erweiterte Hersteller ID. 7F steht für Universal und 7E für System Realtime.

Die Bytes vor dem F0 oben im MIDI Monitor sind Zeit/Bytestempel und gehören nicht dazu.
Das Bild sieht nach dem MIDI Monitor von Snoize auf dem Mac aus, lade Dir auch mal dessen Sysex Librarian runter, da kann man die Daten teils besser analysieren.

Zum Ausprobieren von Sysex eignet sich am Besten das MIOS Studio von ucapps.com, dort kann man einzelne Strings eingeben und senden.
 
Deine Bytefolge müsste so aussehen, Device 0 angenommen:

F0 3E 13 00 20 00 01 21 XX F7 - Setze LFO1 Speed auf XX
F0 3E 13 00 20 00 00 4E XX F7 - Setze Filter 1 Cutoff auf XX

Es geht an den Sound Mode Edit Buffer

Code:
SNDP    20h     Sound Parameter Change

Upon reception of a valid Sound Parameter Change Dump, the
specified parameter will change its value immediately according
to the given value. The location is given in one byte with the
following conventions:

LL              Location
-------------------------------------------------------------
00h             Sound Mode Edit Buffer or...
00h..0Fh        Multi Mode Instrument 1..16 Sound Edit Buffer
-------------------------------------------------------------

The Parameter index is given in two bytes:

HH  PP          Parameter index
------------------------------------------------
00h 00..7Fh     Parameters with indices 0..127
01h 00..7Fh     Parameters with indices 128..255
02h 00..7Eh     Parameters with indices 256..382
------------------------------------------------

See 3.1 for a detailed list of parameters and indices.


So the actual Format is:

F0h, 3Eh, 13h, DEV, 20h, LL, HH, PP, XX, F7h

where:

Index   Label   Value           Description
-----------------------------------------------------------
0       EXC     F0h             Marks Start of SysEx
1       IDW     3Eh             Waldorf Music ID
2       IDE     13h             Blofeld ID
3       DEV                     Device ID               
4       IDM     20h             here SNDP (Sound Parameter change)
5       LL      see above       Location
6       HH      see above       Parameter index high byte
7       PP      see above       Parameter index low byte
8       XX      see 3.1         New Parameter value
9       EOX     F7h             End of Exclusive
-----------------------------------------------------------
 
Hey, vielen Dank für deine Zeit.

Also, vielleicht bin ich einen Babystep weiter, ich hab das Hex in Dec umgerechnet, jetzt hab ich immerhin die Waldorf 10 Bytes Message wie sie gehört, allerdings ist jetzt das was er sendet anders als das was er empfängt, als ob mein Befehl falsch umgerechnet wird. Im Midimonitor screenshot siehst du oben den Befehl den ich sende, unten den den ich empfange, beide sollten gleich sein, hm ... ganz schön kompliziert :)
Ich versuche hier die Mod Source des Filter 1 via Controller auszuwählen.

Im Max screenshot ist der untere Befehl im oberen sxformat umgerechnet, hex to dec.
Bildschirmfoto 2018-09-16 um 15.15.40.jpg
Bildschirmfoto 2018-09-16 um 15.15.29.jpg
 
Du bringst möglicherweise Dec und Hex durcheinander?

F0 3E 13 00 20 00 00 4E XX F7 - Setze Filter 1 Cutoff auf XX in HEX
240 62 19 00 32 00 00 78 XX 247 - Setze Filter 1 Cutoff auf XX in DEC
 
Danke,das funktioniert! Uff :)

Eines erschließt sich mir nicht, wie wird aus den 13 eine 19 und den 20 eine 32?
Wie rechnest du das um?

Edit:
Mein Converter war falsch, jetzt wird bei mir eine 13 auch eine 19 :)

Danke, Du hast mir sehr geholfen!
 
Hinweis: für den Slegde gilt, jedenfalls für dein gemeinsamen Parameter, das Gleiche, sogar incl des über die Oberfläche eigentlich nicht erreichbaren PPG Filters, da nimmt man nur statt der "13" als Model ID die "15".
 
Werd ich versuchen, ich hab jetzt nur mal für alle Oszillatoren die FM Quelle und deren Intensität sowie die zwei Filter aufs Push gemapped und der Blofeld lässt sich schon um Ecken intuitiver bedienen, herrlich :)
 
Zuletzt bearbeitet:
Ja, spannend werden nochmal die parameter, welche negativ und positiv verstellt werden können :)

Auf jeden Fall nochmal Danke an euch!
 
Hier lohnt sich ein Grundkurs Hexzahlen, hab ich damals in einem Buch über Microcontroller gelernt.

Parameter mit Nullstellung in der Mitte werden so behandelt, wie Vorzeichen bei 8 und 16 Bit generell: die Nullstellung ist immer der halbe Wert der maximalen Anzahl möglicher Bits-1, da das 7.Bit als Flag für Kommandobytes dient, wäre das $7F (127) und somit dann $40 (64) die Nullstellung, Erhöhung zählt ab dort plus 1, also $41 (64) entspricht dann dem Wert 1, und auf der anderen Seite entspricht $3F (63) dann der -1.
Für Parameter mit zwei Bytes, also 14 Bit Auflösung, gilt eine entsprechende Regel.

Manche Hersteller sparen hier aber auch und haben dann Sprünge drin statt kontinuierlicher Werte.
 
Ich verstehe kein Wort aber man muss ja nicht alles am ersten Tag können :)

Der Blofeld behandelt +/- Werte über sysex normal, also 0-127, in Max hab ich ein bipolares Dial genommen und getrickst indem ich bei Minuswerten einfach 63 addiere, funktioniert und das Dial zeigt korrekte Werte an.
 
Der Blofeld behandelt +/- Werte über sysex normal, also 0-127,

Tut er ganz sicher nicht, und den Beweis lieferst Du ja im nächsten Satz.

in Max hab ich ein bipolares Dial genommen und getrickst indem ich bei Minuswerten einfach 63 addiere, funktioniert und das Dial zeigt korrekte Werte an.

Das ist nicht getrickst, sondern exakt das, was ich oben beschrieben hatte, demnach behandelt der Blofeld die plusminus-Werte auch genau so, wie es oben in meinem Text steht, zwar 0-127, aber eben 64 für die Nullstellung, mehr als 64 sind dann Werte von 1-64, weniger als 64 dann -1-64

Lies es einfach nochmal und zeichne es Dir notfalls auf Papier als Zahlenstrahl auf, dann wird es klarer.
 
Damit hast du natürlich Recht :)

Ich habe nun einen Init Sound des Blofeld in Maxmsp gedumpt und folgende Zahlen bekommen.

240 62 19 0 16 127 0 1 64 64 64 66 96 0 0 2 127 1 64 0 0 0 0 0 64 64 64 66 96 0 0 0 127 3 64 0 0 0 0 0 52 64 64 66 96 0 0 0 127 5 64 0 0 0 0 0 0 2 64 0 0 0 0 0 20 0 0 0 127 0 127 0 127 0 0 0 64 0 0 0 0 1 0 0 1 127 64 0 0 0 0 0 0 64 64 64 1 64 0 0 64 1 64 0 0 127 64 0 0 0 0 0 0 64 64 64 0 64 0 0 64 3 64 0 0 3 0 0 127 114 5 64 0 0 0 1 0 20 64 64 0 127 127 127 127 127 127 127 127 127 127 8 0 53 64 100 0 64 100 0 100 110 0 15 64 127 127 0 50 64 0 0 0 0 64 0 0 64 0 0 40 64 0 0 0 0 64 0 0 64 0 0 30 64 0 0 0 0 64 0 0 64 1 0 64 0 0 127 50 0 0 127 0 0 0 0 64 0 0 127 52 127 0 127 0 0 0 0 64 0 0 64 64 64 64 64 64 0 0 0 64 0 0 64 64 64 64 64 64 0 0 1 0 0 0 64 0 0 0 64 0 0 0 64 0 0 0 64 1 1 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 0 0 64 16 100 0 0 15 8 5 0 0 0 1 12 0 0 15 0 0 55 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 0 0 0 73 110 105 116 32 32 32 32 32 32 32 32 32 32 32 32 0 0 0 0 59 247

Wie bekomme ich den hier raus welcher Zahl für welchen Parameter steht und welche Wert am Blofeld gesetzt ist? das wär ganz gut für parameterfeedback und damit der Controller den aktuellen Sound abbildet.

Wenn ich die Fußlage des ersten Oscillators verändere wird im Dump die letzte Zahl, also die 59, verändert. Heißt das, der Dump beinhaltet nur die aktuellen Werte eines Parameters, nicht aber dessen Adressierung?

Falls es so ist müsste ich also nur die 59 an den Controller senden um den aktuellen Wert zu bekommen, kann es wirklich so einfach sein?

EDIT: Ist es natürlich nicht, egal wie viele Parameter ich am Blofeld verstelle, nur die letzte Zahl vor der 247 scheint sich zu verändern.

Danke!
 
Zuletzt bearbeitet:
sorry, aber gewöhne Dir an, sowas in Hex zu posten, wenn überhaupt. Mit Dezimal kann bei sowas nix anfangen.

Dann: die Position, welcher Parameter was heißt, steht in der Sysex Doku des Blofeld, da gibts eine Liste, da muß man dann nach Position im Dump gehen.

Und: für einzelne Parameter benutzt man Parameter Changes und nicht den Speicherplatzdump. Der Blofeld sollte auch solche senden können, aber da muß ich an swissdoc abgeben, da ich keinen Blofeld habe.

Lade Dir mal das Sounddiver Programming manual auf Deepsonic herunter, dort steht einiges an verwendbaren Grundlagen zum Thema Sysex drin.
 
Im Blofeld kann man unter Global einstellen, ob er SysEx sendet, wenn man einen Regler dreht. Bitte im Handbuch genau nachsehen. Ansonsten kann man einen Dump auslösen, was genau geht, bitte ausprobieren oder im Handbuch nachlesen. Man sollte auch den Edit Buffer von aussen via SysEx requesten können. Auch hier wieder im SysEx Manual nachsehen.

Wenn Du einen Sound aufrufst, diesen dumpst, dann einen Parameter am Blofeld änderst und wieder dumpst, dann bekommst Du eine Änderung.
Wenn Du einen Sound aufrufst, diesen dumpst, dann zwei Parameter am Blofeld änderst und wieder dumpst, dann bekommst Du zwei Änderungen.
 
sorry, aber gewöhne Dir an, sowas in Hex zu posten, wenn überhaupt. Mit Dezimal kann bei sowas nix anfangen.

Dann: die Position, welcher Parameter was heißt, steht in der Sysex Doku des Blofeld, da gibts eine Liste, da muß man dann nach Position im Dump gehen.

Und: für einzelne Parameter benutzt man Parameter Changes und nicht den Speicherplatzdump. Der Blofeld sollte auch solche senden können, aber da muß ich an swissdoc abgeben, da ich keinen Blofeld habe.

Lade Dir mal das Sounddiver Programming manual auf Deepsonic herunter, dort steht einiges an verwendbaren Grundlagen zum Thema Sysex drin.

Wie kann ich Parameterchanges verwenden wenn der Parameter nur mittels sysex erreichbar ist?

Danke für den Tipp mit dem Sounddiver Manual.
 
Im Blofeld kann man unter Global einstellen, ob er SysEx sendet, wenn man einen Regler dreht. Bitte im Handbuch genau nachsehen. Ansonsten kann man einen Dump auslösen, was genau geht, bitte ausprobieren oder im Handbuch nachlesen. Man sollte auch den Edit Buffer von aussen via SysEx requesten können. Auch hier wieder im SysEx Manual nachsehen.

Wenn Du einen Sound aufrufst, diesen dumpst, dann einen Parameter am Blofeld änderst und wieder dumpst, dann bekommst Du eine Änderung.
Wenn Du einen Sound aufrufst, diesen dumpst, dann zwei Parameter am Blofeld änderst und wieder dumpst, dann bekommst Du zwei Änderungen.

Fürs testen dumpe ich manuell, warum sich bei allen Änderungen am Blofeld nur die letzte Zahl im Dump verändert ist mir nicht klar, ich werde investigieren :)
 
Ich finde es schwierig sysex zu dekodieren, bzw. zu verstehen wie ich den Dump zu dekodieren habe, das verteilen der messages in Max und somit zum Controller sollte aber kein Problem sein. Ich nehm mir mal das sounddiver Manual vor, vielleicht wird mir das dann klarer.
 
Zuletzt bearbeitet:
Ich habe, um Adaptionen für Sounddiver bauen zu können, etliches an Reverse Engineering betreiben müssen, weil es für einige Geräte keine Doku gab. Für den Blofeld gibt es eine.

Die letzte Zahl dürfte eine Prüfsumme sein, das sollte aber ebenfalls in der Doku stehen.

Folgende Vorgehensweise kann ich empfehlen:

Die Dumps aus dem MIDI Monitor oder Sysex Librarian in ein Simpletext/Textwrangler Dokument packen und blöckeweise aufteilen.

Zb den Headerblock:

F0 3E 13 DEV (Device ID)

Der ist immer gleich. Danach kommen meist die Kommandobytes, die Dump, Request oder Parameter Change unterscheiden, manchmal gibts sogar noch ein Fehlerkommando.

Da schnappst Du Dir die einzelnen Bytes und isolierst sie nach Reihenfolge und gleichst das mit der Doku ab. Kann man auch in einer Tabelle machen.

Zur Analyse solcher Hexsachen kann ich auch SynalizeIt auf dem Mac empfehlen, das ist ein Hexeditor, bei dem man Strukturen analysieren und auch selbst bauen kann, diese werden dann auch selbst erkannt und farblich hinterlegt. Für bekannte Formate sind bereits fertige Strukturen hinterlegt, an denen man sich das anschauen kann, wie sowas gemacht wird. So ein Tool hätte ich vor 20 Jahren gerne gehabt, das mußte ich mir selbst in BASIC schreiben und es war nicht so komfortabel.
 
Danke, ich habe mir SynalizeIt geladen und mir den Dump angesehen und versuche anhand der Dokumentation durchzublicken. Das ist eine spannende Sache aber ich muss wohl noch etwas an meinen Grundlagen arbeiten, zumal ich dann mit Max diese Listen auch noch bearbeiten muss. Offenbar muss ich jeden Befehl zuvor in Dezimal umwandeln obwohl das Midiout Objekt in Max eigentlich auch direkt den Hex Code verarbeiten können sollte ... und Musik will ich ja auch noch machen :)
 
Als wir neulich @work Probleme mit unserem Funknetzplanungstool und dessen Geodaten im Zusammenhang mit dem über SMB angehängtem Storage hatten und ich gerade so schön am WinPcapen und Wiresharken war, da ist mir aufgefallen, dass Wireshark MIDI SysEx direkt interpretieren kann. Und holla, Wireshark gibt es sogar für macOS...

Edit: Das Problem lag am Storage, eine neue Firmware hat das Problem dann gelöst.
 
Hilft mir das bei nibbles zusammenfügen? Ich hab gestern hart am Wahnsinn gekratzt beim Versuch zu verstehen wie ich zwei werte in einen verpacke, ich bin für sowas nicht gemacht :)
 
Beim Nibbles zusammenfügen helfen Grundlagen und evtl das Sounddiver Programming Manual.

Wichtig dabei ist halt zu wissen, in welcher Reihenfolge die Nibbles gesendet werden, da gibts Hig-Low und low high.

Dezimal unbedingt rauslassen. Hex ist die lesbare Version von Binär, die kann man direkt übersetzen, Dezimal verwirrt nur. SynalizeIt arbeitet mit Hex.

Ich hab meine Grundlagen über digitale Hardware, Hex und Binär aus diesem Buch hier gelernt:

Ansehen: https://www.amazon.de/Mikrocomputertechnik-Prozessor-Prozessoren-Machinenorientierte-Schaltungstechnik/dp/3486291718


Gibts dort gebraucht und ist jeden Cent Wert.
 
Ich verwende jetzt die Max Externals lobjects von von Peter Elsea, liegen in 64 Bit vor und gibt es schon ewig, sollten also zukunftssicher sein, damit kann ich direkt in Hex arbeiten und da gibt es eingie gute automatische Umrechnungsfunktionen, z.b. kann ich den hexwert den der Blofeld schickt direkt in Decimal umwandeln um damit ein Dial im Editor anzusteuren, also Bidirektionale Kommunikation, beherrscht sogar nibblisation, langsam wird es glaub ich.
 


News

Zurück
Oben