Differenze tra le versioni di "Alsa e Gambas: Client e porte in Ricezione"
Da Gambas-it.org - Wikipedia.
Riga 9: | Riga 9: | ||
Private outport As Integer | Private outport As Integer | ||
Private inport As Integer | Private inport As Integer | ||
− | + | ||
− | |||
Public dclient As Byte | Public dclient As Byte | ||
Public dport As Byte | Public dport As Byte | ||
Riga 38: | Riga 37: | ||
' ''int snd_seq_client_id(snd_seq_t * seq)'' | ' ''int snd_seq_client_id(snd_seq_t * seq)'' | ||
Private Extern snd_seq_client_id(seq As Pointer) As Integer | Private Extern snd_seq_client_id(seq As Pointer) As Integer | ||
− | |||
− | |||
− | |||
Riga 59: | Riga 55: | ||
If err < 0 Then error.Raise("Errore nella creazione della porta di Alsa !") | If err < 0 Then error.Raise("Errore nella creazione della porta di Alsa !") | ||
inport = err | inport = err | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
Riga 85: | Riga 76: | ||
+ | <P>Quindi inseriremo le funzioni per la gestione degli errori:</p> | ||
+ | |||
+ | '' ### GESTIONE DELL'ERRORE ### '' | ||
+ | |||
+ | Private Extern snd_strerror(err As Integer) As Pointer | ||
+ | |||
+ | '''Public''' Sub errmsg(err As Integer) As String | ||
+ | |||
+ | Return String@(snd_strerror(err)) | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Private''' Sub printerr(operation As String, err As Integer) | ||
+ | If err < 0 Then Print operation; ": err="; err; " ("; errmsg(err); ")" | ||
+ | '''End''' | ||
Versione delle 09:47, 30 ago 2011
Per la creazione del nostro Client e delle sue porte e per consentirne il collegamento ad ALSA, nella classe secondaria CAlsa.class richiameremo e porremo sostanzialmente tutte le funzioni, la libreria e le necessarie dichiarazioni di variabili che abbiamo conosciuto nel precedente progetto per l'invio dei dati Midi:
' Gambas class file Export Public handle As Pointer Private id As Integer Private outport As Integer Private inport As Integer Public dclient As Byte Public dport As Byte Library "libasound:2" Const SND_SEQ_OPEN_DUPLEX As Integer = 3 ' #define SND_SEQ_PORT_CAP_WRITE (1<<1) Const SND_SEQ_PORT_CAP_WRITE As Integer = 2 ' #define SND_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) Const SND_SEQ_PORT_TYPE_MIDI_GENERIC As Integer = 2 Const SND_SEQ_PORT_TYPE_APPLICATION As Integer = 1048576 ' (1<<20) ' int snd_seq_open(snd_seq_t **seqp, const char * name, Int streams, Int mode); Private Extern snd_seq_open(Pseq As Pointer, name As String, streams As Integer, mode As Integer) As Integer ' int snd_seq_set_client_name(snd_seq_t* seq, const char* name) Private Extern snd_seq_set_client_name(seq As Pointer, name As String) As Integer ' int snd_seq_create_simple_port(snd_seq_t* seq, const char* name, unsigned int caps, unsigned int type) Private Extern snd_seq_create_simple_port(seq As Pointer, name As String, caps As Integer, type As Integer) As Integer ' int snd_seq_client_id(snd_seq_t * seq) Private Extern snd_seq_client_id(seq As Pointer) As Integer Public Sub alsa_open(myname As String) Dim err As Integer err = snd_seq_open(VarPtr(handle), "default", SND_SEQ_OPEN_DUPLEX, 0) printerr("Apertura di Alsa regolare !", err) If err < 0 Then error.RAISE("Errore nell'apertura di ALSA !") snd_seq_set_client_name(handle, myname) id = snd_seq_client_id(handle) Print "Alsa Client-ID ="; id ' per poter leggere la propria porta viene posta con capacità "Write", ossia "scrivibile" da parte di ALSA err = snd_seq_create_simple_port(handle, "Seq-Out", SND_SEQ_PORT_CAP_WRITE, SND_SEQ_PORT_TYPE_MIDI_GENERIC + SND_SEQ_PORT_TYPE_APPLICATION) Print "Numero della porta input dell'applicazione-Client ="; err If err < 0 Then error.Raise("Errore nella creazione della porta di Alsa !") inport = err End ' int snd_seq_connect_from(seq as pointer, myport as integer, src_client as integer, src_port as integer) Private Extern snd_seq_connect_from(seq As Pointer, myport As Integer, src_client As Integer, src_port As Integer) As Integer Public Sub setdevice(client As Integer, port As Integer) Dim err As Integer dclient = client dport = port err = snd_seq_connect_from(handle, inport, id, outport) printerr("Subscribe inport", err) If err < 0 Then error.Raise("Error subscribe output device") ' gestione dell'errore End
Quindi inseriremo le funzioni per la gestione degli errori:
### GESTIONE DELL'ERRORE ### Private Extern snd_strerror(err As Integer) As Pointer Public Sub errmsg(err As Integer) As String Return String@(snd_strerror(err)) End Private Sub printerr(operation As String, err As Integer) If err < 0 Then Print operation; ": err="; err; " ("; errmsg(err); ")" End
<< Pagina in costruzione >>