Eseguire un file mp3 usando le risorse del API di Mpeg3 e della Classe "Music" del Componente gb.sdl2.audio
Nel caso di uso della Classe "Music " del Componente gb.sdl2.audio non è possibile ottenere attualmente il valore della durata del file audio prescelto da eseguire.
Il valore della durata è assolutamente necessario per far eseguire il file audio attivando la funzione "Wait " o un ciclo di attesa in un'applicazione a riga di comando.
In questa circostanza la libreria esterna "libmpeg3 può essere richiamata ed utilizzata proprio per ricavare da un file audio MP3 la frequenza e il numero di campioni audio presenti. Questi due valori consentiranno di ottenere la durata del file audio da eseguire.
E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libmpeg3.so.2.1.8 "
Di seguito un esempio pratico per eseguire un file audio di formato Mp3:
Library "libmpeg3:2.1.8"
' mpeg3_t* mpeg3_open(char *path, int *error_return)
' Open the MPEG stream.
Private Extern mpeg3_open(path As String, error_return As Pointer) As Pointer
' long mpeg3_audio_samples(mpeg3_t *file, int stream)
Private Extern mpeg3_audio_samples(mpeg3file As Pointer, _stream As Integer) As Long
' int mpeg3_sample_rate(mpeg3_t *file, int stream)
Private Extern mpeg3_sample_rate(mpeg3file As Pointer, _stream As Integer) As Integer
' int mpeg3_close(mpeg3_t *file)
' Close the MPEG stream.
Private Extern mpeg3_close(mpeg3file As Pointer) As Integer
Public Sub Main()
Dim mp3 As Pointer
Dim perc As String
Dim camp As Long
Dim freq, i As Integer
Dim s As Single
Dim tmp As Date
perc = "/percorso/del/file.mp3"
mp3 = mpeg3_open(perc, 0)
If mp3 == 0 Then Error.Raise("Errore !")
camp = mpeg3_audio_samples(mp3, 0)
s = camp / Sound.Frequency
Print "Durata: "; Time(0, 0, 0, s * 1000)
Music.Load(perc)
Music.Play
tmp = Now
Repeat
i = DateDiff(tmp, Now, gb.Second)
Write "\e[0m\rTempo trascorso: \e[31m" & Time(0, 0, 0, i * 1000)
' Impone un'attesa, per ridurre il consumo di risorse:
Wait 0.01
' Quando i secondi trascorsi dall'inizio dell'esecuzione del file audio è uguale o superiore alla durata del file medesimo, si esce dal ciclo:
Until i >= s
mpeg3_close(mp3)
End