Novation SL MKII checksum Roland errato

  • giannirsc
  • Membro: Supporter
  • Risp: 13094
  • Loc: Roma
  • Thanks: 853  

17-01-24 18.59

Non ho più la novation e non posso aiutarti comunque ben venga se hai trovato la soluzione...prova a pilotare l hammond sul ch2 e vedi se va.. ricordo che a me funzionava solo sul canale Midi il Global Channel era configurato sul 16.
Ora non ricordo bene perché parliamo più di 10 anni fa ma mi sembra che su Integra 7 puoi abilitare La trasmissione dei Sys ex... una volta abilitato Se vai nella videata della gestione dell'organo Hammond se cambi il valore dei brawbar tramite il knob sul pannello di integra, ad ogni cambio di valore ti invia il sysex relativo... ricordo che avevo iniziato anche a gestire i parametri dell'effetto Rotary
  • Acoltemp
  • Membro: Senior
  • Risp: 330
  • Loc: Bari
  • Thanks: 54  

19-01-24 09.12

@ michelet
A pagina 35 del manuale di SLxxmkII si legge:
ROLAND: il messaggio Sysex contiene due byte variabili e un byte di checksum. Il formato del messaggio è fisso, in modo che che gli ultimi tre byte della stringa sono sempre MSB, poi LSB e poi checksum (escluso il byte F7).
Apparentemente dovrebbe funzionare, perché gli ultimi tre byte corrispondono all'ADDRESS del parametro, poi viene il valore del parametro stesso, infine il diabolico checksum.

Visto che il supporto Novation è sempre molto reattivo e risponde in tempi brevi, ti consiglierei di contattarli.
Con un po' di ritardo.
L'istruzione MIDI di SysEx è un messaggio proprietario di ciascuna Marca e può non accomunarsi con altre (invece altre istruzioni, come il "Note On", sono messaggi Standard e pertanto devono avere formato standard per essere trasmessi e letti da tutte le tastiere).
Un manuale della Roland così riporta l'istruzione MIDI di SysEx
Es.
F0 41 10 42 12 41 00 00 00 04 0E 0A 23 F7
ovvero
(1) (2) (3) (4) (5) AddressInstr CheckSum (13)
con
(1) Exclusive status (F0 è il byte di partenza dell'istruzione sys ex)
(2) ID Roland
(3) Device ID
(4) Model ID (GS)
(5) Command ID (RQ1)
(13) End of Exclusive (F7 è il byte di chiusura del sys ex)

L'AddressInstr
è la particolare istruzione da inviare (es. Voice Reserve, Reverb Macro, Chorus Macro, Scale Tuning, ...) ed è formato da 4 sino a 6 byte (che possono tutti variare).
Il checksum
è il byte di controllo dell'integrità dell'istruzione completa ed è determinato in modo tale che il resto della somma dell' "AddressInstr" diviso 128 sommato al checksum dia 128 (80h in esadecimale).

Nell'esempio:
Resto[(41h+00h+00h+00h+04h+0E+0Ah)/80h] + CS = 80h
Risulta che
somma = 65+0+0+0+4+14+10=93
divisione 93/128 dà quoziente 0 e resto 93
CS = 128 - 93 = 35 = 23h
  • GBCKEYBOARD
  • Membro: Guest
  • Risp: 25
  • Loc: Treviso
  • Thanks: 1  

21-01-24 09.11

Grazie per le ultime risposte.

Ho trovato la spiegazione che potrebbe essere utile a coloro che usano Novation SL MKii e/o Roland Integra7.

Inizialmente non funzionava la trasmissione dati sysex  tra SL MKII e Integra7 e questo era dovuto probabilmente a un mio errore; ciò mi ha portato ad approfondire trovando che:

1. Novation SL MKII  calcola il cheksum Roland partendo sempre dal quinto byte.
Il checksum è quindi corretto solo per gli strumenti Roland che hanno un ID strumento composto solo da 1  byte (1 numero).
In questo caso infatti è dal quinto byte che inizia l'addess del parametro da modificare.
Ad esempio Roland JV1080 ha:

41(ID Roland)    17( canale)   6A (ID strumento)    12 (DT1)   --> inizio calcolo ckechsum sia per roland che per SL MKII --> 00 00 ........(Address)     CS (checksum).

Integra7 però ha un ID strumento composto da 3 byte:

41(ID Roland)    17( canale)   00   00  (ID1-2 strumento) --> inizio calcolo checksum per SL MKII  -->  64 (ID3 strumento)    12 (DT1)   --> inizio calcolo ckechsum per roland --> 00 00 ........(Address)     CS (checksum).

Quindi SL MKII considera nel checksum anche i byte 64 e 12 che non centrano con l'addess calcolando così un checksum sbagliato.
Questo l'ho verificato anche con un mio vecchio sequencer Roland  MV30 del 1990  che ha una funzione per calcolare il checksum e anche lui lo calcola dal quinto byte e dunque fornisce un checksum per l'Integra7 uguale a quello calcolato con la SL MKII (cioè sbagliato).

[CONCLUSIONE 1: SL MKII calcola in modo corretto il checksum roland solo per gli strumenti roland più vecchi (quelli che hanno un unico byte per ID strumento)

2.  Allora Integra7 non dovrebbe rispondere a questi sysex con checksum errato.
E invece lo fa.

Ho accertato che nel mio strumento, aggiornato all'ultimo firmware 1.21, il parametro viene modificato qualunque valore assuma il byte che rappresenta il checksum del sysex quindi da 00 a 7F.
L'importante è che, dopo il byte che rappresenta il valore da modificare, ci sia sempre il dodicesimo byte che rappresenta il checksum, giusto o sbagliato che sia.

Ad esempio il sysex con checksum corretto per impostare il reverbero generale su Room2 è:

(F0)  41 17 00 00 64 12    18 00 06 00    02    60 (F7) (checksum corretto)

ma lo stesso risultato si ottiene con un qualunque  sysex:

(F0)  41 17 00 00 64 12    18 00 06 00    02    XX  (F7)   ( con XX un qualsiasi valore tra 00 a 7F).

CONCLUSIONE 2: Integra7 risponde alla modifica di un singolo parametro tramite sysex anche senza calcolare il checksum; l'importante è che il messaggio sia composto di dodici byte.

Ora riesco a modificare qualunque parametro dell'Integra7 con la SLMKii tramite i sysex.