Differenze tra le versioni di "La gestione dei file audio mediante il componente gb.sdl2.audio"

Da Gambas-it.org - Wikipedia.
Riga 15: Riga 15:
 
   
 
   
 
   Dim sn As Sound
 
   Dim sn As Sound
 
+
 
  sn = Sound.Load("<FONT Color=gray>''/percorso/del/file/audio''</font>")
+
  sn = Sound.Load("<FONT Color=gray>''/percorso/del/file/audio''</font>")
 
   
 
   
  sn.Play
+
  sn.Play
 
   
 
   
 
  '''End'''
 
  '''End'''
 
  
  
Riga 42: Riga 41:
 
   
 
   
 
   Dim sn1, sn2 As Sound
 
   Dim sn1, sn2 As Sound
 
+
 
  <FONT Color=gray>' ''Si stabilisce il numero di canali da utilizzare:''</font>
 
  <FONT Color=gray>' ''Si stabilisce il numero di canali da utilizzare:''</font>
  Channels.Count = 2
+
  Channels.Count = 2
 
   
 
   
 
  <FONT Color=gray>' ''Si imposta a piacere il volume audio di ciascun canale:''</font>
 
  <FONT Color=gray>' ''Si imposta a piacere il volume audio di ciascun canale:''</font>
  With Slider1
+
  With Slider1
    .MaxValue = Sound.MaxVolume
+
    .MaxValue = Sound.MaxVolume
    .MinValue = 0
+
    .MinValue = 0
    .Value = 110
+
    .Value = 110
  End With
+
  End With
  ValueBox1.Value = Slider1.Value
+
  ValueBox1.Value = Slider1.Value
  Channels[0].Volume = Slider1.Value
+
  Channels[0].Volume = Slider1.Value
  With Slider2
+
  With Slider2
    .MaxValue = Sound.MaxVolume
+
    .MaxValue = Sound.MaxVolume
    .MinValue = 0
+
    .MinValue = 0
    .Value = 40
+
    .Value = 40
  End With
+
  End With
  ValueBox2.Value = Slider2.Value
+
  ValueBox2.Value = Slider2.Value
  Channels[1].Volume = Slider2.Value
+
  Channels[1].Volume = Slider2.Value
 
   
 
   
 
  <FONT Color=gray>' ''Si carica per ciascun canale un file WAV:''</font>
 
  <FONT Color=gray>' ''Si carica per ciascun canale un file WAV:''</font>
  sn1 = Sound.Load("<FONT Color=gray>''/percorso/del/primo/file.wav''</font>")
+
  sn1 = Sound.Load("<FONT Color=gray>''/percorso/del/primo/file.wav''</font>")
  sn2 = Sound.Load("<FONT Color=gray>''/percorso/del/secondo/file.wav''</font>")
+
  sn2 = Sound.Load("<FONT Color=gray>''/percorso/del/secondo/file.wav''</font>")
 
 
   
 
   
 
  <FONT Color=gray>' ''Si eseguono contemporaneamente i file WAV dei due canali.''
 
  <FONT Color=gray>' ''Si eseguono contemporaneamente i file WAV dei due canali.''
Riga 71: Riga 69:
 
    
 
    
 
  ' ''Usando la Classe "Sound":''</font>
 
  ' ''Usando la Classe "Sound":''</font>
  sn1.Play()
+
  sn1.Play()
  sn2.Play()
+
  sn2.Play()
 
   
 
   
 
  <FONT Color=gray>' ''Oppure usando la Classe statica Channels:''
 
  <FONT Color=gray>' ''Oppure usando la Classe statica Channels:''
Riga 79: Riga 77:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub ToggleButton1_Click()
 
  '''Public''' Sub ToggleButton1_Click()
Riga 91: Riga 88:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub ToggleButton2_Click()
 
  '''Public''' Sub ToggleButton2_Click()
Riga 103: Riga 99:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
Riga 110: Riga 105:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Button2_Click()
 
  '''Public''' Sub Button2_Click()
Riga 117: Riga 111:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Slider1_Change()
 
  '''Public''' Sub Slider1_Change()
Riga 125: Riga 118:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Slider2_Change()
 
  '''Public''' Sub Slider2_Change()
Riga 135: Riga 127:
  
  
 
+
====Eseguire due o più file wav====
 
Nell'esempio che segue saranno eseguiti ''contemporaneamente'' due file WAV in un'applicazione ''a riga di comando'':
 
Nell'esempio che segue saranno eseguiti ''contemporaneamente'' due file WAV in un'applicazione ''a riga di comando'':
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
Riga 142: Riga 134:
 
   
 
   
 
  <FONT Color=gray>' ''Si stabilisce il numero di canali da utilizzare:''</font>
 
  <FONT Color=gray>' ''Si stabilisce il numero di canali da utilizzare:''</font>
  Channels.Count = 2
+
  Channels.Count = 2
 
   
 
   
 
  <FONT Color=gray>' ''Si imposta a piacere il volume audio di ciascun canale:''</font>
 
  <FONT Color=gray>' ''Si imposta a piacere il volume audio di ciascun canale:''</font>
  Channels[0].Volume = 110
+
  Channels[0].Volume = 110
  Channels[1].Volume = 80
+
  Channels[1].Volume = 80
 
   
 
   
 
  <FONT Color=gray>' ''Si carica per ciascun canale un file WAV:''</font>
 
  <FONT Color=gray>' ''Si carica per ciascun canale un file WAV:''</font>
  sn1 = Sound.Load("<FONT Color=gray>''/percorso/del/primo/file.wav''</font>")
+
  sn1 = Sound.Load("<FONT Color=gray>''/percorso/del/primo/file.wav''</font>")
  sn2 = Sound.Load("<FONT Color=gray>''/percorso/del/secondo/file.wav''</font>")
+
  sn2 = Sound.Load("<FONT Color=gray>''/percorso/del/secondo/file.wav''</font>")
 
 
   
 
   
 
  <FONT Color=gray>' ''Si eseguono contemporaneamente i file WAV dei due canali.''
 
  <FONT Color=gray>' ''Si eseguono contemporaneamente i file WAV dei due canali.''
Riga 157: Riga 148:
 
    
 
    
 
  ' ''Usando la Classe "Sound":''</font>
 
  ' ''Usando la Classe "Sound":''</font>
  sn1.Play()
+
  sn1.Play()
  sn2.Play()
+
  sn2.Play()
 
   
 
   
 
  <FONT Color=gray>' ''Oppure usando la Classe statica Channels:''
 
  <FONT Color=gray>' ''Oppure usando la Classe statica Channels:''
Riga 185: Riga 176:
 
   
 
   
 
  '''End'''
 
  '''End'''
+
 
 
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
 
   Dim sn As Sound
 
   Dim sn As Sound
 
   
 
   
  sn = Sound.Load("<FONT Color=gray>''/percorso/del/file/audio''</font>")
+
  sn = Sound.Load("<FONT Color=gray>''/percorso/del/file/audio''</font>")
 
   
 
   
  cn.Play(sn)
+
  cn.Play(sn)
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub ToggleButton1_Click()
 
  '''Public''' Sub ToggleButton1_Click()
Riga 208: Riga 197:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Button2_Click()
 
  '''Public''' Sub Button2_Click()
Riga 215: Riga 203:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Slider1_Change()
 
  '''Public''' Sub Slider1_Change()
Riga 223: Riga 210:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Canale_<FONT Color=#B22222>Finish</font>()
 
  '''Public''' Sub Canale_<FONT Color=#B22222>Finish</font>()
Riga 230: Riga 216:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
 
In quest'altro esempio l'esecuzione avviene in un'applicazione ''a riga di comando'', nella quale sarà visibile in console il tempo trascorso dall'inizio dell'esecuzione del file audio. Inoltre, sarà possibile arrestare l'esecuzione cliccando sul tasto "Invio" della tastiera.
 
In quest'altro esempio l'esecuzione avviene in un'applicazione ''a riga di comando'', nella quale sarà visibile in console il tempo trascorso dall'inizio dell'esecuzione del file audio. Inoltre, sarà possibile arrestare l'esecuzione cliccando sul tasto "Invio" della tastiera.
 
  Private i As Integer
 
  Private i As Integer
Riga 254: Riga 238:
 
   Repeat
 
   Repeat
 
     i = DateDiff(tempus, Now, gb.Millisecond)
 
     i = DateDiff(tempus, Now, gb.Millisecond)
     Write "\r" & CStr(Time(0, 0, 0, i))
+
     Write "\r" & Str(Time(0, 0, 0, i))
 
   Until i == -1
 
   Until i == -1
 
    
 
    
Riga 263: Riga 247:
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Application_Read()  <FONT Color=gray>' ''Cliccando sul tasto "Invio" si solleverà questo Evento''</font>
 
  '''Public''' Sub Application_Read()  <FONT Color=gray>' ''Cliccando sul tasto "Invio" si solleverà questo Evento''</font>
Riga 270: Riga 253:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
  
 
=Gestione dei file audio mediante la Classe ''Music''=
 
=Gestione dei file audio mediante la Classe ''Music''=
 
La Classe ''Music'' consente di eseguire i seguenti tipi di file audio: AIFF, FLAC, MOD, MP3, OGG e WAV. Inoltre, consente di eseguire <SPAN Style="text-decoration:underline">un solo</span> file audio per volta.
 
La Classe ''Music'' consente di eseguire i seguenti tipi di file audio: AIFF, FLAC, MOD, MP3, OGG e WAV. Inoltre, consente di eseguire <SPAN Style="text-decoration:underline">un solo</span> file audio per volta.
 
  
 
===Esempio di esecuzione con un'applicazione in ambiente grafico===
 
===Esempio di esecuzione con un'applicazione in ambiente grafico===
Riga 295: Riga 276:
 
   
 
   
 
  '''End'''
 
  '''End'''
+
 
 
 
  '''Public''' Sub ToggleButton1_Click()
 
  '''Public''' Sub ToggleButton1_Click()
 
    
 
    
Riga 321: Riga 301:
 
      
 
      
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub ToggleButton2_Click()
 
  '''Public''' Sub ToggleButton2_Click()
Riga 335: Riga 314:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Slider1_Change()
 
  '''Public''' Sub Slider1_Change()
Riga 344: Riga 322:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
  
Riga 357: Riga 334:
 
   While Music.State == Music.Playing
 
   While Music.State == Music.Playing
 
  <FONT Color=gray>' ''Mostra il tempo trascorso dall'inizio dell'esecuzione:''</font>
 
  <FONT Color=gray>' ''Mostra il tempo trascorso dall'inizio dell'esecuzione:''</font>
     Write CStr(Time(0, 0, 0, Music.Pos * 1000)) & "\r"
+
     Write "\r" & Str(Time(0, 0, 0, Music.Pos * 1000))
 
   Wend
 
   Wend
 
        
 
        
Riga 363: Riga 340:
 
        
 
        
 
  '''End'''
 
  '''End'''
 
 
 
In questo secondo esempio di esecuzione di un file audio con un'applicazione ''a riga di comando'' si potrà interagire con essa tramite console/Terminale terminando arbitrariamente l'esecuzione del file audio con la semplice pressione del tasto "''Invio''" della tastiera.
 
In questo secondo esempio di esecuzione di un file audio con un'applicazione ''a riga di comando'' si potrà interagire con essa tramite console/Terminale terminando arbitrariamente l'esecuzione del file audio con la semplice pressione del tasto "''Invio''" della tastiera.
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
Riga 381: Riga 356:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
 
In quest'altro esempio si potranno inviare istruzioni con la tastiera per fermare l'esecuzione, metterla in pausa e riprenderla, aumentare ed abbassare il volume audio, nonché vedere il tempo trascorso in quel momento dall'inizio dell'esecuzione del file audio. Per interagire con la tastiera si premerà il tasto previsto per l'azione desiderata, scrivendo così il carattere in basso nella console o nel Terminale (se l'applicazione è stata lanciata da Terminale) e si premerà sul tasto "Invio"
 
In quest'altro esempio si potranno inviare istruzioni con la tastiera per fermare l'esecuzione, metterla in pausa e riprenderla, aumentare ed abbassare il volume audio, nonché vedere il tempo trascorso in quel momento dall'inizio dell'esecuzione del file audio. Per interagire con la tastiera si premerà il tasto previsto per l'azione desiderata, scrivendo così il carattere in basso nella console o nel Terminale (se l'applicazione è stata lanciata da Terminale) e si premerà sul tasto "Invio"
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
Riga 403: Riga 376:
 
  '''End'''
 
  '''End'''
 
   
 
   
 
 
 
  '''Public''' Sub Application_Read()
 
  '''Public''' Sub Application_Read()
 
    
 
    
Riga 430: Riga 402:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
  
Riga 438: Riga 409:
 
Per vedere un esempio pratico di esecuzione di un file audio MP3 con le risorse della Classe ''Music'' del Componente ''gb.sdl2.audio'' e della libreria esterna ''libmpeg3'':
 
Per vedere un esempio pratico di esecuzione di un file audio MP3 con le risorse della Classe ''Music'' del Componente ''gb.sdl2.audio'' e della libreria esterna ''libmpeg3'':
  
[[Eseguire un file mp3 usando le risorse del API di Mpeg3 e della Classe "Music" del Componente gb.sdl2.audio|Eseguire_un_file_mp3_usando_le_risorse_del_API_di_Mpeg3_e_della_Classe_"Music"_del_Componente_gb.sdl2.audio]]
+
[[Eseguire un file mp3 usando le risorse del API di Mpeg3 e della Classe "Music" del Componente gb.sdl2.audio]]
 
 
  
  
Riga 447: Riga 417:
 
Esempio:
 
Esempio:
 
  Music.Volume = 110
 
  Music.Volume = 110
 
  
  
 
=Errore "Module format not recognized" con un file .mp3=
 
=Errore "Module format not recognized" con un file .mp3=
 
Se, leggendo un file .mp3, viene sollevato l'errore: "''Module format not recognized''", è molto probabile che non sia riconosciuto il bit-rate o la frequenza di campionamento del file. Si dovrà, allora, modificare il bit-rate impostandolo a 32bit (o inferiore), oppure la frequenza di campionamento a 16 kHz o inferiore. Si possono fare varie prove, testando diversi rapporti bit/frequenza di campionamento fino a trovare quello che esegue il file .mp3 correttamente.
 
Se, leggendo un file .mp3, viene sollevato l'errore: "''Module format not recognized''", è molto probabile che non sia riconosciuto il bit-rate o la frequenza di campionamento del file. Si dovrà, allora, modificare il bit-rate impostandolo a 32bit (o inferiore), oppure la frequenza di campionamento a 16 kHz o inferiore. Si possono fare varie prove, testando diversi rapporti bit/frequenza di campionamento fino a trovare quello che esegue il file .mp3 correttamente.

Versione delle 06:25, 4 ott 2022

Le risorse della libreria SDL2 per la gestione dell'audio sono state implementate 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 .

Le Classi fondamentali e basilari del componente gb.sdl2.audio sono: Sound, Channels, Channel e Music, le quali opportunamente combinate consentono di gestire l'esecuzione dei file audio supportati.


Gestione dei file audio mediante la sola Classe Sound

La classe Sound consente di eseguire un file audio (solo di tipo AIFF, FLAC, MP3, OGG e WAV).

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


Mostriamo un semplice esempio in un'applicazione a riga di comando, nel quale viene eseguito un file audio:

Public Sub Main()

 Dim sn As Sound
 
 sn = Sound.Load("/percorso/del/file/audio")

 sn.Play

End


Gestione dei file audio mediante le Classi Sound e Channels

La classe Sound congiuntamente con la Classe Channels consente di ascoltare contemporaneamente due o più (fino a 32) file sonori (solo di tipo AIFF, FLAC, MP3, OGG e 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.

Quindi, per eseguire i file audio AIFF, FLAC, MP3, OGG e WAV, si potrà utilizzare o la Classe "Sound", oppure la Classe statica "Channels".


Nell'esempio che segue saranno eseguiti contemporaneamente due file WAV in un'applicazione in ambiente grafico. Si avrà anche la possibilità di arrestare, mettere in pausa l'esecuzione del file audio WAV, nonché variare manualmente il volume di ogni singolo canale di uscita:

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:
 With Slider1
   .MaxValue = Sound.MaxVolume
   .MinValue = 0
   .Value = 110
 End With
 ValueBox1.Value = Slider1.Value
 Channels[0].Volume = Slider1.Value
 With Slider2
   .MaxValue = Sound.MaxVolume
   .MinValue = 0
   .Value = 40
 End With
 ValueBox2.Value = Slider2.Value
 Channels[1].Volume = Slider2.Value

' 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 contemporaneamente i file WAV dei due canali.
' Come abbiamo già detto, si possono adottare due modalità.
 
' Usando la Classe "Sound":
 sn1.Play()
 sn2.Play()

' Oppure usando la Classe statica Channels:
' 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
 End Select

End

Public Sub ToggleButton2_Click()

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

End

Public Sub Button1_Click()

 Channels[0].Stop

End

Public Sub Button2_Click()

 Channels[1].Stop

End

Public Sub Slider1_Change()

 Channels[0].Volume = Slider1.Value
 ValueBox1.Value = CStr(Slider1.Value)

End

Public Sub Slider2_Change()

 Channels[1].Volume = Slider2.Value
 ValueBox2.Value = CStr(Slider2.Value)

End


Eseguire due o più file wav

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 = 80

' 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 contemporaneamente i file WAV dei due canali.
' Come abbiamo già detto, si possono adottare due modalità.
 
' Usando la Classe "Sound":
 sn1.Play()
 sn2.Play()

' Oppure usando la Classe statica Channels:
' Channels[0].Play(sn1)
' Channels[1].Play(sn2)
  
End


Gestione di un solo file audio mediante l'uso congiunto delle Classi Sound e Channel

Se si deve far eseguire un solo file audio AIFF, FLAC, MP3, OGG e 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 e variare il volume dell'audio.
Inoltre al termine dell'esecuzione del file audio verrà sollevato l'Evento "_Finish()" della Classe Channel.

Private cn As New Channel As "Canale"
 

Public Sub Form_Open()

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

End
 
Public Sub Button1_Click()

 Dim sn As Sound

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

 cn.Play(sn)

End

Public Sub ToggleButton1_Click()

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

End

Public Sub Button2_Click()

 cn.Stop

End

Public Sub Slider1_Change()

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

End

Public Sub Canale_Finish()
 
 Me.Text = "Esecuzione terminata !"
 
End

In quest'altro esempio l'esecuzione avviene in un'applicazione a riga di comando, nella quale sarà visibile in console il tempo trascorso dall'inizio dell'esecuzione del file audio. Inoltre, sarà possibile arrestare l'esecuzione cliccando sul tasto "Invio" della tastiera.

Private i As Integer


Public Sub Main()

 Dim sn As Sound
 Dim cn As New Channel As "Canalis"
 Dim tempus As Date

 sn = Sound.Load("/percorso/del/file/audio")
 
' Si imposta a piacere il volume audio:
 sn.Volume = 100

 cn.Play(sn)
 
 tempus = Now
 
' Il ciclo consente di vedere in console il tempo trascorso dall'inizio dell'esecuzione del file audio:
 Repeat
   i = DateDiff(tempus, Now, gb.Millisecond)
   Write "\r" & Str(Time(0, 0, 0, i))
 Until i == -1
 
 cn.Stop
 
' Avendo sollevato l'Evento "Application.Read( )", è necessario invocare la funzione "Quit" per poter chiudere il programma:
 Quit

End

Public Sub Application_Read()   ' Cliccando sul tasto "Invio" si solleverà questo Evento
 
 i = -1
 
End


Gestione dei file audio mediante la Classe Music

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

Esempio di esecuzione con un'applicazione in ambiente grafico

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 con uno Slider:

Public Sub Form_Open()
 
 With Slider1
   .MaxValue = Sound.MaxVolume 
   .Value = 100
 End With
 
 With ValueBox1
  .Alignment = Align.Right
  .Value = Slider1.Value
 End With
 
 ToggleButton1.Text = "Esegui"
 ToggleButton2.Enabled = False

End
 
Public Sub ToggleButton1_Click()
 
 Select Case ToggleButton1.Value
   Case True
     With Music
       .Load("/percorso/del/file/audio")
       .Play
     End With
     ToggleButton1.Text = "Stop"
     With ToggleButton2
       .Enabled = True
       .Text = "Pausa"
     End With
   Case False
     Music.Stop
     ToggleButton1.Text = "Esegui"
     With ToggleButton2
       .Value = False
       .Enabled = False
       .Text = Null
     End With
 End Select
   
End

Public Sub ToggleButton2_Click()
 
 Select Case ToggleButton2.Value
   Case True
     Music.Pause
     ToggleButton2.Text = "Riprendi"
   Case False
     Music.Play
     ToggleButton2.Text = "Pausa"
 End Select
 
End

Public Sub Slider1_Change()

 Music.Volume = Slider1.Value
  
 ValueBox1.Value = Slider1.Value
 
End


Esempi di esecuzione con un'applicazione a riga di comando

In questo esempio il file audio viene eseguito con un'applicazione a riga di comando. Il codice consente di vedere continuamente anche il tempo trascorso dall'inizio dell'esecuzione del file audio.

Public Sub Main()

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

 Music.Play

 While Music.State == Music.Playing
' Mostra il tempo trascorso dall'inizio dell'esecuzione:
   Write "\r" & Str(Time(0, 0, 0, Music.Pos * 1000))
 Wend
     
 Music.Stop
     
End

In questo secondo esempio di esecuzione di un file audio con un'applicazione a riga di comando si potrà interagire con essa tramite console/Terminale terminando arbitrariamente l'esecuzione del file audio con la semplice pressione del tasto "Invio" della tastiera.

Public Sub Main()
  
 Dim s As String
  
 Music.Load("/percorso/del/file/audio")

 Music.Play
  
' Resta in attesa, consentendo così l'esecuzione del file audio, fino alla pressione del tasto "Invio":
 Input s
  
 Music.Stop
 Print "Esecuzione terminata"
  
End

In quest'altro esempio si potranno inviare istruzioni con la tastiera per fermare l'esecuzione, metterla in pausa e riprenderla, aumentare ed abbassare il volume audio, nonché vedere il tempo trascorso in quel momento dall'inizio dell'esecuzione del file audio. Per interagire con la tastiera si premerà il tasto previsto per l'azione desiderata, scrivendo così il carattere in basso nella console o nel Terminale (se l'applicazione è stata lanciata da Terminale) e si premerà sul tasto "Invio"

Public Sub Main()

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

 Music.Play

 Repeat
' Una brevissima attesa consente di inviare i previsti caratteri/comandi allo standard Input:
   Wait 0.01
' Mostra nello standard output il tempo trascorso dall'inizio dell'esecuzione:
   Write CStr(Time(0, 0, 0, Music.Pos * 1000)) & "\r"
 Until Music.State == Music.Stopped
  
 Music.Stop
  
 Quit
  
End

Public Sub Application_Read()
  
 Dim s As String

 Line Input #File.In, s
 
 Select Case s
   Case "s"
     Music.Stop
     Print "Esecuzione fermata."
     Music.Stop
   Case "p"
     Music.Pause
     Print "Pausa......."
   Case "r"
     Music.Play
     Print "....continua"
   Case "+"
     Music.Volume += 1
     Print Music.Volume
   Case "-"
     Music.Volume -= 1
     Print Music.Volume
 End Select
 
End


Uso della libreria esterna "libmpeg3" in ausilio

Per ottenere la durata del file audio MP3 da usare con la funzione Wait o con un ciclo, per consentire l'esecuzione completa del file audio, è possibile usare alcune risorse del API di "mpeg3".

Per vedere un esempio pratico di esecuzione di un file audio MP3 con le risorse della Classe Music del Componente gb.sdl2.audio e della libreria esterna libmpeg3:

Eseguire un file mp3 usando le risorse del API di Mpeg3 e della Classe "Music" del Componente gb.sdl2.audio


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


Errore "Module format not recognized" con un file .mp3

Se, leggendo un file .mp3, viene sollevato l'errore: "Module format not recognized", è molto probabile che non sia riconosciuto il bit-rate o la frequenza di campionamento del file. Si dovrà, allora, modificare il bit-rate impostandolo a 32bit (o inferiore), oppure la frequenza di campionamento a 16 kHz o inferiore. Si possono fare varie prove, testando diversi rapporti bit/frequenza di campionamento fino a trovare quello che esegue il file .mp3 correttamente.