La gestione dei file audio mediante il componente gb.sdl2.audio

Da Gambas-it.org - Wikipedia.

Le risorse della libreria SDL2 per la gestione dell'audio è stata da poco implementata in Gambas attraverso il nuovo componente gb.sdl2.audio.
Va sottolineato che il componente gb.sdl2.audio può essere attivato anche indipendentemente dal componente gb.sdl2 .

Il componente fornisce risorse mediante due Classi: Sound e Music. La Classe attualmente più completa è quella Music.


Gestione dei file audio mediante le Classi Sound e Channels

La classe Sound consente di ascoltare contemporaneamente due o più (fino a 32) file sonori (solo di tipo .wav).

In questo caso, per far eseguire un file sonoro, è necessario caricarlo in memoria assegnando ad una specifica variabile di tipo "Sound" un singolo file sonoro.

Ogni file sarà fatto suonare in un canale, cosicché è possibile decidere mediante la classe "Channels" quanti canali saranno attivati per la riproduzione, e dunque quanti file, caricati in memoria nelle predette variabili, saranno eseguiti.
Innanzitutto bisognerà stabilire il numero di canali utilizzabili impostando la proprietà:

Channels.Count = numero canali utilizzabili (<=32)

La classe "Channels" ci consente, inoltre, di impostare il volume all'interno di una gamma tra 0 e 128.


Nell'esempio che segue saranno eseguiti contemporaneamente due file WAV in un'applicazione in ambiente grafico. Si avrà anche la possibilità di arrestare e mettere in pausa l'esecuzione del file audio WAV:

Private sn1 As Sound
Private sn2 As Sound


Public Sub Form_Open()

 Dim sn1, sn2 As Sound
 
' Si stabilisce il numero di canali da utilizzare:
  Channels.Count = 2

' Si imposta a piacere il volume audio di ciascun canale:
  Channels[0].Volume = 110
  Channels[1].Volume = 90

' Si carica per ciascun canale un file WAV:
  sn1 = Sound.Load("/percorso/del/primo/file.wav")
  sn2 = Sound.Load("/percorso/del/secondo/file.wav")

' Si eseguono contemporaneamentei file WAV dei due canali:
  Channels[0].Play(sn1)
  Channels[1].Play(sn2)
  
End


Public Sub ToggleButton1_Click()

 Select Case ToggleButton1.Value
   Case True
     Channels[0].Pause
   Case False
     Channels[0].Play(sn1)
 End Select

End


Public Sub ToggleButton2_Click()

 Select Case ToggleButton2.Value
   Case True
     Channels[1].Pause
   Case False
     Channels[1].Play(sn1)
 End Select

End


Public Sub Button1_Click()

 Channels[0].Stop

End


Public Sub Button3_Click()

 Channels[1].Stop

End


Nell'esempio che segue saranno eseguiti contemporaneamente due file WAV in un'applicazione a riga di comando:

Public Sub Main()

 Dim sn1, sn2 As Sound

' Si stabilisce il numero di canali da utilizzare:
  Channels.Count = 2

' Si imposta a piacere il volume audio di ciascun canale:
  Channels[0].Volume = 110
  Channels[1].Volume = 90

' Si carica per ciascun canale un file WAV:
  sn1 = Sound.Load("/percorso/del/primo/file.wav")
  sn2 = Sound.Load("/percorso/del/secondo/file.wav")

' Si eseguono contemporaneamentei file WAV dei due canali:
  Channels[0].Play(sn1)
  Channels[1].Play(sn2)
  
End


Gestione di un solo file audio mediante le Classi Sound e Channel

Se si deve far eseguire un solo file audio WAV, si può utilizzare la Classe Channel unitamente alla già vista Classe Sound.

Mostriamo un semplice esempio in applicazione grafica, nel quale si avrà anche la possibilità di arrestare, mettere in pausa l'esecuzione del file audio WAV e variare il volume dell'audio:

Private cn As New Channel
Private sn As Sound


Public Sub Form_Open()

 With Slider1
   .MaxValue = 128    
   .Value = 100
 End With
   
 ValueBox1.Text = CStr(Slider1.Value)

End


Public Sub Button1_Click()

 Dim sn As Sound

  sn = Sound.Load("/percorso/del/file.wav")

  cn.Play(sn)

End


Public Sub ToggleButton1_Click()

 Select Case ToggleButton1.Value
   Case True
     cn.Pause
   Case False
     cn.Play(sn)
 End Select

End


Public Sub Button2_Click()

 cn.Stop

End


Public Sub Slider1_Change()

 cn.Volume = Slider1.Value
 ValueBox1.Text = CStr(Slider1.Value)

End


In quest'altro esempio l'esecuzione avviene in un'applicazione a riga di comando:

Public Sub Main()

 Dim sn As Sound
 Dim cn As New Channel

  sn = Sound.Load("/percorso/del/file.wav")

  cn.Play(sn)

End


Gestione dei file audio mediante la Classe Music

La Classe Music consente di eseguire i seguenti tipi di file audio: WAV, MP3 e OGG. Inoltre, consente di eseguire un solo file audio per volta.


Mostriamo un semplice esempio in applicazione grafica, nel quale si avrà anche la possibilità di arrestare, mettere in pausa l'esecuzione del file audio WAV e variare il volume dell'audio:

Public Sub Form_Open()

 With Slider1
   .MaxValue = 128    
   .Value = 100
 End With
  
 ValueBox1.Text = CStr(Slider1.Value)

End


Public Sub Button1_Click()

 Music.Load("/percorso/del/file/audio")

 Music.Play

End


Public Sub ToggleButton1_Click()

 Select Case ToggleButton1.Value
   Case True
     Music.Pause
   Case False
     Music.Play
 End Select

End


Public Sub Button2_Click()

 Music.Stop

End


Public Sub Slider1_Change()

 Music.Volume = Slider1.Value
 
 ValueBox1.Text = CStr(Slider1.Value)

End


In quest'altro esempio il file audio viene eseguito con un'applicazione a riga di comando:

Public Sub Main()

 Music.Load("/percorso/del/file/audio")

 Music.Play

' Per l'esecuzione del file audio in un'applicazione "a riga di comando" il ciclo è indispensabile:
 While Music.State = Music.Playing
' Mostra anche il tempo trascorso:
   Print CStr(Date(0, 0, 0, 0, 0, 0, Music.Pos * 1000))
 Wend

End

Modificare il volume

Come si è visto, anche la Classe Music fornisce la proprietà .Volume per modificare appunto il volume audio dell'esecuzione. L'ambito dei valori possibili va da 0 a 128.

Esempio:

Music.Volume = 110