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

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(4 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 attualmente 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 la funzione "''Wait'' " o un ciclo di attesa in un'applicazione a ''riga di comando''.
<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 12: 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 mpeg3_sample_rate(mpeg3_t *file, int stream)''</font>
  <FONT Color=gray>' ''int mpeg3_audio_channels(mpeg3_t *file, int stream)''</font>
  Private Extern mpeg3_sample_rate(mpeg3file As Pointer, _stream As Integer) As Integer
  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 23: Riga 24:
   
   
   
   
  '''Public''' Sub Main()
  Public Sub Main()
    
    
   Dim mp3 As Pointer
   Dim mp3 As Pointer
Riga 32: Riga 33:
   Dim tmp As Date
   Dim tmp As Date
    
    
   perc = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"
   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 !")
   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 / Sound.Frequency
   s = camp / freq
    
    
   Print "Durata: "; Time(0, 0, 0, s * 1000)
   Print "Durata totale: "; Time(0, 0, 0, s * 1000)
        
        
   Music.Load(perc)
   Music.Load(perc)
Riga 53: Riga 58:
  <FONT Color=gray>' ''Impone un'attesa, per ridurre il consumo di risorse:''</font>
  <FONT Color=gray>' ''Impone un'attesa, per ridurre il consumo di risorse:''</font>
     Wait 0.01
     Wait 0.01
  <FONT Color=gray>' ''Quando i secondi trascorsi dall'inizio dell'esecuzione del file audio è uguale o superiore alla durata del file medesimo, si esce dal ciclo:''</font>
  <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'''
  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


Riferimenti