Autore Topic: Gambas3 e MIDI Sysex con Fluidsynth  (Letto 1158 volte)

Offline genex2000

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Gambas3 e MIDI Sysex con Fluidsynth
« il: 22 Agosto 2017, 14:48:57 »
Salve a tutti,
sto lavorando con libfluidsynth e Gambas e la cosa funziona piuttosto bene, avrei solo un problema :
qualcuno conosce i messaggi MIDI Sysex per il volume/mute/unmute di un canale e il sysex per il traspose ?
Nella documentazione di libfluidsynth c'è la chiamata alla funzione per l'invio dei sysex, ma non è molto chiaro quali sono gestiti e come inviarli.
Qualcuno che ha già utilizzato libfluidsynt  + gambas3 + sysex può darmi una dritta ?
Grazie a tutti
Genex

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #1 il: 22 Agosto 2017, 15:55:02 »
Innanzitutto vorrei porgerti i miei complimenti e felicitazioni per l'argomento da te affrontato: sei una mosca bianca.


Nella documentazione di libfluidsynth c'è la chiamata alla funzione per l'invio dei sysex
Suppongo tu stia facendo riferimento alla funzione " fluid_synth_sysex( ) ".


qualcuno conosce i messaggi MIDI Sysex per il volume/mute/unmute di un canale e il sysex per il traspose ?
in giro ho trovato questo per la gestione via syssex del Volume nei dispositivi Midi multitimbrici:
http://midi.teragonaudio.com/tech/midispec/mastrvol.htm



Nella documentazione di libfluidsynth c'è la chiamata alla funzione per l'invio dei sysex, ma non è molto chiaro quali sono gestiti e come inviarli.
Qualcuno che ha già utilizzato libfluidsynt  + gambas3 + sysex può darmi una dritta ?
Io ho avuto un pochino a che fare con la libreria libfluidsynth, ma sinceramente non unitamente  ai messaggi sysex.
Dovresti cercare in rete qualche esempio scritto in un altro linguaggio, per esempio in C. Poi si potrebbe ovviamente adattare a Gambas.

Ad ogni modo - da un primo sguardo - facendo riferimento alla descrizione della funzione specifica per i sysex, qui descritta:
http://fluidsynth.sourceforge.net/api/synth_8h.html#a28f34d0493b102ac4b99c021257b5b5e

mi sembrano particolarmente rilevanti ai tuoi fini il secondo ed il terzo parametro.
Il secondo parametro è un Puntatore ad un'area riservata di memoria, nella quale tu hai scritto tutti i valori nel messaggio sysex, esclusi il primo F0 e quello di fine F7.
Il terzo parametro più semplicemente indica con un Intero la quantità di dati sysex passati mediante il 2° parametro.
« Ultima modifica: 22 Agosto 2017, 17:15:38 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline genex2000

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #2 il: 22 Agosto 2017, 22:59:54 »
Beh, Senatore...la "mosca bianca" lo considero come un complimento....LOL e comunque mi ha sempre intrigato la gestione MIDI.
Ti ringrazio per il link fornitomi e (rete permettendo visto che sono in vacanza al mare)  a titolo informativo, la prima parte (ovvero la gestione del volume/mute/unmute) l'ho risolta con il CC 07 ovvero
:
Private Extern fluid_synth_cc(synth As Pointer, chan As Integer, ctrl As Integer, ival As Integer) As Integer

dove :synth è l'handler
ctr = &H07
chan è il canale-1
e iVal il valore da impostare

l'unica cosa che potrebbe accadere è che da flusso MIDI si ha una modifica del parametro Volume per quel determinato canale, quindi il CC diviene di fatto "inutile".

Per il sysex relativo al traspose, sono un po imballato....cmq mi vedo tutti link che mi hai postato....e farò sapere.

Poi se interessa a qualcuno, appena pronto , stavo lavorando ad un midi player con Gambas..
Nel frattempo Ti ringrazio e ringrazio anche chi solo semplicemente ha letto il mio post.
Genex

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #3 il: 22 Agosto 2017, 23:58:55 »
...la "mosca bianca" lo considero come un complimento....
Ovviamente.



mi ha sempre intrigato la gestione MIDI.
E' San Midi che ti manda !   
Sempre sia benedetto il Suo nome !
 sanmidi



stavo lavorando ad un midi player con Gambas.
Se vorrai, potrai inserire il suo codice sorgente nella Sezione "Progetti degli Utenti" qui del forum.
Io ne ho fatto uno tempo fa con le funzioni esterne di ALSA. Non so se hai avuto modo di vederlo.


Hai, inoltre, visto le pagine dedicate al rapporto Gambas e Midi della nostra wiki ?
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Gestione_dei_dati_MIDI_e_dei_file_.mid



l'unica cosa che potrebbe accadere è che da flusso MIDI si ha una modifica del parametro Volume per quel determinato canale, quindi il CC diviene di fatto "inutile".
Ma... invece tu vorresti silenziare tutti i canali e non solo uno ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline genex2000

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #4 il: 23 Agosto 2017, 13:58:33 »
 ;D grande vuott...
Citazione
.SAN MIDI ? LOL
Cmq, per il mute/unmute di una singola traccia come ti dicevo, ho risolto in parte e per adesso va bene così.

Citazione

E' San Midi che ti manda !   
Sempre sia benedetto il Suo nome !
 sanmidi

LOL....


Citazione
Se vorrai, potrai inserire il suo codice sorgente nella Sezione "Progetti degli Utenti" qui del forum.
Io ne ho fatto uno tempo fa con le funzioni esterne di ALSA. Non so se hai avuto modo di vederlo.
Hai, inoltre, visto le pagine dedicate al rapporto Gambas e Midi della nostra wiki ?
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Gestione_dei_dati_MIDI_e_dei_file_.mid

Sicuramente lo scarico e me lo guardo appena posso.

Citazione
Ma... invece tu vorresti silenziare tutti i canali e non solo uno ?
 

No, solo uno o + canali.
Cmq dove sono un po bloccato è sui sysex, non mi è chiara la sintassi e cosa passare.
Se devo inserire nel pacchetto del sysex anche la funzione realtime &H7F e quale parametro passare


Citazione
[size=0px]mi sembrano particolarmente rilevanti ai tuoi fini il secondo ed il terzo parametro.[/size][size=0px]Il secondo parametro è un Puntatore ad un'area riservata di memoria, nella quale tu hai scritto tutti i valori nel messaggio sysex, esclusi il primo F0 e quello di fine F7.Il terzo parametro più semplicemente indica con un Intero la quantità di dati sysex passati mediante il 2° parametro.
[/size]
Citazione

il terzo parametro dovrebbe essere un puntatore all'array di integer


Cmq per gli sviluppi, Ti (vi) tengo aggiornati

 :ok:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #5 il: 23 Agosto 2017, 15:36:12 »
Sicuramente lo scarico e me lo guardo appena posso.
Lo potrai scaricare da qua:
http://www.gambas-it.org/smf/index.php?board=12.0

In particolare:
Sequencer Midi + Console Midi
e vedi anche:
Gambas Midi Controller



sui sysex, non mi è chiara la sintassi e cosa passare.
Se devo inserire nel pacchetto del sysex anche la funzione realtime &H7F e quale parametro passare
Dovrai fare qualche ricerca in rete. Io pure ne so poco di sysex.  :-[
Magari, però, se trovo qualcosa, ti avviso.



il terzo parametro dovrebbe essere un puntatore all'array di integer[/font]
Il terzo parametro nella funzione è dichiarato come
 int len
...perché dici array di integer ?    ???
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.700
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #6 il: 23 Agosto 2017, 16:01:15 »
 :ciao:
Fantastico Vuott, hai trovato un nuovo compagno di giochi!!  :P :P :P
Ora all'altare di San Midi vedo molte candeline accese e tanti fiori!!
Prepariamo insieme la Sagra di San Midi? Che dite?

@genex2000
se già tu non lo avessi scoperto, Vuott è l'autore di molta (quasi tutta credo) la documentazione della Wiki su "Midi & Company" e non solo....
e il nostro intercessore (se così si dice) presso San Midi! :D

 :ciao: :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.139
  • Tonno verde
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #7 il: 23 Agosto 2017, 16:43:41 »
:ciao:
Fantastico Vuott, hai trovato un nuovo compagno di giochi!!  :P :P :P
Ora all'altare di San Midi vedo molte candeline accese e tanti fiori!!
Prepariamo insieme la Sagra di San Midi? Che dite?

@genex2000
se già tu non lo avessi scoperto, Vuott è l'autore di molta (quasi tutta credo) la documentazione della Wiki su "Midi & Company" e non solo....
e il nostro intercessore (se così si dice) presso San Midi! :D

 :ciao: :ciao:

+1  :D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #8 il: 23 Agosto 2017, 17:24:26 »
Fantastico Vuott, hai trovato un nuovo compagno di giochi!!  :P :P :P

+1  :D

 :violent: :violent:

 >:( Una botta in testa a tutte due voi !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.700
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #9 il: 23 Agosto 2017, 18:07:31 »
Fantastico Vuott, hai trovato un nuovo compagno di giochi!!  :P :P :P

+1  :D

 :violent: :violent:


 >:( Una botta in testa a tutte due voi !

Sig. Moderatore Globale, chiedo il suo intervento immediato. Una botta in testa è un conto ma ben due (smiley)!
Qui i neuroni son già pochi se poi vengono maltrattati! Dove andremo a finire!  :P
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.139
  • Tonno verde
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #10 il: 23 Agosto 2017, 18:27:41 »
Fantastico Vuott, hai trovato un nuovo compagno di giochi!!  :P :P :P

+1  :D

 :violent: :violent:


 >:( Una botta in testa a tutte due voi !

Sig. Moderatore Globale, chiedo il suo intervento immediato. Una botta in testa è un conto ma ben due (smiley)!
Qui i neuroni son già pochi se poi vengono maltrattati! Dove andremo a finire!  :P
Caro Sig. Kicco,
cosa vuole che le dica, ho un tale mal di testa che mi è proprio impossibile prendere provvedimenti.
Ma appena mi passa... >:( :evil:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #11 il: 23 Agosto 2017, 19:11:20 »
Cmq dove sono un po bloccato è sui sysex, non mi è chiara la sintassi e cosa passare.
Se devo inserire nel pacchetto del sysex anche la funzione realtime &H7F e quale parametro passare
Torno su questa tua perplessità.

Innanzitutto la domanda è:
tu sai - al di là dei dati che dovrai passare - come passare i dati (il "pacchetto" sysex) attraverso quel 2° parametro ?
Voglio dire: "quale" risorsa di Gambas utilizzare e soprattutto "come" ?


Riguardo al "pacchetto" un esempio è nella pagina che ti ho segnalato:
http://midi.teragonaudio.com/tech/midispec/mastrvol.htm
alla quale aggiungerei quest'altra anche:
https://www.midi.org/specifications/item/table-4-universal-system-exclusive-messages

Delle 7 parti, costituenti il Messaggio sysex, la 4° e la 5° individuano il messaggio di Master Volume. La 6° parte, composta a sua volta da due byte, definisce i valori specifici del Master Volume.
In particolare, di questi due byte (16 bit) possono essere utilizzati, ai fini della definizione del valore del Master Volume, soltanto 14 bit. Pertanto l'ambitus dei valori assegnabili al messaggio sysex di Master Volume va da un minimo di zero (0x0000) ad un massimo di 16383 (0x3FFF).

Ricorda che la guida alla funzione " fluid_synth_sysex( ) " dice che " (not including 0xF0 and 0xF7) " ...devi omettere nel "pacchetto" il byte di inizio e quello di fine del messaggio di sysex.


Ho trovato queste pagine:
https://stackoverflow.com/questions/26394515/how-to-create-midi-sysex-master-volume-message-from-volume-level
https://www.midi.org/forum/668-change-midi-keyboard-master-volume-programmatically
http://www.recordingblogs.com/sa/Wiki/topic/MIDI-Master-Volume-message
https://www.karma-lab.com/forum/showthread.php?t=15608
http://www.casiomusicforums.com/index.php?/topic/6156-has-anyone-got-master-volume-controlled-by-midi/
http://www.bandtrax.com.au/sysex.htm
https://github.com/ahlstromcj/midicvt/blob/master/contrib/sysex-format.txt
http://forums.rolandclan.com/viewtopic.php?f=54&t=47933#p274653
« Ultima modifica: 23 Agosto 2017, 20:17:29 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline genex2000

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #12 il: 24 Agosto 2017, 15:35:47 »
Citazione
Torno su questa tua perplessità.

Innanzitutto la domanda è:
tu sai - al di là dei dati che dovrai passare - come passare i dati (il "pacchetto" sysex) attraverso quel 2° parametro ?
Voglio dire: "quale" risorsa di Gambas utilizzare e soprattutto "come" ?

Si, la chiamata è questa:
Private Extern fluid_synth_sysex(synth As Pointer, data As Pointer, len As Integer, response As Pointer, response_len As Pointer, handled As Pointer, dryrun As Integer) As Integer

response e response_len non sono significativi al momento
mentre data è il puntatore ad un array di integer e len è la lunghezza del  pacchetto sysex.
Per handled e dryrun non mi è tanto chiaro quali valori passare.
Poi, per il sysex secondo te come primo byte devo mettere o no &H7F come realtime sysex ? Boh
 Per il volume ho risolto, c'è il Midi CC &H07

Citazione
Riguardo al "pacchetto" un esempio è nella pagina che ti ho segnalato:
http://midi.teragonaudio.com/tech/midispec/mastrvol.htm
alla quale aggiungerei quest'altra anche:
https://www.midi.org/specifications/item/table-4-universal-system-exclusive-messages

Delle 7 parti, costituenti il Messaggio sysex, la 4° e la 5° individuano il messaggio di Master Volume. La 6° parte, composta a sua volta da due byte, definisce i valori specifici del Master Volume.
In particolare, di questi due byte (16 bit) possono essere utilizzati, ai fini della definizione del valore del Master Volume, soltanto 14 bit. Pertanto l'ambitus dei valori assegnabili al messaggio sysex di Master Volume va da un minimo di zero (0x0000) ad un massimo di 16383 (0x3FFF).

Ricorda che la guida alla funzione " fluid_synth_sysex( ) " dice che " (not including 0xF0 and 0xF7) " ...devi omettere nel "pacchetto" il byte di inizio e quello di fine del messaggio di sysex.
Ovviamente. Ma è la struttura del pacchetto che non mi è ancora chiara.....

Citazione
Ho trovato queste pagine:
https://stackoverflow.com/questions/26394515/how-to-create-midi-sysex-master-volume-message-from-volume-level
https://www.midi.org/forum/668-change-midi-keyboard-master-volume-programmatically
http://www.recordingblogs.com/sa/Wiki/topic/MIDI-Master-Volume-message
https://www.karma-lab.com/forum/showthread.php?t=15608
http://www.casiomusicforums.com/index.php?/topic/6156-has-anyone-got-master-volume-controlled-by-midi/
http://www.bandtrax.com.au/sysex.htm
https://github.com/ahlstromcj/midicvt/blob/master/contrib/sysex-format.txt
http://forums.rolandclan.com/viewtopic.php?f=54&t=47933#p274653
...per tutti questi links devo chiedere il divorzio a mia moglie visto che sono ancora in vacanza....LOL ... cmq con calma me li guardo tutti


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #13 il: 24 Agosto 2017, 16:43:26 »
Per handled e dryrun non mi è tanto chiaro quali valori passare.
...io, almeno inizialmente, passerei il valore di default previsto da Gambas per il tipo di dato Puntatore, ossia 0 (zero).

Vedi al riguardo:
http://gambaswiki.org/wiki/lang/type



Poi, per il sysex secondo te come primo byte devo mettere o no &H7F come realtime sysex ? Boh
Poiché la guida di Libfluidsynth ci dice che i byte di inizio e di fine di un Messaggio sysex non vanno inseriti, credo che il primo valore sia appunto quello da te indicato: il real-time.

Hai già in mente "come" scrivere quei valori nell'area puntata da "data As Pointer" ?



Ma è la struttura del pacchetto che non mi è ancora chiara.....
Capisco. Ovviamente in parte dipende dal messaggio che vuoi inviare. (Da quel che mi dici il messaggio di Master Volume lo hai messo da parte, perché adotterai la soluzione del Control Change).
Qualcosa sta in alcune pagine, di cui ti ho sopra riportato i collegamenti..... la cui visita potrebbe determinare il tuo divorzio.   ;D

« Ultima modifica: 24 Agosto 2017, 16:50:44 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Gambas3 e MIDI Sysex con Fluidsynth
« Risposta #14 il: 24 Agosto 2017, 16:48:56 »
Comunque in questi casi difficili io procedo sempre per prove e tentativi.   
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »