Eseguire un file mp3 usando le risorse del API di Mpeg3 e della Classe "Music" del Componente gb.sdl2.audio: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (7 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 1: | Riga 1: | ||
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. | 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. | ||
<BR>Il valore della durata è assolutamente necessario per far eseguire il file audio attivando | <BR>Il valore della durata è assolutamente necessario per far eseguire il file audio attivando l'istruzione "Wait" o un ciclo di attesa in un'applicazione a ''riga di comando''. | ||
<BR>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. | <BR>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''" | 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: | Di seguito un esempio pratico per eseguire un file audio di formato Mp3: | ||
| Riga 13: | Riga 12: | ||
Private Extern mpeg3_open(path As String, error_return As Pointer) As Pointer | Private Extern mpeg3_open(path As String, error_return As Pointer) As Pointer | ||
<FONT Color=gray>' ''long mpeg3_audio_samples(mpeg3_t *file, int stream)''</font> | <FONT Color=gray>' ''long mpeg3_audio_samples(mpeg3_t *file, int stream)'' | ||
' ''Total length obtained from the timecode.''</font> | |||
Private Extern mpeg3_audio_samples(mpeg3file As Pointer, _stream As Integer) As Long | Private Extern mpeg3_audio_samples(mpeg3file As Pointer, _stream As Integer) As Long | ||
<FONT Color=gray>' ''int | <FONT Color=gray>' ''int mpeg3_audio_channels(mpeg3_t *file, int stream)''</font> | ||
Private Extern | Private Extern mpeg3_audio_channels(mpeg3file As Pointer, _stream As Integer) As Integer | ||
<FONT Color=gray>' ''int mpeg3_close(mpeg3_t *file)'' | <FONT Color=gray>' ''int mpeg3_close(mpeg3_t *file)'' | ||
| Riga 24: | Riga 24: | ||
Public Sub Main() | |||
Dim mp3 As Pointer | Dim mp3 As Pointer | ||
| Riga 33: | Riga 33: | ||
Dim tmp As Date | Dim tmp As Date | ||
perc = "<FONT Color= | perc = "<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>" | ||
Print "File audio: "; perc | |||
mp3 = mpeg3_open(perc, 0) | mp3 = mpeg3_open(perc, 0) | ||
If mp3 == 0 Then Error.Raise("Errore !") | |||
Print "Canali audio: "; mpeg3_audio_channels(mp3, 0) | |||
camp = mpeg3_audio_samples(mp3, 0) | camp = mpeg3_audio_samples(mp3, 0) | ||
freq = Sound.Frequency | |||
Print "Frequenza di campionamento: hz "; freq | |||
s = camp / | s = camp / freq | ||
Print "Durata: "; | Print "Durata totale: "; Time(0, 0, 0, s * 1000) | ||
Music.Load(perc) | Music.Load(perc) | ||
| Riga 50: | Riga 55: | ||
Repeat | Repeat | ||
i = DateDiff(tmp, Now, gb.Second) | i = DateDiff(tmp, Now, gb.Second) | ||
Write "\rTempo trascorso: " & | Write "\e[0m\rTempo trascorso: \e[31m" & Time(0, 0, 0, i * 1000) | ||
<FONT Color=gray>' ''Impone un'attesa, per ridurre il consumo di risorse:''</font> | |||
Wait 0.01 | |||
<FONT Color=gray>' ''Quando i secondi trascorsi dall'inizio dell'esecuzione del file audio sono uguali o superiori alla durata del file medesimo, si esce dal ciclo:''</font> | |||
Until i >= s | Until i >= s | ||
mpeg3_close(mp3) | mpeg3_close(mp3) | ||
End | |||
=Riferimenti= | |||
* http://www.heroinewarrior.com/libmpeg3/ | |||
Versione attuale delle 20:56, 15 set 2025
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 l'istruzione "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)
' Total length obtained from the timecode.
Private Extern mpeg3_audio_samples(mpeg3file As Pointer, _stream As Integer) As Long
' int mpeg3_audio_channels(mpeg3_t *file, int stream)
Private Extern mpeg3_audio_channels(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"
Print "File audio: "; perc
mp3 = mpeg3_open(perc, 0)
If mp3 == 0 Then Error.Raise("Errore !")
Print "Canali audio: "; mpeg3_audio_channels(mp3, 0)
camp = mpeg3_audio_samples(mp3, 0)
freq = Sound.Frequency
Print "Frequenza di campionamento: hz "; freq
s = camp / freq
Print "Durata totale: "; 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 sono uguali o superiori alla durata del file medesimo, si esce dal ciclo:
Until i >= s
mpeg3_close(mp3)
End