Differenze tra le versioni di "Eseguire un file audio ed estrarne informazioni mediante le funzioni esterne del API di libcsfml"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'La libreria '''SFML''' (''Simple and Fast Multimedia Library'') fornisce una semplice interfaccia multipiattaforma per i vari componenti del PC, per facilitare lo sviluppo di ...')
 
 
(15 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
La libreria '''SFML''' (''Simple and Fast Multimedia Library'') fornisce una semplice interfaccia multipiattaforma per i vari componenti del PC, per facilitare lo sviluppo di giochi e applicazioni multimediali in gnere. Essa si compone di cinque moduli: sistema, finestre, grafica, audio e di rete. Qui tratteremo ovviamente del modulo attinente all'audio.
+
La libreria '''SFML''' (''Simple and Fast Multimedia Library'') fornisce una semplice interfaccia multipiattaforma per facilitare lo sviluppo di giochi e applicazioni multimediali in genere. Essa si compone di cinque moduli: sistema, finestre, grafica, audio e di rete. Qui tratteremo ovviamente del modulo attinente all'audio.
  
 +
Attualmente la libreria ''SFML'' è in grado di eseguire i file audio dei formati: ''Wav'' e ''OggVorbis''.
  
Per poter fruire delle risorse e delle funzioni esterne della libreria ''libcsfml'', bisognerà richiamare nell'applicativo Gambas la libreria (nella versione attuale): ''libcsfml-audio.so.1.6''
+
Per poter fruire delle risorse della libreria ''libcsfml'', bisognerà richiamare in Gambas la libreria condivisa: "''libcsfml-audio.so.1.6'' ".
  
 +
Di seguito mostreremo un possibile codice utilizzando alcune funzioni principali per la gestione dei predetti tipi di file audio. Porremo sul ''Form'' un ''ToggleButton'', un ''Button'', una ''Label'', uno ''Slider'' ed un ''ValueBox'':
 +
Private percorsoFile As String
 +
 +
 +
Library "libcsfml-audio:1.6"
 +
 +
Private Enum sfStopped = 0, sfPaused, sfPlaying
 +
Private sfMusic As Pointer
 +
 +
<FONT color=gray>' ''sfMusic* sfMusic_CreateFromFile(const char* Filename)''
 +
' ''Create a new music and load it from a file''</font>
 +
Private Extern sfMusic_CreateFromFile(filename As String) As Pointer
 +
 +
<FONT color=gray>' ''unsigned int sfMusic_GetChannelsCount(sfMusic* Music)''
 +
' ''Return the number of channels of a music (1 = mono, 2 = stereo)''</font>
 +
Private Extern sfMusic_GetChannelsCount(musicP As Pointer) As Integer
 +
 +
<FONT color=gray>' ''unsigned int sfMusic_GetSampleRate(sfMusic* Music)''
 +
' ''Get the stream sample rate of a music''</font>
 +
Private Extern sfMusic_GetSampleRate(musicP As Pointer) As Integer
 +
 +
<FONT color=gray>' ''float sfMusic_GetDuration(sfMusic* Music)''
 +
' ''Get a music duration''</font>
 +
Private Extern sfMusic_GetDuration(musicP As Pointer) As Single
 +
 +
<FONT color=gray>' ''void sfMusic_Play(sfMusic* Music)''
 +
' ''Start playing a music''</font>
 +
Private Extern sfMusic_Play(musicP As Pointer)
 +
 +
<FONT color=gray>' ''float sfMusic_GetPlayingOffset(sfMusic* Music)''
 +
' ''Get the current playing position of a music''</font>
 +
Private Extern sfMusic_GetPlayingOffset(musicP As Pointer) As Single
 +
 +
<FONT color=gray>' ''void sfMusic_SetVolume(sfMusic* Music, float Volume)''
 +
' ''Set the volume of a music. Param Volume: in range [0, 100]''</font>
 +
Private Extern sfMusic_SetVolume(musicP As Pointer, volume as Single)
 +
 +
<FONT color=gray>' ''void sfMusic_Pause(sfMusic* Music)''
 +
' ''Pause a music''</font>
 +
Private Extern sfMusic_Pause(musicP As Pointer)
 +
 +
<FONT color=gray>' ''void sfMusic_Stop(sfMusic* Music)''
 +
' ''Stop playing a music''</font>
 +
Private Extern sfMusic_Stop(musicP As Pointer)
 +
 +
<FONT color=gray>' ''sfSoundStatus sfMusic_GetStatus(sfMusic* Music)''
 +
' ''Get the status of a music (stopped, paused, playing)''</font>
 +
Private Extern sfMusic_GetStatus(musicP As Pointer) As Integer
 +
 +
<FONT color=gray>' ''void sfMusic_Destroy(sfMusic* Music)''
 +
' ''Destroy an existing music''</font>
 +
Private Extern sfMusic_Destroy(musicP As Pointer)
 +
 +
 +
'''Public''' Sub Form_Open()
 +
 +
  percorsoFile = "<FONT color=gray>''/percorso/del/file/audio''</font>"
 +
 +
  sfMusic = sfMusic_CreateFromFile(percorsoFile)
 +
  If IsNull(sfMusic) Then Error.Raise("Impossibile caricare il file audio !")
 +
   
 +
  ToggleButton1.Text = "Avvia"
 +
  Slider1.Value = 100
 +
  ValueBox1.Value = 100
 +
 
 +
<FONT color=gray>' ''Acquisisce alcune informazioni generali sul file audio caricato:''</font>
 +
  Print "Canali audio: "; sfMusic_GetChannelsCount(sfMusic)
 +
  Print "Frequenza di campionamento: "; sfMusic_GetSampleRate(sfMusic)
 +
  Print "Durata del brano: "; Time(0, 0, 0, Fix(sfMusic_GetDuration(sfMusic) * 1000))
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub ToggleButton1_Click()
 +
 +
  If ToggleButton1.Value Then
 +
    sfMusic_Play(sfMusic)
 +
    ToggleButton1.Text = "Pausa"
 +
   
 +
    While sfMusic_GetStatus(sfMusic) = sfPlaying
 +
      Wait 0.01
 +
      Label1.Alignment = Align.Right
 +
      Label1.Text = Format(Time(0, 0, 0, Fix(sfMusic_GetPlayingOffset(sfMusic) * 1000)), "nn:ss.uu")
 +
    Wend
 +
<FONT color=gray>' ''Al termine dell'intera esecuzione del brano va in chiusura:''</font>
 +
    sfMusic_Destroy(sfMusic)
 +
  Else
 +
    sfMusic_Pause(sfMusic)
 +
    ToggleButton1.Text = "Riprendi"
 +
  Endif
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub Button1_Click()
 +
 +
  ToggleButton1.Value = 0
 +
 
 +
  sfMusic_Stop(sfMusic)
 +
 
 +
  sfMusic_Destroy(sfMusic)
 +
  ToggleButton1.Text = "Avvia"
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub Slider1_Change()
 +
 +
  ValueBox1.Value = Slider1.Value
 +
  sfMusic_SetVolume(sfMusic, CSingle(ValueBox1.Value))
 +
 +
'''End'''
  
 +
  
 
=Riferimenti=
 
=Riferimenti=
Riga 10: Riga 124:
  
 
[2] [http://sourcecodebrowser.com/libcsfml/1.6/index.html La pagina web del API di libcsfml]
 
[2] [http://sourcecodebrowser.com/libcsfml/1.6/index.html La pagina web del API di libcsfml]
 
 
 
 
<FONT color=red size=4><B>Pagina in costruzione !
 

Versione attuale delle 18:24, 2 dic 2021

La libreria SFML (Simple and Fast Multimedia Library) fornisce una semplice interfaccia multipiattaforma per facilitare lo sviluppo di giochi e applicazioni multimediali in genere. Essa si compone di cinque moduli: sistema, finestre, grafica, audio e di rete. Qui tratteremo ovviamente del modulo attinente all'audio.

Attualmente la libreria SFML è in grado di eseguire i file audio dei formati: Wav e OggVorbis.

Per poter fruire delle risorse della libreria libcsfml, bisognerà richiamare in Gambas la libreria condivisa: "libcsfml-audio.so.1.6 ".

Di seguito mostreremo un possibile codice utilizzando alcune funzioni principali per la gestione dei predetti tipi di file audio. Porremo sul Form un ToggleButton, un Button, una Label, uno Slider ed un ValueBox:

Private percorsoFile As String


Library "libcsfml-audio:1.6"

Private Enum sfStopped = 0, sfPaused, sfPlaying
Private sfMusic As Pointer

' sfMusic* sfMusic_CreateFromFile(const char* Filename)
' Create a new music and load it from a file
Private Extern sfMusic_CreateFromFile(filename As String) As Pointer

' unsigned int sfMusic_GetChannelsCount(sfMusic* Music)
' Return the number of channels of a music (1 = mono, 2 = stereo)
Private Extern sfMusic_GetChannelsCount(musicP As Pointer) As Integer

' unsigned int sfMusic_GetSampleRate(sfMusic* Music)
' Get the stream sample rate of a music
Private Extern sfMusic_GetSampleRate(musicP As Pointer) As Integer

' float sfMusic_GetDuration(sfMusic* Music)
' Get a music duration
Private Extern sfMusic_GetDuration(musicP As Pointer) As Single

' void sfMusic_Play(sfMusic* Music)
' Start playing a music
Private Extern sfMusic_Play(musicP As Pointer)

' float sfMusic_GetPlayingOffset(sfMusic* Music)
' Get the current playing position of a music
Private Extern sfMusic_GetPlayingOffset(musicP As Pointer) As Single

' void sfMusic_SetVolume(sfMusic* Music, float Volume)
' Set the volume of a music. Param Volume: in range [0, 100]
Private Extern sfMusic_SetVolume(musicP As Pointer, volume as Single)

' void sfMusic_Pause(sfMusic* Music)
' Pause a music
Private Extern sfMusic_Pause(musicP As Pointer)

' void sfMusic_Stop(sfMusic* Music)
' Stop playing a music
Private Extern sfMusic_Stop(musicP As Pointer)

' sfSoundStatus sfMusic_GetStatus(sfMusic* Music)
' Get the status of a music (stopped, paused, playing)
Private Extern sfMusic_GetStatus(musicP As Pointer) As Integer

' void sfMusic_Destroy(sfMusic* Music)
' Destroy an existing music
Private Extern sfMusic_Destroy(musicP As Pointer)


Public Sub Form_Open()

  percorsoFile = "/percorso/del/file/audio"

  sfMusic = sfMusic_CreateFromFile(percorsoFile)
  If IsNull(sfMusic) Then Error.Raise("Impossibile caricare il file audio !")
   
  ToggleButton1.Text = "Avvia"
  Slider1.Value = 100
  ValueBox1.Value = 100
  
' Acquisisce alcune informazioni generali sul file audio caricato:
  Print "Canali audio: "; sfMusic_GetChannelsCount(sfMusic)
  Print "Frequenza di campionamento: "; sfMusic_GetSampleRate(sfMusic)
  Print "Durata del brano: "; Time(0, 0, 0, Fix(sfMusic_GetDuration(sfMusic) * 1000))

End


Public Sub ToggleButton1_Click()

  If ToggleButton1.Value Then
    sfMusic_Play(sfMusic)
    ToggleButton1.Text = "Pausa"
   
    While sfMusic_GetStatus(sfMusic) = sfPlaying
      Wait 0.01
      Label1.Alignment = Align.Right
      Label1.Text = Format(Time(0, 0, 0, Fix(sfMusic_GetPlayingOffset(sfMusic) * 1000)), "nn:ss.uu")
    Wend
' Al termine dell'intera esecuzione del brano va in chiusura:
    sfMusic_Destroy(sfMusic)
  Else
    sfMusic_Pause(sfMusic)
    ToggleButton1.Text = "Riprendi"
  Endif

End


Public Sub Button1_Click()

  ToggleButton1.Value = 0
  
  sfMusic_Stop(sfMusic)
  
  sfMusic_Destroy(sfMusic)
  ToggleButton1.Text = "Avvia"

End


Public Sub Slider1_Change()

  ValueBox1.Value = Slider1.Value
  sfMusic_SetVolume(sfMusic, CSingle(ValueBox1.Value))

End


Riferimenti

[1] La pagina web di SFML

[2] La pagina web del API di libcsfml