Differenze tra le versioni di "Rilevare se la scheda audio sta processando dati audio"

Da Gambas-it.org - Wikipedia.
 
(21 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Per rilevare se una o più schede audio, e quali loro dispositivi, stanno eventualmente processando dati audio, è possibile utilizzare questo codice:
 
Per rilevare se una o più schede audio, e quali loro dispositivi, stanno eventualmente processando dati audio, è possibile utilizzare questo codice:
  '''Public''' Sub Main()
+
  Private Const ASOUND As String = "/proc/asound"
 
   
 
   
   Dim i As Integer
+
 +
Public Sub Main()
 +
 
 +
   Dim c As Byte
 
   Dim ss As New String[]
 
   Dim ss As New String[]
   Dim b, j As Byte
+
   Dim ca, pc, su As String
  Dim s As String
 
 
    
 
    
 
  <FONT color=gray>' ''Verifica innanzitutto quante schede audio sono rilevate dal sistema:''</font>
 
  <FONT color=gray>' ''Verifica innanzitutto quante schede audio sono rilevate dal sistema:''</font>
   i = Dir("/proc/asound", "card*", gb.Directory).Count
+
   Print "Il sistema ha rilevato num. " & Dir(ASOUND, "card*", gb.Directory).Count & " Schede audio:"
  Print "Il sistema ha rilevato num. " & i & " Schede audio:"
+
 
     
+
   ss = Split(File.Load(ASOUND &/ "cards"), gb.NewLine)
<FONT color=gray>' ''Quindi verifica quali dispositivi di quali schede audio stanno eventualmente processando segnali audio:''</font>
 
   ss = Split(File.Load("/proc/asound/cards"), Chr(10))
 
 
    
 
    
 
   Repeat
 
   Repeat
     If InStr(ss[b], "]:") > 0 Then  
+
     If InStr(ss[c], "]:") == 0 Then
       Print "\n\n"; ss[b]
+
       ss.Remove(c, 1)
      For Each s In Dir("/proc/asound/card" & CStr(j), "pcm*p", gb.Directory)
+
    Else
        Print "Device: /card"; j; "/"; s
+
      Inc c
         If InStr(File.Load("/proc/asound/card" & CStr(j) &/ s &/ "sub0/status"), "RUNNING") > 0 Then
+
    Endif
 +
  Until c == ss.Count
 +
 
 +
  c = 0
 +
 
 +
<FONT color=gray>' ''Mostra i dispositivi delle schede audio rilevate evidenziando quello che sta eventualmente processando segnali audio:''</font>
 +
  For Each ca In Dir(ASOUND, "card*", gb.Directory)
 +
    Print "\n\n"; ss[c]
 +
    For Each pc In Dir(ASOUND &/ ca, "pcm*p", gb.Directory)   ' <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 +
      Print "   [Dispositivo    ]: " &/ ca &/ "\e[1m"; pc
 +
      For Each su In Dir(ASOUND &/ ca &/ pc, "sub*", gb.Directory)
 +
         If InStr(File.Load(ASOUND &/ ca &/ pc &/ su &/ "status"), "RUNNING") > 0 Then
 
           Print "\e[32mQuesto dispositivo della scheda audio sta processando segnali audio !\e[0m"
 
           Print "\e[32mQuesto dispositivo della scheda audio sta processando segnali audio !\e[0m"
 
         Else
 
         Else
           Print "\e[31mQuesto dispositivo della scheda audio non sta processando alcun segnale audio.\e[0m"
+
           Print "\e[0m\e[31mQuesto dispositivo della scheda audio non sta processando alcun segnale audio.\e[0m"
 
         Endif
 
         Endif
 
       Next
 
       Next
      Inc j
+
     Next
     Endif
+
     Inc c
     Inc b
+
   Next
   Until b > i
 
 
    
 
    
  '''End'''
+
  End
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Da rilevare che, se il dispositivo audio termina con la lettera "p" (ad esempio: pcm0'''p''' ), allora esso è un dispositivo di ''esecuzione'' dei dati audio. Infatti "p" sta per "PLAYBACK".
 +
<BR>Se il dispositivo audio termina invece con la lettera "c" (ad esempio: pcm0'''c''' ), allora esso è un dispositivo di ''registrazione'' di dati audio. Infatti "c" sta per "CAPTURE".

Versione attuale delle 12:26, 13 gen 2024

Per rilevare se una o più schede audio, e quali loro dispositivi, stanno eventualmente processando dati audio, è possibile utilizzare questo codice:

Private Const ASOUND As String = "/proc/asound"


Public Sub Main()
 
 Dim c As Byte
 Dim ss As New String[]
 Dim ca, pc, su As String
 
' Verifica innanzitutto quante schede audio sono rilevate dal sistema:
 Print "Il sistema ha rilevato num. " & Dir(ASOUND, "card*", gb.Directory).Count & " Schede audio:"
 
 ss = Split(File.Load(ASOUND &/ "cards"), gb.NewLine)
 
 Repeat
   If InStr(ss[c], "]:") == 0 Then
     ss.Remove(c, 1)
   Else
     Inc c
   Endif
 Until c == ss.Count
 
 c = 0
 
' Mostra i dispositivi delle schede audio rilevate evidenziando quello che sta eventualmente processando segnali audio:
 For Each ca In Dir(ASOUND, "card*", gb.Directory)
   Print "\n\n"; ss[c]
   For Each pc In Dir(ASOUND &/ ca, "pcm*p", gb.Directory)   ' [Nota 1]
     Print "   [Dispositivo    ]: " &/ ca &/ "\e[1m"; pc
     For Each su In Dir(ASOUND &/ ca &/ pc, "sub*", gb.Directory)
       If InStr(File.Load(ASOUND &/ ca &/ pc &/ su &/ "status"), "RUNNING") > 0 Then
         Print "\e[32mQuesto dispositivo della scheda audio sta processando segnali audio !\e[0m"
       Else
         Print "\e[0m\e[31mQuesto dispositivo della scheda audio non sta processando alcun segnale audio.\e[0m"
       Endif
     Next
   Next
   Inc c
 Next
 
End


Note

[1] Da rilevare che, se il dispositivo audio termina con la lettera "p" (ad esempio: pcm0p ), allora esso è un dispositivo di esecuzione dei dati audio. Infatti "p" sta per "PLAYBACK".
Se il dispositivo audio termina invece con la lettera "c" (ad esempio: pcm0c ), allora esso è un dispositivo di registrazione di dati audio. Infatti "c" sta per "CAPTURE".