https://foro.gambas-es.org/viewtopic.php?f=5&t=1792
-----------------------------------
sos-fan
Lunes, 08 Agosto 2011, 09:12

Rockola Programada En Gambas
-----------------------------------
[align=justify]Hola comunidad, desde hace algunas semanas me dio por buscar programa para rockolas que funcionase en Linux, después de buscar tanto encontré varias soluciones, pero se me hacen demasiado exagerado en opciones y muy pesados, así que me registre acá para pedir ayuda con ustedes o algún interesado, pero, para no molestarlos demasiado decidí buscar referencias sobre gambas ya que no había programado nada aquí, y armar algo para no empezar desde cero.
[/align]
La cosa quedo así, me he inspirado en SK Jukebox para Windows, aunque me hace falta agregarle algo mas  :sad: .

 [img]http://foro.gambas-es.org/files/images/1376/pantallazo.jpg[/img] 

Ahora vengo a pedirles su ayuda para que revisen si algo anda mal, o proponer ideas o código.

[b]Lo que puede hacer:[/b]
[list][*]Crea y agrega todas las canciones con extensión mp3 y cover en una base de datos sqlite.
[*]Organiza por orden alfabético los albumnes.
[*]Maneja crédito pero aun no esta correctamente.(solo falta ventana de control de creditos)
[*]Avanza/retrocede la lista de albumnes.
[*]Vista ampliada del álbum.
[*]Reproduce usando mplayer vía exec.(aun no funciona la barra de progreso por que no se como  :sad: )
[*]Ventana de configuración se muestra presionando "o"
[*][strike]Ordena mas de 9 albumnes, hasta 99[/strike]
[*]Maneja cola de reproducción usando un array.[/list]

[b]Lo que no puede hacer pero debería hacerlo en un futuro:[/b]
[list][*][strike]Búsqueda, reproducción y organización de vídeos.[/strike]
[*][strike]La sección para karaokes falta.[/strike]
[*]No controla el volumen.
[*][strike]Saltar por letra.[/strike]
[*]El formulario de control de créditos falta.
[*][strike]Ordenar pocos y muchos albumnes(1 hasta 9, de 100 hasta 999 y 1000 hasta 9999 )[/strike]
[*]Crear miniaturas para los covers, ya que si el cover es muy pesado, se laggea mucho.[/list]

descarga fuente

[url=http://www.4shared.com/file/YD_1sRrP/skm-jukebox-002tar.html]Descargar


-----------------------------------
Invitado
Lunes, 08 Agosto 2011, 11:40

Re: Rockola Programada En Gambas
-----------------------------------
Supongo que rockola será una ¿emisora de radio? Voy a echarle un ojete, que pinta bien... :)


-----------------------------------
slasho
Lunes, 08 Agosto 2011, 17:23

Re: Rockola Programada En Gambas
-----------------------------------
yo hace muchos años en gambas 1  hize una Wurlitzer que reproduce video
por la salida S-video y en la pantalla principal tiene el programa que controla
con creditos y todo =)

Tengo que haerle modificaciones para que corra con la ultima version, 
cuando lo termine lo colocare aca para que lo puedan ver.


-----------------------------------
jguardon
Lunes, 08 Agosto 2011, 20:06

Re: Rockola Programada En Gambas
-----------------------------------
[quote user="BrunoIV" post="10451"]Supongo que rockola será una ¿emisora de radio? Voy a echarle un ojete, que pinta bien... :)[/quote]

Supongo que será como un "JukeBox", no?


-----------------------------------
sos-fan
Domingo, 04 Septiembre 2011, 11:38

Re: Rockola Programada En Gambas
-----------------------------------
Es un programa para controlar ciber rockolas,  que son como estos:

[img]http://foro.gambas-es.org/files/images/1376/asdf.jpg[/img]

Obviamente se controla con un tecladito numerico para laptop.


-----------------------------------
jguardon
Domingo, 04 Septiembre 2011, 15:18

Re: Rockola Programada En Gambas
-----------------------------------
He descargado la aplicación y la he abierto desde gambas, pero lamento decirte que no hace absolutamente nada. No encuentra canciones (y tengo unas cuantas en la carpeta Música) y no responde a ningún evento de teclas o ratón...  Ha creado la base de datos, eso sí, en la carpeta de usuario, pero nada más.

He ojeado el código y no veo por qué no funciona, aunque no he hecho demasiado hincapié. Lo que si he observado es que usas mucho el TRY, pero no controlas los posibles errores mediante ERROR y/o el bloque CATCH, así que si hay un error en tu programa, nunca lo sabremos a ciencia cierta, ya que pasará inadvertido. 

También deberías comprobar si existe la carpeta Música (y también las demás), y si no, proporcionar una manera de elegir una ruta alternativa, incluso varias.

Otra crítica constructiva, es que en cualquier aplicación se hace necesaria alguna manera alternativa de interactuar con ella, en este caso algún [i]menú[/i], bien el típico menú de aplicación o un menú emergente con el RMB.

Como ves, aparte de alguna cosa en el código, los fallos mas evidentes están en el ámbito de la usabilidad de tu aplicación. Espero que mi crítica sirva para mejorarla a todos los niveles, ya que, aunque hay muchas aplicaciones similares, la que hace uno  mismo es siempre la "criatura" de uno y el orgullo personal.

Saludos


-----------------------------------
clsource
Miercoles, 08 Febrero 2012, 02:05

Re: Rockola Programada En Gambas
-----------------------------------
Genial Proyecto.
Vere en que puedo ayudar

Bien. 
Encontre que mplayer puede correr en modo esclavo

http://www.mplayerhq.hu/DOCS/tech/slave.txt

un ejemplo en python
http://code.activestate.com/recipes/542195-access-mplayer-slave-mode-from-python/

entonces si haces un exec con
mplayer -slave -quiet - idle

podras darle comandos y obtener información del archivo en reproducción
como su tiempo y id3

Saludos


-----------------------------------
clsource
Domingo, 19 Febrero 2012, 15:18

Re: Rockola Programada En Gambas
-----------------------------------
Acá he creado una clase con mplayer
[code linenumbers=false syntax=gambas]
' Gambas class file

'  * A Simple mplayer wrapper class
'  * Camilo Castro <clsource> 2012
'  * see http://www.mplayerhq.hu/DOCS/tech/slave.txt For more info
' 
'  * This program Is Free software.It comes without any warranty, To
'  * the extent permitted by applicable law.You can redistribute it
'  * And / Or modify it under the terms Of the Do What The Fuck You Want
'  * To Public License, Version 2, As Published by Sam Hocevar.See
'  * http://sam.zoy.org/wtfpl/COPYING For more details.

Event mpOutput(data As String)

' If you remove static, you will get a lot of instances of mplayer 
Static Private mplayer As Process


Public Sub _new()
    ' Lazy instantiation?
   If Not mplayer Then mplayer = Exec ["mplayer", "-slave", "-idle", "-quiet"] For Read Write As "mpProcess"

End

' Process Methods
Public Sub mpProcess_read()

    Dim sData As String

    sData = Read #Last, -250

    ' We delegate the output parsing to a listener
    Raise mpOutput(sData)

End


Public Sub mpProcess_kill()

    mplayer = Null

End

' Useful procedures
Public Sub kill()

    mplayer.kill

End

Public Sub togglePlayPause()

    If Not mplayer Then Return

    Print #mplayer, " "

End

Public Sub stop()

    If Not mplayer Then Return
    Print #mplayer, "stop"
    ' mplayer.Kill

End

Public Sub play(filePath As String)

    'Print filePath

    If Not mplayer Then Return

    'Print mplayer.Id
    filePath = Quote$(Conv(filePath, Desktop.Charset, System.Charset))
   
    ' Pause the current playing file, then load the new one
    Print #mplayer, "pausing_keep_force pt_step 1"
    'Print #mplayer, "get_property pause"
    Print #mplayer, "loadfile " & filePath

End

Public Sub setVolume(value As Float)
  ' Some checks 
  If value <0> 100 Then value = 100
     
  If Not mplayer Then Return
  Print #mplayer, "volume " & value 
    
End

' Useful info
Public Sub volume()
    
  If Not mplayer Then Return
  Print #mplayer, "get_property volume"  
    
End

Public Sub fileName()
    
    If Not mplayer Then Return
    Print #mplayer, "get_file_name"  
    
End

Public Sub metaAlbum()
    
    If Not mplayer Then Return
    Print #mplayer, "get_meta_album"  
    
    
End

Public Sub metaArtist()
    
  If Not mplayer Then Return
  Print #mplayer, "get_meta_artist"  

End

Public Sub metaGenre()
    
  If Not mplayer Then Return
  
  Print #mplayer, "get_meta_genre"  
      
End

Public Sub metaComment()
    
  If Not mplayer Then Return
  
  Print #mplayer, "get_meta_comment"  
      
End

Public Sub metaTitle()
    
  If Not mplayer Then Return
  
  Print #mplayer, "get_meta_title"  
      
End

Public Sub metaTrack()
    
  If Not mplayer Then Return
  
  Print #mplayer, "get_meta_track"  
      
End

Public Sub metaYear()
    
  If Not mplayer Then Return
  
  Print #mplayer, "get_meta_year"  
      
End

Public Sub percentage()

    If Not mplayer Then Return
    Print #mplayer, "get_percent_pos"

End

Public Sub length()
    
    If Not mplayer Then Return
    Print #mplayer, "get_time_length"
    
End

Public Sub time()
    
    If Not mplayer Then Return
    Print #mplayer, "get_time_pos"  
    
End
[/code]


-----------------------------------
razaAztk
Domingo, 04 Marzo 2012, 21:40

Re: Rockola Programada En Gambas
-----------------------------------
@clsource

Disculpa la siguiente pregunta boba, pero es que de POO no se nada........ Cómo uso tu class???

Lo que hice fue poner tu código en un archivo class de nombre mplayer, y en el código de mi formulario puse:

[code linenumbers=false syntax=gambas]
PUBLIC SUB Form_Open()
  
  DIM mp AS mplayer
  'mp = NEW mplayer
  mp.play("/home/zzz/Music/Diablo Swing Orchestra - The Butcher's Ballroom/01 - Balrog Boogie.ogg")

END
[/code]

Pero me da un error, me dice "Unexpected READ at line 30 in mplayer class" (esto es en el método mpProcess_read())

Gracias por tu código, y espero me puedas auxiliar.

Saludos!


-----------------------------------
sos-fan
Sabado, 01 Septiembre 2012, 14:29

Re: Rockola Programada En Gambas
-----------------------------------
La parte de mpProcess_read la modifique, quedando de esta manera.

[code linenumbers=false syntax=gambas]
Public Sub mpProcess_read()

   Dim sData As String

   Read #Last, sData, -250

   ' We delegate the output parsing to a listener
   Raise mpOutput(sData)

End
[/code]

Tambien modifique Play.

[code linenumbers=false syntax=gambas]

Public Sub play(filePath As String)

   'Print filePath

   If Not mplayer Then Return

   'Print mplayer.Id
   'filePath = Quote$(Conv(filePath, Desktop.Charset, System.Charset))
  
   ' Pause the current playing file, then load the new one
   Print #mplayer, "pausing_keep_force pt_step 1"
   'Print #mplayer, "get_property pause"
   Print #mplayer, "loadfile \"" & filePath & "\""

End
[/code]

La parte en FMain lo puse de esta manera.

[code linenumbers=false syntax=gambas]
PUBLIC SUB Form_Open()
 
 DIM mp AS NEW mplayer

 mp.play(User.Home & "/Música/Re Mikus/12.Heart Beat.mp3")

END
[/code]

Así reproduce, pero aun no se como usar MetaAlbum, setVolume, MetaArtist, etc.  :?:


