Estrarre informazioni da un file MP3 con le funzioni esterne del API di libmpeg3

Da Gambas-it.org - Wikipedia.

Con alcune risorse della libreria esterna "libmpeg3" è possibile ottenere alcune informazioni strettamente relative a un file mp3.

E' necessario avere installata nel sistema operativo e richiamare nel programma Gambas la libreria condivisa: "libmpeg3.so.2.1.8 "

Mostriamo un semplice esempio:

Library "libmpeg3:2.1.8"

Public Struct mpeg3_t
  fs As Pointer
  demuxer As Pointer
  total_astreams As Integer
  atrack[&010000] As Pointer
  total_vstreams As Integer
  vtrack[&010000] As Pointer
  total_sstreams As Integer
  strack[&010000] As Pointer
  frame_offsets As Pointer
  sample_offsets As Pointer
  keyframe_numbers As Pointer
  video_eof As Pointer
  audio_eof As Pointer
  total_frame_offsets As Pointer
  total_sample_offsets As Pointer
  total_samples As Pointer
  total_keyframe_numbers As Pointer
  channel_counts As Pointer
  indexes As Pointer
  total_indexes As Integer
  index_bytes As Long
  is_transport_stream As Integer
  is_program_stream As Integer
  is_ifo_file As Integer
  is_audio_stream As Integer
  is_video_stream As Integer
  is_bd As Integer
  packet_size As Integer
  last_type_read As Integer
  last_stream_read As Integer
  subtitle_track As Integer
  program As Integer
  cpus As Integer
  seekable As Integer
  toc_fd As Pointer
  byte_pts As Long
  have_palette As Integer
  palette[64] As Byte
  source_date As Long
End Struct

' int mpeg3_check_sig(char *path)
' Check for file compatibility.
Private Extern mpeg3_check_sig(path As String) As Integer

' 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 mpeg3_t

' int64_t mpeg3_get_bytes(mpeg3_t *file)
' Total bytes.
Private Extern mpeg3_get_bytes(mpeg3file As mpeg3_t) As Long

' int mpeg3_audio_channels(mpeg3_t *file, int stream)
Private Extern mpeg3_audio_channels(mpeg3file As mpeg3_t, _stream As Integer) As Integer

' int mpeg3_sample_rate(mpeg3_t *file, int stream)
Private Extern mpeg3_sample_rate(mpeg3file As mpeg3_t, _stream As Integer) As Integer

' char* mpeg3_audio_format(mpeg3_t *file, int stream)
Private Extern mpeg3_audio_format(mpeg3file As mpeg3_t, _stream As Integer) As Pointer

' long mpeg3_audio_samples(mpeg3_t *file, int stream)
Private Extern mpeg3_audio_samples(mpeg3file As mpeg3_t, _stream As Integer) As Long

' int mpeg3_close(mpeg3_t *file)
Private Extern mpeg3_close(mpeg3file As mpeg3_t) As Integer


Public Sub Main()
 
 Dim perc As String
 Dim i, freq As Integer
 Dim cmp As Long
 Dim mp3 As mpeg3_t
 
 perc = "/percorso/del/file.mp3"
  
 i = mpeg3_check_sig(perc)
 If i = 0 Then Error.Raise("Tipo file incompatibile !")
  
 mp3 = mpeg3_open(perc, 0)
  
 Print "File audio:     "; perc
 Print "Dimensione:     "; mpeg3_get_bytes(mp3); " byte"
 Print "Numero canali:  "; mpeg3_audio_channels(mp3, 0)
 freq = mpeg3_sample_rate(mp3, 0)
 Print "Frequenza:      "; freq; " hertz"
 Print "Formato audio:  "; String@(mpeg3_audio_format(mp3, 0))
 cmp = mpeg3_audio_samples(mp3, 0)
 Print "Campioni audio: "; cmp; " byte (per ciascun canale)"
 Print "Durata:         "; CStr(Time(0, 0, 0, (cmp / freq) * 1000))
 
 mpeg3_close(mp3)
 
End



Riferimenti