11371
Suggerimenti e critiche / Re: Spazio " Come si fa "....
« il: 29 Giugno 2010, 13:16:36 »Avevo iniziato la cosa tempo fa (proprio sul wiki) ma nessuno mi ha dato seguito...
Peccato ! Era davvero un'idea molto interessante e geniale.
19/05/2023: A causa di un errore sono stati cancellati, insieme ad account creati da bot, alcuni account legittimi. Si prega di leggere qui: https://www.gambas-it.org/smf/index.php?topic=9733.0
Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.
Avevo iniziato la cosa tempo fa (proprio sul wiki) ma nessuno mi ha dato seguito...
Vedrò di recuperare alcune info delle vecchie FAQ ed inserirle in una pagina del Wiki.
Classi di eventi | Num. identif.vo | |
EV_SEQ_LOCAL | &h80 | |
EV_TIMING | &h81 | |
EV_CHN_COMMON | &h92 | |
EV_CHN_VOICE | &h93 | |
EV_CHN_SYSEX | &h92 |
Classe di evento | Sotto-evento | Num. identif.vo | Tipo di evento | |||
EV_TIMING | TMR_WAIT_REL | 1 | Tempo Delta espresso in tick | |||
TMR_STOP | 3 | Arresto dell'esecuzione | ||||
TMR_START | 4 | Avvio del Timer assoluto | ||||
TMR_CONTINUE | 5 | Continua l'esecuzione dopo l'arresto | ||||
TMR_TEMPO | 6 | Tempo Metronomico espresso in bpm | ||||
TMR_ECHO | 8 | Per la sincronizzazione con la marcatura temporale (Timestamp) | ||||
EV_CHN_COMMON | MIDI_CTL_CHANGE | &hB0 | Control change | |||
MIDI_PGM_CHANGE | &hC0 | Program change | ||||
MIDI_CHN_PRESSURE | &hD0 | Channel Aftertouch | ||||
MIDI_PITCH_BEND | &hE0 | Pitch Bend | ||||
EV_CHN_VOICE | MIDI_NOTEOFF | &h80 | Note OFF | |||
MIDI_NOTEON | &h90 | Note ON | ||||
MIDI_KEY_PRESSURE | &hA0 | Aftertouch Polyphonic |
WRITE #flusso_dati, Chr(Classe) & Chr(device) & Chr(Sotto-evento) & Chr(canale) & Chr(nota) & Chr(velocità) & Chr(0) & Chr(0), 8
WRITE, #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h90) & Chr(0) & Chr(60) & Chr(100) & Chr(0) & Chr(0), 8
WRITE, #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h80) & Chr(0) & Chr(60) & Chr(100) & Chr(0) & Chr(0), 8
WRITE, #flusso_dati, Chr(&h93) & Chr(1) & Chr(&hA0) & Chr(0) & Chr(60) & Chr(100) & Chr(0) & Chr(0), 8
WRITE #flusso_dati, Chr(Classe) & Chr(device) & Chr(Sotto-evento) & Chr(canale) & Chr(valore1) & Chr(valore2) & Chr(0) & Chr(0), 8
WRITE, #flusso_dati, Chr(&h92) & Chr(1) & Chr(&hB0) & Chr(0) & Chr(7) & Chr(100) & Chr(0) & Chr(0), 8
(In questo esempio il valore del Volume è stato posto a 100)
WRITE, #flusso_dati, Chr(&h92) & Chr(1) & Chr(&hC0) & Chr(0) & Chr(70) & Chr(0) & Chr(0) & Chr(0), 8
(In questo esempio è stato scelto lo strumento n. 70: Fagotto)
WRITE, #flusso_dati, Chr(Classe) & Chr(Sotto-evento) & Chr(0) & Chr(0) & Chr(valore1) & Chr(valore2) & Chr(valore3) & Chr(0), 8
WRITE, #flusso_dati, Chr(&h81) & Chr(1) & Chr(0) & Chr(0) & Chr(96) & Chr(0) & Chr(0) & Chr(0), 8
(In questo esempio il valore di TMR_WAIT_REL è stato posto a 96 tick)
WRITE, #flusso_dati, Chr(&h81) & Chr(4) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0), 8
(TMR_START non ha parametri specifici)
' definisce la variabile flusso_dati come file (stream)
Private flusso_dati AS FILE
PUBLIC SUB Form_Open()
flusso_dati = OPEN "/dev/sequencer2" FOR WRITE
END
PUBLIC SUB ButtonAvvio_Click()
' Invio di TMR_START
WRITE, #flusso_dati, Chr(&h81) & Chr(4) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0), 8
' E' possibile impostare il tempo metronomico: 120 bmp
WRITE, #flusso_dati, Chr(&h81) & Chr(6) & Chr(0) & Chr(0) & Chr(120) & Chr(0) & Chr(0) & Chr(0), 8
' 1° evento Midi – Program Change: Fagotto.
WRITE #flusso_dati, Chr(&h92) & Chr(1) & Chr(&hC0) & Chr(0) & Chr(70) & Chr(0) & Chr(0) & Chr(0), 8
' 2° evento Midi – EV_CHN_VOICE - Note ON
WRITE #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h90) & Chr(0) & Chr(60) & Chr(100) & Chr(0) & Chr(0), 8
' Temporizzazione (tempo delta)– TMR_REL = 40 tick
WRITE #flusso_dati, Chr(&h81) & Chr(1) & Chr(0) & Chr(0) & Chr(40) & Chr(0) & Chr(0) & Chr(0), 8
' 3° evento Midi – EV_CHN_VOICE - Note OFF
WRITE #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h80) & Chr(0) & Chr(60) & Chr(100) & Chr(0) & Chr(0), 8
' - - -
' 4° evento Midi – EV_CHN_VOICE - Note ON
WRITE #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h90) & Chr(0) & Chr(72) & Chr(100) & Chr(0) & Chr(0), 8
' Temporizzazione (tempo delta) – TMR_REL = 40 tick
WRITE #flusso_dati, Chr(&h81) & Chr(1) & Chr(0) & Chr(0) & Chr(40) & Chr(0) & Chr(0) & Chr(0), 8
' 5° evento Midi – EV_CHN_VOICE - Note OFF
WRITE #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h80) & Chr(0) & Chr(72) & Chr(100) & Chr(0) & Chr(0), 8
END
PUBLIC SUB Pausa_Click()
WRITE #flusso_dati, Chr(&h81) & Chr(3) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0), 8
WRITE #flusso_dati, Chr(&92) & Chr(1) & Chr(&hB0) & Chr(0) & Chr(123) & Chr(0) & Chr(0) & Chr(0), 8
END
PUBLIC SUB Continua_Click()
WRITE #flusso_dati, Chr(&h81) & Chr(5) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0), 8
END
WRITE #flusso_dati, Chr(&h81) & Chr(8) & Chr(0) & Chr(0) & Chr(valore1) & Chr(valore2) & Chr(valore3) & Chr(valore4), 8
' definisce la variabile flusso_dati come file (stream)
Private flusso_dati AS FILE
PUBLIC SUB Form_Open()
' il dispositivo viene aperto sia per leggere che per scrivere
eco_dati = OPEN "/dev/sequencer2" FOR READ WRITE
END
PUBLIC SUB ButtonProvaTmrEcho_Click()
Dim eco_dati AS STRING
Dim j AS INTEGER
' Invia un Note ON
WRITE #flusso_dati, Chr(&h93) & Chr(1) & Chr(&h90) & Chr(0) & Chr(72) & Chr(100) & Chr(0) & Chr(0), 8
' Quindi invia TMR_ECHO. Nei 4 ultimi byte dovranno essere inseriti 4 numeri a piacere
WRITE #flusso_dati, Chr(&h81) & Chr(8) & Chr(0) & Chr(0) & Chr(valore1) & Chr(valore2) & Chr(valore3) & Chr(valore4), 8
' Legge gli otto dati da "/dev/sequencer2"
READ #flusso_dati, eco_dati, -8
' ' ' '
' Verifica empirica della "chiave" marca temporale (timestamp)
FOR j = 5 to 8
PRINT Asc(eco_dati, j) ' Legge dal 5° valore fino all'8°, cioè appunto i 4 valori costituenti l'integer "chiave"
NEXT
END
Non credo neanch'io.
L'unica è aggirare il problema piazzando sul form una drawing area che copra per intero il form stesso.
Nella drawing area puoi scrivere in qualunque punto tu voglia, specificando le coordinate X,Y del testo che vuoi far apparire.Codice: gambas [Seleziona]Draw.Begin(DrawingArea1)
Draw.Text("testo",X,Y)
Draw.End
Ricorda di usare [RISOLTO] se sei venuto a capo del problema...grazie....
WRITE #file, Chr(2), Chr(valore1) & Chr(valore2) & Chr(valore3), 4
' Chr(2) = valore identificativo di TMR_WAIT_ABS (tempo assoluto)
' valore1 = da 0 a 255. Qui 255 dovrebbe essere = 2,6 secondi (255/96 tick).
' valore2 = da 0 a 255. Qui invece: 1 = 2,6 sec. , e 255 = 663 sec. (255 * 2,6)
' Esempio:
WRITE #file, Chr(2), Chr(255) & Chr(2) & Chr(0), 4
'durata dell'evento Midi = 2,6 + (2,6 * 2) = 7,8 secondi
WRITE #file, Chr(&h81), Chr(2) & Chr(0) & Chr(0), & Chr(valore1), & Chr(valore2), & Chr(valore3), & Chr(valore4), 8
' Gambas class file
PRIVATE midi AS file
PUBLIC SUB Form_open()
DIM device AS String
device = "/dev/sequencer"
' apre il flusso di dati per la scrittura
midi = OPEN device FOR WRITE
END
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PUBLIC SUB ButtonConnessione_Click()
' presuppone il softsynth Timidity installato
' e connette MidiThrough 14:0 a Timidity 128:0
SHELL "aconnect 14:0 128:0"
END
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PUBLIC SUB ButtonInvioDati_Click()
' Invio dei gruppi di dati:
WRITE #midi, Chr(5) & Chr(&hC0) & Chr(0) & Chr(0)& ' definisce l'evento Program Change al canale 1
Chr(5) & Chr(70) & Chr(0) & Chr(0), 8 ' definisce lo strumento musicale
WRITE #midi, Chr(5) & Chr(&h90) & Chr(0) & Chr(0)& ' definisce l'evento Note ON al canale 1
Chr(5) & Chr(60) & Chr(0) & Chr(0)& ' definisce la nota da suonare
Chr(5) & Chr(100) & Chr(0) & Chr(0), 12 ' definisce la velocità di tocco (velocity)
WRITE #midi, Chr(2) & Chr(255) & Chr(2) & Chr(0), 4 ' Temporizzazione con istruzione da 4 byte
WRITE #midi, Chr(5) & Chr(&h80) & Chr(0) & Chr(0)& ' definisce l'evento Note OFF al canale 1
Chr(5) & Chr(60) & Chr(0) & Chr(0)& ' definisce la nota da spegnere
Chr(5) & Chr(100) & Chr(0) & Chr(0), 12 ' definisce la velocità di tocco (velocity)
END