Differenze tra le versioni di "Estrarre informazioni da un file MP3 con le funzioni esterne del API di libmpeg3"

Da Gambas-it.org - Wikipedia.
Riga 6: Riga 6:
 
Mostriamo un semplice esempio:
 
Mostriamo un semplice esempio:
 
  Library "libmpeg3"
 
  Library "libmpeg3"
 +
 +
Public Struct mpeg3_t
 +
  fs As Pointer
 +
  demuxer As Pointer
 +
  total_astreams As Integer
 +
  atrack[&010000] As Pointer
 +
  vtrack[&010000] As Pointer
 +
  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
 
   
 
   
 
  <FONT Color=gray>' ''int mpeg3_check_sig(char *path)''
 
  <FONT Color=gray>' ''int mpeg3_check_sig(char *path)''
Riga 13: Riga 53:
 
  <FONT Color=gray>' ''mpeg3_t* mpeg3_open(char *path, int *error_return)''
 
  <FONT Color=gray>' ''mpeg3_t* mpeg3_open(char *path, int *error_return)''
 
  ' ''Open the MPEG stream.''</font>
 
  ' ''Open the MPEG stream.''</font>
  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 mpeg3_t
 
   
 
   
 
  <FONT Color=gray>' ''int64_t mpeg3_get_bytes(mpeg3_t *file)''
 
  <FONT Color=gray>' ''int64_t mpeg3_get_bytes(mpeg3_t *file)''
 
  ' ''Total bytes.''</font>
 
  ' ''Total bytes.''</font>
  Private Extern mpeg3_get_bytes(mpeg3file As Pointer) As Long
+
  Private Extern mpeg3_get_bytes(mpeg3file As mpeg3_t) As Long
 
   
 
   
 
  <FONT Color=gray>' ''int mpeg3_audio_channels(mpeg3_t *file, int stream)''</font>
 
  <FONT Color=gray>' ''int mpeg3_audio_channels(mpeg3_t *file, int stream)''</font>
  Private Extern mpeg3_audio_channels(mpeg3file As Pointer, _stream As Integer) As Integer
+
  Private Extern mpeg3_audio_channels(mpeg3file As mpeg3_t, _stream As Integer) As Integer
 
   
 
   
 
  <FONT Color=gray>' ''int mpeg3_sample_rate(mpeg3_t *file, int stream)''</font>
 
  <FONT Color=gray>' ''int mpeg3_sample_rate(mpeg3_t *file, int stream)''</font>
  Private Extern mpeg3_sample_rate(mpeg3file As Pointer, _stream As Integer) As Integer
+
  Private Extern mpeg3_sample_rate(mpeg3file As mpeg3_t, _stream As Integer) As Integer
 
   
 
   
 
  <FONT Color=gray>' ''char* mpeg3_audio_format(mpeg3_t *file, int stream)''</font>
 
  <FONT Color=gray>' ''char* mpeg3_audio_format(mpeg3_t *file, int stream)''</font>
  Private Extern mpeg3_audio_format(mpeg3file As Pointer, _stream As Integer) As Pointer
+
  Private Extern mpeg3_audio_format(mpeg3file As mpeg3_t, _stream As Integer) 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)''</font>
  Private Extern mpeg3_audio_samples(mpeg3file As Pointer, _stream As Integer) As Long
+
  Private Extern mpeg3_audio_samples(mpeg3file As mpeg3_t, _stream As Integer) As Long
 
   
 
   
 
  <FONT Color=gray>' ''int mpeg3_close(mpeg3_t *file)''</font>
 
  <FONT Color=gray>' ''int mpeg3_close(mpeg3_t *file)''</font>
  Private Extern mpeg3_close(mpeg3file As Pointer) As Integer
+
  Private Extern mpeg3_close(mpeg3file As mpeg3_t) As Integer
 
   
 
   
 
   
 
   
Riga 40: Riga 80:
 
   Dim i, freq As Integer
 
   Dim i, freq As Integer
 
   Dim cmp As Long
 
   Dim cmp As Long
   Dim mp3 As Pointer
+
   Dim mp3 As mpeg3_t
 
    
 
    
 
   perc = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"
 
   perc = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"

Versione delle 15:58, 23 lug 2018

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 dinamica condivisa: libmpeg3.so


Mostriamo un semplice esempio:

Library "libmpeg3"

Public Struct mpeg3_t
  fs As Pointer
  demuxer As Pointer
  total_astreams As Integer
  atrack[&010000] As Pointer
  vtrack[&010000] As Pointer
  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)
  
 i = mpeg3_total_astreams(mp3)
  
 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"
 Print "Durata:         "; CStr(Date(0, 0, 0, 0, 0, 0, (cmp / freq) * 1000))
 
 mpeg3_close(mp3)
 
End