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

Da Gambas-it.org - Wikipedia.
Versione del 28 nov 2019 alle 17:48 di Vuott (Discussione | contributi) (Creata pagina con "Nel caso di uso della Classe "''Music'' " del Componente ''gb.sdl2.audio'' non è possibile ottenere il valore della durata del file audio prescelto da eseguire. <BR>Il valor...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Nel caso di uso della Classe "Music " del Componente gb.sdl2.audio non è possibile ottenere il valore della durata del file audio prescelto da eseguire.
Il valore della durata è assolutamente necessario per attivare la funzione "Wait " o un ciclo di attesa per far eseguire il file audio.
In questa circostanza la libreria "libmpeg3 dunque consente di 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)
 
 camp = mpeg3_audio_samples(mp3, 0)
 
 s = camp / Sound.Frequency
 
 Print "Durata: "; Date(0, 0, 0, 0, 0, 0, s * 1000)
     
 Music.Load(perc)
 Music.Play
 
 tmp = Now
 
 Repeat
   i = DateDiff(tmp, Now, gb.Second)
   Write "\rTempo trascorso: " & Date(0, 0, 0, 0, 0, 0, i * 1000)
 Until i >= s
 
 mpeg3_close(mp3)
 
End