Differenze tra le versioni di "Estrarre informazioni da un file MP3 con le funzioni esterne del API di libmpeg3"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "Con alcune risorse della libreria esterna "''libmpeg3''" è possibile ottenere alcune informazioni strettamente relative a un file mp3. E' necessario avere installata nel si...") |
|||
(8 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Con alcune risorse della libreria esterna "''libmpeg3''" è possibile ottenere alcune informazioni strettamente relative a un file mp3. | 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 | + | E' necessario avere installata nel sistema operativo e richiamare nel programma Gambas la libreria condivisa: "''libmpeg3.so.2.1.8'' ". |
− | |||
Mostriamo un semplice esempio: | Mostriamo un semplice esempio: | ||
− | Library "libmpeg3" | + | 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 | ||
<FONT Color=gray>' ''int mpeg3_check_sig(char *path)'' | <FONT Color=gray>' ''int mpeg3_check_sig(char *path)'' | ||
Riga 13: | Riga 54: | ||
<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 | + | 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 | + | 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 | + | 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 | + | 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 | + | 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 | + | 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 | + | Private Extern mpeg3_close(mpeg3file As mpeg3_t) As Integer |
− | + | Public Sub Main() | |
Dim perc As String | Dim perc As String | ||
Dim i, freq As Integer | Dim i, freq As Integer | ||
Dim cmp As Long | Dim cmp As Long | ||
− | Dim mp3 As | + | Dim mp3 As mpeg3_t |
− | perc = "<FONT Color= | + | perc = "<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>" |
i = mpeg3_check_sig(perc) | i = mpeg3_check_sig(perc) | ||
Riga 48: | Riga 89: | ||
mp3 = mpeg3_open(perc, 0) | mp3 = mpeg3_open(perc, 0) | ||
− | |||
− | |||
Print "File audio: "; perc | Print "File audio: "; perc | ||
Riga 58: | Riga 97: | ||
Print "Formato audio: "; String@(mpeg3_audio_format(mp3, 0)) | Print "Formato audio: "; String@(mpeg3_audio_format(mp3, 0)) | ||
cmp = mpeg3_audio_samples(mp3, 0) | cmp = mpeg3_audio_samples(mp3, 0) | ||
− | Print "Campioni audio: "; cmp | + | Print "Campioni audio: "; cmp; " byte (per ciascun canale)" |
− | Print "Durata: "; CStr( | + | Print "Durata: "; CStr(Time(0, 0, 0, (cmp / freq) * 1000)) |
mpeg3_close(mp3) | mpeg3_close(mp3) | ||
− | + | End |
Versione attuale delle 04:02, 19 giu 2024
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