Conoscere con le funzioni esterne di PortAudio i dispositivi audio presenti nel sistema

Da Gambas-it.org - Wikipedia.
Versione del 8 lug 2014 alle 17:29 di Vuott (Discussione | contributi) (Creata pagina con 'La libreria '''PortAudio''' è una libreria per la gestione in tempo reale dei dati audio in entrata ed in uscita. Essa fa parte di un assortimento di API e librerie create pe...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

La libreria PortAudio è una libreria per la gestione in tempo reale dei dati audio in entrata ed in uscita. Essa fa parte di un assortimento di API e librerie create per la musica e per altri media.

E' possibile con alcune funzioni esterne della libreria PortAudio conoscere i dispositivi audio presenti nel proprio sistema. Sarà necessario avere installata nel proprio sistema la libreria condivisa: libportaudio.so.2.0.0


Mostriamo di seguito un possibile codice:

Public Struct PaDeviceInfo
  structVersion As Integer
  name As Pointer
  maxInputChannels As Integer
  maxOutputChannels As Integer
  numSampleRates As Integer     ' Number of discrete rates, or -1 if range supported.
  sampleRates As Float          ' Array of supported sample rates, or {min,max} if range supported.
  nativeSampleFormats As Long
End Struct


Library "libportaudio:2.0.0"

Private Const paNoError As Integer = 0

' PaError Pa_Initialize(void)
' Library initialization function - call this before using PortAudio.
' This function initializes internal data structures and prepares underlying host APIs for use.
Private Extern Pa_Initialize() As Integer

' PaDeviceIndex Pa_GetDeviceCount(void)
' Retrieve the number of available devices. The number of available devices may be zero.
Private Extern Pa_GetDeviceCount() As Integer

' const PaDeviceInfo * Pa_GetDeviceInfo(PaDeviceIndex device)
' Retrieve a pointer to a PaDeviceInfo structure containing information about the specified device.
Private Extern Pa_GetDeviceInfo(device As Integer) As PaDeviceInfo

' PaDeviceIndex Pa_GetDefaultInputDevice(void)
' Retrieve the index of the default input device.
Private Extern Pa_GetDefaultInputDevice() As Integer

' PaDeviceIndex Pa_GetDefaultOutputDevice(void)
' Retrieve the index of the default output device.
Private Extern Pa_GetDefaultOutputDevice() As Integer

' PaError Pa_Terminate(void)
' Library termination function - call this when finished using PortAudio.
Private Extern Pa_Terminate() As Integer

' const char *Pa_GetErrorText(PaError errnum)
' Translates the supplied PortAudio error number into a human readable message.
Private Extern Pa_GetErrorText(errnum As Integer) As String


Public Sub Main()

 Dim err, i, j, numDevices As Integer
 Dim pdi As New PaDeviceInfo
 Dim defI, defO, ag1, ag2 As String


  err = Pa_Initialize()
  If err < 0 Then Error.Raise("Impossibile inizializzare la libreria 'PortAudio': " & Pa_GetErrorText(err))

  numDevices = Pa_GetDeviceCount()
  If numDevices < 0 Then Error.Raise("Impossibile rilevare la presenza di dispositivi audio: " & Pa_GetErrorText(err))
   
  Print "Numbero di dispositivi = "; numDevices
   
  For i = 0 To numDevices - 1
     
    defI = Null
    defO = Null
    ag1 = Null
    ag2 = Null
     
    pdi = Pa_GetDeviceInfo(i)
     
    Print "\n--------------------------------------- dispositivo #"; i
     
    j = 0
     
    If i = Pa_GetDefaultInputDevice() Then
      defI = "\n[ Default Input"
      j = 1
    Endif
    
    If i = Pa_GetDefaultOutputDevice() Then
      If j Then
        ag1 = ","
      Else
        ag1 = "["
      Endif
      defO = " Default Output"
      j = 1
    Endif
     
    If j = 1 Then ag2 = " ]"
     
    Print defI; ag1; defO; ag2
     
' Scrive i campi relativi alle informazioni di ciascun dispositivo audio rilevato:
    Print "Nome = "; String@(pdi.name)
    Print "Max Entrate = "; pdi.maxInputChannels, ", Max Uscite = "; pdi.maxOutputChannels
     
  Next
   

' Va in chiusura: 
  Pa_Terminate()

End


Riferimenti

[1] La pagina del API di PortAudio 2.0