Differenze tra le versioni di "Eseguire un file audio ed estrarne informazioni mediante le funzioni esterne del API di libcsfml"
(6 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 3: | Riga 3: | ||
Attualmente la libreria ''SFML'' è in grado di eseguire i file audio dei formati: ''Wav'' e ''OggVorbis''. | 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'' ". | |
− | Per poter fruire delle risorse | ||
− | |||
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'': | 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 percorsoFile As String | ||
− | + | ||
Library "libcsfml-audio:1.6" | Library "libcsfml-audio:1.6" | ||
Private Enum sfStopped = 0, sfPaused, sfPlaying | Private Enum sfStopped = 0, sfPaused, sfPlaying | ||
+ | Private sfMusic As Pointer | ||
<FONT color=gray>' ''sfMusic* sfMusic_CreateFromFile(const char* Filename)'' | <FONT color=gray>' ''sfMusic* sfMusic_CreateFromFile(const char* Filename)'' | ||
Riga 47: | Riga 46: | ||
Private Extern sfMusic_Pause(musicP As Pointer) | Private Extern sfMusic_Pause(musicP As Pointer) | ||
− | <FONT color=gray>' ''void sfMusic_Stop(sfMusic* Music)' | + | <FONT color=gray>' ''void sfMusic_Stop(sfMusic* Music)'' |
' ''Stop playing a music''</font> | ' ''Stop playing a music''</font> | ||
Private Extern sfMusic_Stop(musicP As Pointer) | Private Extern sfMusic_Stop(musicP As Pointer) | ||
Riga 60: | Riga 59: | ||
− | + | Public Sub Form_Open() | |
− | percorsoFile = "''/percorso/del/file/audio''" | + | percorsoFile = "<FONT color=darkgreen>''/percorso/del/file/audio''</font>" |
sfMusic = sfMusic_CreateFromFile(percorsoFile) | sfMusic = sfMusic_CreateFromFile(percorsoFile) | ||
Riga 74: | Riga 73: | ||
Print "Canali audio: "; sfMusic_GetChannelsCount(sfMusic) | Print "Canali audio: "; sfMusic_GetChannelsCount(sfMusic) | ||
Print "Frequenza di campionamento: "; sfMusic_GetSampleRate(sfMusic) | Print "Frequenza di campionamento: "; sfMusic_GetSampleRate(sfMusic) | ||
− | Print "Durata del brano: "; | + | Print "Durata del brano: "; Time(0, 0, 0, Fix(sfMusic_GetDuration(sfMusic) * 1000)) |
− | + | End | |
− | + | Public Sub ToggleButton1_Click() | |
If ToggleButton1.Value Then | If ToggleButton1.Value Then | ||
Riga 88: | Riga 87: | ||
Wait 0.01 | Wait 0.01 | ||
Label1.Alignment = Align.Right | Label1.Alignment = Align.Right | ||
− | Label1.Text = Format( | + | Label1.Text = Format(Time(0, 0, 0, Fix(sfMusic_GetPlayingOffset(sfMusic) * 1000)), "nn:ss.uu") |
Wend | Wend | ||
<FONT color=gray>' ''Al termine dell'intera esecuzione del brano va in chiusura:''</font> | <FONT color=gray>' ''Al termine dell'intera esecuzione del brano va in chiusura:''</font> | ||
Riga 97: | Riga 96: | ||
Endif | Endif | ||
− | + | End | |
− | + | Public Sub Button1_Click() | |
ToggleButton1.Value = 0 | ToggleButton1.Value = 0 | ||
Riga 109: | Riga 108: | ||
ToggleButton1.Text = "Avvia" | ToggleButton1.Text = "Avvia" | ||
− | + | End | |
− | + | Public Sub Slider1_Change() | |
ValueBox1.Value = Slider1.Value | ValueBox1.Value = Slider1.Value | ||
sfMusic_SetVolume(sfMusic, CSingle(ValueBox1.Value)) | sfMusic_SetVolume(sfMusic, CSingle(ValueBox1.Value)) | ||
− | + | End | |
=Riferimenti= | =Riferimenti= | ||
− | [1] | + | [1] http://www.sfml-dev.org/index.php |
− | [2] | + | [2] http://sourcecodebrowser.com/libcsfml/1.6/index.html |
Versione attuale delle 05:18, 18 giu 2024
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