Differenze tra le versioni di "Eseguire un file mp3 usando le risorse del API di Mpeg3 e della Classe "Music" del Componente gb.sdl2.audio"
(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 | + | <BR>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''. |
<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 04:05, 19 giu 2024
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) ' 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