https://foro.gambas-es.org/viewtopic.php?f=5&t=7835
-----------------------------------
vuott
Sabado, 30 Noviembre 2019, 01:03

Ejecutar Archivos Audio MP3 Con La Clase "Music" Del Componente Gb.sdl2.audio Y Con La Ayuda De La Libreria "libmpeg3"
-----------------------------------
Os dejo este mi codigo para ejecutar un archivos audio MP3 con la Clase "Music" del Componente "gb.sdl2.audio" y con la ayuda de la libreria "libmpeg3" para obtener la duración del archivo mp3.
Hace falta activar el Componente "[i]gb.sdl2.audio[/i]" y tener instalada en el sistema la libreria "[i]libmpeg3.so.2.1.8[/i]".
[code linenumbers=false syntax=gambas]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)
Private Extern mpeg3_audio_samples(mpeg3file As Pointer, _stream As Integer) As Long

' int mpeg3_sample_rate(mpeg3_t *file, int stream)
Private Extern mpeg3_sample_rate(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 = "/ruta/del/archivo.mp3"
 
  mp3 = mpeg3_open(perc, 0)
 
  camp = mpeg3_audio_samples(mp3, 0)
  
  freq = mpeg3_sample_rate(mp3, 0)

' Obtiene la duración del archivo mp3:
  s = camp / freq
 
  Print "Duración del archivo: "; Date(0, 0, 0, 0, 0, 0, s * 1000)
      
  Music.Load(perc)
  Music.Play

  tmp = Now

  Repeat
    i = DateDiff(tmp, Now, gb.Second)
    Write "\rTiempo transcurrido: " & Date(0, 0, 0, 0, 0, 0, i * 1000)
  Until i >= s

' Cuando la ejecución termina, el programa libera la memoria anteriormente ocupada y se cierra:
  mpeg3_close(mp3)

End[/code]


-----------------------------------
tincho
Sabado, 30 Noviembre 2019, 23:17

Re: Ejecutar Archivos Audio MP3 Con La Clase "Music" Del Componente Gb.sdl2.audio Y Con La Ayuda De La Libreria "libmpeg3"
-----------------------------------
Gracias Vuott, seguramente lo use para el programa que hice hace un tiempo llamado Vinilo que esta algo desactualizado.
una consulta, ¿Como se pueden saber todas las variables disponibles en la librería?
Por ejemplo, si quisiera extraer el nombre del artista o el disco o mas datos, ¿Como se que cosas puede devolver la librería ?
Un saludo


-----------------------------------
vuott
Domingo, 01 Diciembre 2019, 00:54

Re: Ejecutar Archivos Audio MP3 Con La Clase "Music" Del Componente Gb.sdl2.audio Y Con La Ayuda De La Libreria "libmpeg3"
-----------------------------------
[quote user="tincho" post="47229"]si quisiera extraer el nombre del artista o el disco o mas datos[/quote]
Para extraer los TAG de un archivo mp3...

https://www.gambas-it.org/wiki/index.php?title=Estrarre_i_TAG_da_un_file_SPC_con_le_funzioni_esterne_del_API_di_Libspctag
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_da_un_file_MP3_con_le_funzioni_esterne_del_API_di_Id3tag
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_file_audio_con_le_funzioni_esterne_del_API_di_Libtag_c
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_MP3_con_le_funzioni_esterne_del_API_di_Avbin
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_MP3_con_le_sole_funzioni_di_Gambas
https://www.gambas-it.org/wiki/index.php?title=Estrarre_i_TAG_ID3v1_e_ID3v2_dai_file_MP3_con_le_funzioni_esterne_del_API_di_libmpg123
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_audio_con_le_funzioni_esterne_del_API_di_VLC


-----------------------------------
tincho
Domingo, 01 Diciembre 2019, 23:03

Re: Ejecutar Archivos Audio MP3 Con La Clase "Music" Del Componente Gb.sdl2.audio Y Con La Ayuda De La Libreria "libmpeg3"
-----------------------------------
[quote user="vuott" post="47231"][quote user="tincho" post="47229"]si quisiera extraer el nombre del artista o el disco o mas datos[/quote]
Para extraer los TAG de un archivo mp3...

https://www.gambas-it.org/wiki/index.php?title=Estrarre_i_TAG_da_un_file_SPC_con_le_funzioni_esterne_del_API_di_Libspctag
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_da_un_file_MP3_con_le_funzioni_esterne_del_API_di_Id3tag
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_file_audio_con_le_funzioni_esterne_del_API_di_Libtag_c
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_MP3_con_le_funzioni_esterne_del_API_di_Avbin
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_MP3_con_le_sole_funzioni_di_Gambas
https://www.gambas-it.org/wiki/index.php?title=Estrarre_i_TAG_ID3v1_e_ID3v2_dai_file_MP3_con_le_funzioni_esterne_del_API_di_libmpg123
https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_audio_con_le_funzioni_esterne_del_API_di_VLC[/quote]
Muchas gracias de nuevo, una información muy útil la que pasas.
Pero.. cuando usas una librería externa desde gambas ¿Como sabes que "comandos" puedes usar?
Por ejemplo, en el uso de [b]mpg123[/b] hay una serie de ordenes:
[quote]
Private Extern mpg123_close(mh As Pointer) As Integer
Private Extern mpg123_delete(mh As Pointer)
Private Extern mpg123_exit()
Private Extern mpg123_id3(mh As Pointer, v1 As Pointer, v2 As Pointer) As Integer
Private Extern mpg123_init() As Integer
Private Extern mpg123_meta_check(mh As Pointer) As Integer
Private Extern mpg123_new(decoder As String, errorI As Pointer) As Pointer
Private Extern mpg123_open(mh As Pointer, pathFile As String) As Integer
Private Extern mpg123_scan(mh As Pointer) As Integer
Private Extern mpg123_strerror(mh As Pointer) As String
[/quote]
¿Como sabes que existe algo como mpg123_strerror?
¿Hay una lista en alguna parte de todas las "ordenes" disponibles de cada librería?
¿Hay que remitirse al código fuente?
Mi pregunta es general, es para todas las librerías.
Saludos.


-----------------------------------
vuott
Lunes, 02 Diciembre 2019, 00:34

Re: Ejecutar Archivos Audio MP3 Con La Clase "Music" Del Componente Gb.sdl2.audio Y Con La Ayuda De La Libreria "libmpeg3"
-----------------------------------
[quote user="tincho" post="47238"]
¿Como sabes que existe algo como mpg123_strerror?
¿Hay una lista en alguna parte de todas las "ordenes" disponibles de cada librería?
[/quote]
Bueno, para conocer los [i]recursos[/i] (variables, Estructuras, Funciones, etc...) de una libreria externa, escrita en C, hace falta buscar su file "[i][url=https://es.wikipedia.org/wiki/Archivo_de_cabecera]Header[/i]" (xxxx[color=#8C0000].h[/color]), porqué en este archivo están los símbolos, identificadores de los recursos de la libreria.
Una libreria puede tener uno o más archivos [i]header[/i].
Normalmente el archivo de [i]cabecera[/i] de una libreria se encuentra en la carpeta de sistema: [i]/usr/include[/i]
Por ejemplo, puedes encontrar los file [i]header[/i] de [i]mpeg3[/i] en la carpeta: [i]/usr/include/mpeg3[/i] .


-----------------------------------
tincho
Lunes, 02 Diciembre 2019, 13:28

Re: Ejecutar Archivos Audio MP3 Con La Clase "Music" Del Componente Gb.sdl2.audio Y Con La Ayuda De La Libreria "libmpeg3"
-----------------------------------
[quote user="vuott" post="47240"][quote user="tincho" post="47238"]
¿Como sabes que existe algo como mpg123_strerror?
¿Hay una lista en alguna parte de todas las "ordenes" disponibles de cada librería?
[/quote]
Bueno, para conocer los [i]recursos[/i] (variables, Estructuras, Funciones, etc...) de una libreria externa, escrita en C, hace falta buscar su file "[i][url=https://es.wikipedia.org/wiki/Archivo_de_cabecera]Header[/i]" (xxxx[color=#8C0000].h[/color]), porqué en este archivo están los símbolos, identificadores de los recursos de la libreria.
Una libreria puede tener uno o más archivos [i]header[/i].
Normalmente el archivo de [i]cabecera[/i] de una libreria se encuentra en la carpeta de sistema: [i]/usr/include[/i]
Por ejemplo, puedes encontrar los file [i]header[/i] de [i]mpeg3[/i] en la carpeta: [i]/usr/include/mpeg3[/i] .[/quote]
Perfecto, era eso, muchas gracias Vuott
Saludos.


