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
Private outq 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
 
' ''int snd_seq_alloc_named_queue(snd_seq_t * seq, CONST char * name)''
 
Private Extern snd_seq_alloc_named_queue(seq As Pointer, name As String) 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
 
+
   
  err = snd_seq_alloc_named_queue(handle, "outqueue")
 
  printerr("Creating queue", err)
 
  If err < 0 Then error.Raise("Error creating out queue")
 
  outq = 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 >>