Blofeld Sysex & Maxforlive

Dieses Thema im Forum "Controller, Kabel, MIDI / CV" wurde erstellt von sushiluv, 16. September 2018 um 09:30 Uhr.

  1. 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!
     
  2. swissdoc

    swissdoc back on duty

    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...
     
  3. 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.
     
  4. microbug

    microbug |||||||

    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.
     
  5. Vielen Dank, ich werde mal sehen, ob ich mit deinen Infos weiterkomme, das mit MIOS Studio klingt sehr gut!
     
  6. swissdoc

    swissdoc back on duty

    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
    -----------------------------------------------------------
     
  7. 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
     
  8. swissdoc

    swissdoc back on duty

    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
     
  9. 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!
     
  10. microbug

    microbug |||||||

    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".
     
  11. 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: 16. September 2018 um 17:36 Uhr
  12. swissdoc

    swissdoc back on duty

    Ich nehme immer den Calc im Windows und klicke da von HEX auf DEC und umgekehrt. Gibt es aber auch online.
    Gut, dass es nun klappt. Wenn man es kann, ist es einfach, bis man es kann, nicht unbedingt.
     
  13. Ja, spannend werden nochmal die parameter, welche negativ und positiv verstellt werden können :)

    Auf jeden Fall nochmal Danke an euch!
     
  14. microbug

    microbug |||||||

    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.
     
  15. 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.
     
  16. microbug

    microbug |||||||

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

    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.
     
  17. 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: 17. September 2018 um 15:04 Uhr
  18. microbug

    microbug |||||||

    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.
     
  19. swissdoc

    swissdoc back on duty

    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.
     
  20. Wie kann ich Parameterchanges verwenden wenn der Parameter nur mittels sysex erreichbar ist?

    Danke für den Tipp mit dem Sounddiver Manual.
     
  21. microbug

    microbug |||||||

    Sysex Parameter Changes sind doch Sysex, oder was meinst Du?
     
  22. 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 :)
     
  23. Ja, sysex. Dachte swissdoc bezieht sich damit auf CC‘s.
     
  24. 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: 17. September 2018 um 19:37 Uhr
  25. microbug

    microbug |||||||

    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.
     
  26. 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 :)