Nella documentazione di libfluidsynth c'è la chiamata alla funzione per l'invio dei sysexSuppongo 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:
Nella documentazione di libfluidsynth c'è la chiamata alla funzione per l'invio dei sysex, ma non è molto chiaro quali sono gestiti e come inviarli.Io ho avuto un pochino a che fare con la libreria libfluidsynth, ma sinceramente non unitamente ai messaggi sysex.
Qualcuno che ha già utilizzato libfluidsynt + gambas3 + sysex può darmi una dritta ?
...la "mosca bianca" lo considero come un complimento....Ovviamente.
mi ha sempre intrigato la gestione MIDI.E' San Midi (https://it.wikipedia.org/wiki/Musical_Instrument_Digital_Interface) che ti manda !
stavo lavorando ad un midi player con Gambas.Se vorrai, potrai inserire il suo codice sorgente nella Sezione "Progetti degli Utenti" qui del forum.
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 ?
.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 (https://it.wikipedia.org/wiki/Musical_Instrument_Digital_Interface) che ti manda !
Sempre sia benedetto il Suo nome !
sanmidi
LOL....CitazioneSe 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 (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.CitazioneMa... 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 passareCitazione[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:
Sicuramente lo scarico e me lo guardo appena posso.Lo potrai scaricare da qua:
sui sysex, non mi è chiara la sintassi e cosa passare.Dovrai fare qualche ricerca in rete. Io pure ne so poco di sysex. :-[
Se devo inserire nel pacchetto del sysex anche la funzione realtime &H7F e quale parametro passare
il terzo parametro dovrebbe essere un puntatore all'array di integer[/font]Il terzo parametro nella funzione è dichiarato come
: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:
Fantastico Vuott, hai trovato un nuovo compagno di giochi!! :P :P :P
+1 :D
Fantastico Vuott, hai trovato un nuovo compagno di giochi!! :P :P :P+1 :D
:violent: :violent:
>:( Una botta in testa a tutte due voi !
Caro Sig. Kicco,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
Cmq dove sono un po bloccato è sui sysex, non mi è chiara la sintassi e cosa passare.Torno su questa tua perplessità.
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:Ovviamente. Ma è la struttura del pacchetto che non mi è ancora chiara.....
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:...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
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 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).
Poi, per il sysex secondo te come primo byte devo mettere o no &H7F come realtime sysex ? BohPoiché 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.
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).
Creating a Real-time MIDI Driver:-\
FluidSynth can process real-time MIDI events received from hardware MIDI ports or other applications. To do so, the client must create a MIDI input driver. It is a very similar process to the creation of the audio driver: you initialize some properties in a settings instance and call the new_fluid_midi_driver() function providing a callback function that will be invoked when a MIDI event is received. ..
E' quello che sto facendo....ci sto sbattendo la testa come al solitoPrego per te:
Ma che forse (da quello che ho letton in giro) Fluidsynth da sysex accetta solo MIDI tuning sysex ?Sei almeno riuscito efficacemente, come test, ad inviare almeno questo messaggio ?
Cmq c'è anche un'altra strada da percorrere.....tutta da esplorare......però cerca di definire in un modo o in un altro la questione, già avviata, dell'uso della funzione esterna fluid_synth_sysex ( ) .
premetto....array di string o bytes non cambia nullaIl 2° parametro della funzione esterna (id est: ...esterna alle funzioni native di Gambas) " fluid_synth_sysex( ) (http://fluidsynth.sourceforge.net/api/synth_8h.html#a28f34d0493b102ac4b99c021257b5b5e) " del sistema libfluidsynth prevede il passaggio di un Puntatore a "char" costante. Poiché il tipo "char" occupa 1 byte (8bit), ne consegue che l'intera area di memoria riservata puntata dal Puntatore ha una dimensione di 1 * numero_di_byte_scritti, come si può evincere da questo test che riprende i dati del tuo esempio:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char src[] = {0x7f, 0x7f, 0x04, 0x01, 0x00, 0x0};
char *sysex = malloc(6);
memcpy(sysex, src, 6);
printf("%ld\n", sizeof(*sysex));
free(sysex);
return (0);
}
Public Sub Main()
Dim sysex As String[] = [&H7F, &H7F, &H04, &H01, 0, 0]
Dim i As Integer
For i = 0 To 47
If i Mod 8 == 0 Then Write "------------ elem. indice " & CStr(i \ 8) & Chr(&0A)
Print i, Hex(Byte@(sysex.Data + i), 2)
Next
Print "=============="
For i = 0 To 47
Print i, String@(Pointer@(sysex.Data + i))
Next
End
SYSEX support (MIDI Tuning Standard only at the moment).
...amico mio...perdiamo solo tempo......Fluidsynth processa solo Sysex di tipo MIDI Tuning Standard.....:o
.... cambiare il tipo di dato dell'array da String[ ] a Byte[ ], poiché la memoria occupata dal tipo di dato "Byte" in Gambas corrisponde alla quantità occupata dal tipo " char " in C, e che da codice è agevolmente costatabile con la seguente istruzione:Vorrei anche segnalare questo mio intervento:
SizeOf(gb.Byte)