Differenze tra le versioni di "Eseguire un file audio ed estrarne informazioni mediante le funzioni esterne del API di libcsfml"
Riga 89: | Riga 89: | ||
Label1.Alignment = Align.Right | Label1.Alignment = Align.Right | ||
Label1.Text = Format(Date(0, 0, 0, 0, 0, 0, Fix(sfMusic_GetPlayingOffset(sfMusic) * 1000)), "h:n:s.u") | Label1.Text = Format(Date(0, 0, 0, 0, 0, 0, Fix(sfMusic_GetPlayingOffset(sfMusic) * 1000)), "h:n:s.u") | ||
− | |||
Wend | Wend | ||
Else | Else |
Versione delle 16:54, 31 mar 2014
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 vorbis-ogg.
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
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 Private sfMusic As Pointer Library "libcsfml-audio:1.6" Private Enum sfStopped = 0, sfPaused, sfPlaying ' 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.Step = 100 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: "; Date(0, 0, 0, 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(Date(0, 0, 0, 0, 0, 0, Fix(sfMusic_GetPlayingOffset(sfMusic) * 1000)), "h:n:s.u") Wend 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