Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Vinilo 2 desde cero.
#1
Lightbulb 

Hola amigos.
Hace unos meses intente reflotar un programa para escuchar musica llamado Vinilo que hice hace bastante tiempo, pero no logre hacerlo.
Por un lado me costaba seguir mi propio código y por otro estaban una serie de cambios de gambas, las librerías y los recursos externos que usaba.
Así que aproveche para reescribirlo desde cero
Este es el aspecto actual
[Imagen: evOeeYu.png]
[Imagen: oVMEH04.png][Imagen: ZQtk2BD.png]
Bueno este el el repo
https://gitlab.com/belmotek/vinilo
Revisiones:
* v.0.0.5 - Cambios en la apariencia, paneles "Álbumes", "Configuración" y "Acerca de" añadidos. Búsqueda de álbumes por artista, añadido el botón de informe de errores por correo electrónico. Gestión de archivos sin meta-datos (feedback de Shordi).
* v.0.0.4 - Cambio de apariencia añadido traducciones para DE, FR, IT, PT
* v.0.0.3 - Añadida la ventana de minimización y la traducción ES.
* v.0.0.2 - Agregado el modo de dependencias para cuando se corre desde el IDE, corrección al seleccionar archivos y directorios, etc.
* v.0.0.1 - Primer envío

Saludos

1 Saludo.
    ¡Gracias!
#2

Ta chulo. Entre el Vinilo el MelodyBox y el gbAmp (y seguro que hay más por aquí), podemos poner una tienda de reproductores de música... Big Grin Big Grin Big Grin

No podemos regresar
    ¡Gracias!
#3

(17-08-2021, 18:18)Shordi escribió:  Ta chulo. Entre el Vinilo el MelodyBox y el gbAmp (y seguro que hay más por aquí), podemos poner una tienda de reproductores de música... Big Grin Big Grin Big Grin

Si, pero lo mas interesante de estos programas no es escuchar musica sino todo lo que esta detrás, como el código en si o la idea subyacente o los conceptos como usar el tryicon, escanear los metadatos, manejar la configuración y, por supuesto, la diversión.

Saludos.

1 Saludo.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • Shordi
    ¡Gracias!
#4

Ahí le has dado. Oír música, ya oía.  Con mi app y habiendo disfrutado y aprendido como estoy disfrutando y aprendiendo primero, no.

No podemos regresar
    ¡Gracias!
#5

Bueno sigo con los experimentos Smile miren como queda esto.
[Imagen: Mao8wd4.png]
Mañana si todo va bien subo un video explicativo y el código
Saludos.

Por cierto logre hacer funcionar la función que usa el código de Vuott, el problema radicaba en que no instale la librería adecuada, libtag_c que en mi sistema se llama libtagc0, un error mio Angry así que ahora funciona a la perfección Big Grin
Les dejo el código, que es muy util para leer las bibliotecas enteras de archivos ya que es súper rápido, sorprendentemente rápido.
Por las pruebas que hice extrae bien los datos de largo den segundos de las canciones. Si alguno lo prueba por favor comente si todo va correcto.
GAMBAS
  1. Library "libtag_c:0.0.0"
  2.  
  3. Public Struct TagLib_File
  4.   dummy As Integer
  5.  
  6. Public Struct TagLib_Tag
  7.   dummy As Integer
  8.  
  9. Public Struct TagLib_AudioProperties
  10.   dummy As Integer
  11.  
  12. ' void taglib_set_strings_unicode(BOOL unicode)
  13. ' By default all strings coming into or out of TagLib's C API are in UTF8.
  14. ' However, it may be desirable For TagLib To operate On Latin1(ISO - 8859 - 1) strings In which Case this should be set To FALSE.
  15. Private Extern taglib_set_strings_unicode(unicode As Boolean)
  16.  
  17. ' TagLib_File *taglib_file_new_type(const char *filename)
  18. ' Creates a TagLib file based on \a filename.
  19. Private Extern taglib_file_new(filename As String) As TagLib_File
  20.  
  21. ' TagLib_Tag *taglib_file_tag(const TagLib_File *file)
  22. ' Returns a pointer to the tag associated with this file.
  23. Private Extern taglib_file_tag(_file As TagLib_File) As TagLib_Tag
  24.  
  25. ' char *taglib_tag_title(const TagLib_Tag *tag)
  26. ' Returns a string with this tag's title.
  27. Private Extern taglib_tag_title(tag As TagLib_Tag) As String
  28.  
  29. ' char *taglib_tag_artist(const TagLib_Tag *tag)
  30. ' Returns a string with this tag's artist.
  31. Private Extern taglib_tag_artist(tag As TagLib_Tag) As String
  32.  
  33. ' char *taglib_tag_album(const TagLib_Tag *tag)
  34. ' Returns a string with this tag's album name.
  35. Private Extern taglib_tag_album(tag As TagLib_Tag) As String
  36.  
  37. ' unsigned int taglib_tag_year(const TagLib_Tag *tag)
  38. ' Returns the tag's year or 0 if year is not set.
  39. Private Extern taglib_tag_year(tag As TagLib_Tag) As Integer
  40.  
  41. ' char *taglib_tag_comment(const TagLib_Tag *tag)
  42. ' Returns a string with this tag's comment.
  43. Private Extern taglib_tag_comment(tag As TagLib_Tag) As String
  44.  
  45. ' unsigned int taglib_tag_track(const TagLib_Tag *tag)
  46. ' Returns the tag's track number or 0 if track number is not set.
  47. Private Extern taglib_tag_track(tag As TagLib_Tag) As Integer
  48.  
  49. 'Private Extern taglib_tag_encoder(tag As TagLib_Tag) As String
  50. 'Private Extern taglib_tag_volume_number(tag As TagLib_Tag) As Integer
  51.  
  52. ' char *taglib_tag_genre(const TagLib_Tag *tag)
  53. ' Returns a string with this tag's genre.
  54. Private Extern taglib_tag_genre(tag As TagLib_Tag) As String
  55.  
  56. ' const TagLib_AudioProperties *taglib_file_audioproperties(const TagLib_File *file)
  57. ' Returns a pointer to the the audio properties associated with this file.
  58. Private Extern taglib_file_audioproperties(_file As TagLib_File) As TagLib_AudioProperties
  59.  
  60. ' int taglib_audioproperties_length(const TagLib_AudioProperties *audioProperties)
  61. ' Returns the length of the file in seconds.
  62. Private Extern taglib_audioproperties_length(audioProperties As TagLib_AudioProperties) As Integer
  63.  
  64. ' int taglib_audioproperties_bitrate(const TagLib_AudioProperties *audioProperties)
  65. ' Returns the bitrate of the file in kb/s.
  66. Private Extern taglib_audioproperties_bitrate(audioProperties As TagLib_AudioProperties) As Integer
  67.  
  68. ' int taglib_audioproperties_samplerate(const TagLib_AudioProperties *audioProperties)
  69. ' Returns the sample rate of the file in Hz.
  70. Private Extern taglib_audioproperties_samplerate(audioProperties As TagLib_AudioProperties) As Integer
  71.  
  72. ' int taglib_audioproperties_channels(const TagLib_AudioProperties *audioProperties)
  73. ' Returns the number of channels in the audio stream.
  74. Private Extern taglib_audioproperties_channels(audioProperties As TagLib_AudioProperties) As Integer
  75.  
  76. ' void taglib_tag_free_strings(void)
  77. ' Frees all of the strings that have been created by the tag.
  78. Private Extern taglib_tag_free_strings()
  79.  
  80. ' void taglib_file_free(TagLib_File *file)
  81. ' Frees and closes the file.
  82. Private Extern taglib_file_free(_file As TagLib_File)
  83.  
  84.  
  85.   Dim fl As TagLib_File
  86.   Dim autag As TagLib_Tag
  87.   Dim auprop As TagLib_AudioProperties
  88.   '  Dim secondi, minuti As Integer
  89.   '
  90.  
  91.   taglib_set_strings_unicode(False)
  92.   taglib_set_strings_unicode(True)
  93.  
  94.   fl = taglib_file_new(fileaudio)
  95.   If IsNull(fl) Then Error.Raise("Impossibile caricare il file audio: " & fileaudio)
  96.  
  97.   autag = taglib_file_tag(fl)
  98.   If IsNull(autag) Then Error.Raise("Impossibile ottenere i tag dal file audio: " & fileaudio)
  99.  
  100.   inf.Add(taglib_tag_album(autag), "Album")
  101.   inf.Add(taglib_tag_artist(autag), "Artist")
  102.   inf.Add(taglib_tag_track(autag), "Track")
  103.   inf.Add(taglib_tag_title(autag), "Title")
  104.   inf.Add(taglib_tag_year(autag), "Year")
  105.   inf.Add(taglib_tag_genre(autag), "Genre")
  106.   inf.Add(taglib_tag_comment(autag), "Comment")
  107.  
  108.   ' Mostra le proprietà del file audio:
  109.   auprop = taglib_file_audioproperties(fl)
  110.  
  111.   If IsNull(auprop) Then
  112.     inf.Add(True, "AudioError")
  113.   Else
  114.     inf.Add(taglib_audioproperties_length(auprop), "Length")
  115.     inf.Add(taglib_audioproperties_bitrate(auprop), "Bitrate")
  116.     inf.Add(taglib_audioproperties_samplerate(auprop), "Frequency")
  117.     inf.Add(taglib_audioproperties_channels(auprop), "Channels")
  118.  
  119.   ' Va in chiusura:
  120.   taglib_tag_free_strings()
  121.   taglib_file_free(fl)
  122.  
  123.   Return inf


No recuerdo si funcionaba para ogg y flac pero para mp3 si.
Saludos.

1 Saludo.
    ¡Gracias!
#6

Chulo, chulo. Mola esa estética. Yo tengo un gusto execrable para la estética y sé lo que digo... Big Grin Big Grin Big Grin

Saludos

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • tincho
    ¡Gracias!
#7

(20-08-2021, 08:13)Shordi escribió:  Chulo, chulo. Mola esa estética. Yo tengo un gusto execrable para la estética y sé lo que digo... Big Grin Big Grin Big Grin

No lo dirás por el fondo amarillo no? Big Grin porque es curradamente antiestético.

Saludos.

1 Saludo.
    ¡Gracias!
#8

Bien, tengo todo preparado para los "beta testers"
Ya me dicen algo.
https://gitlab.com/belmotek/vinilo
Saludos.

1 Saludo.
    ¡Gracias!
#9

Voy con la primera review:
-luego de clonar hay que bajarse la libreria
   sudo apt install libtagc0

-en la consola corren numeros del 1 al 60 que no se que son pero te van a llenar algun stack en algun momento, mejor sacarlos
-no se ve bien en modo no dark, los controles estan muy oscuros
[Imagen: lPobf5O.png]

Edito para un feature request obligado: muy lindo el disco dando vueltas, pero un reproductor si o si debe poder minimizarse y mostrarse como controles solamente

"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
[-] Los siguientes 1 usuarios dice gracias a tercoide por este post:
  • tincho
    ¡Gracias!
#10

Lo he bajado y probado y me ha hecho cosas raras. Primero en consola tiene un print incómodo en la línea 409 (creo recordar) de la función BackLP
Pero lo peor es a la hora de añadir canciones a la lista, si seleccionas varias y entre ellas hay una carpeta, entra en algún tipo de bucle de duración indeterminada, porque al cabo del rato (me fuí con una urgencia cangurera) cuando volví el Cinnamon había petado y se estaba ejecutando en modo a prueba de fallos (cosa curiosa porque ese modo parece un montón a Mate o a xface...) y gambas también había petado.

He vuelto a probar y al entrar otra vez en ese bucle he abortado.

Saludos.

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • tincho
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)