Cairo-Dock cafe | Café Cairo-Dock
taiebot65, Wednesday 04 November 2009 à 22:49
|
|
Subscription date : 26 October 2008
Messages : 1904
|
C'est toujours la meme chose que le post d'au-dessus.... |
fabounet, Thursday 05 November 2009 à 10:03
|
|
Subscription date : 30 November 2007
Messages : 17118
|
ah oki, je pense que le mieux c'est d'utiliser la méthode AddSubIcons, et de récupérer l'objet org.cairodock.CairoDock.subapplet, puis de l'utiliser comme l'objet org.cairodock.CairoDock.applet pour agir sur les icônes du sous-dock. |
Subscription date : 26 October 2008
Messages : 1904
|
waouhh j'ai decouvert d-feet pour regarder les commandes dbus de tous les programmes connectes c'est un tres bon projet pour voir les commandes que l'on peut faire et que l'on peut controler ... meme un peut trop complet pour moi
https://fedorahosted.org/d-feet/ |
matttbe, Saturday 07 November 2009 à 23:02
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Excellent outil, merci pour le partage  |
Subscription date : 26 October 2008
Messages : 1904
|
C'est bizarre j'ai plein de time out sur RegisterNewModule
CAD je lance une fois mon programme il marche pas je reessaie il marche
(ps je suis toujours sur l'ancienne version donc c'est peut etre deja fixe...) |
fabounet, Monday 09 November 2009 à 12:23
|
|
Subscription date : 30 November 2007
Messages : 17118
|
tu lances comment l'applet ? c'est le dock qui la lance automatiquement ? |
matttbe, Monday 09 November 2009 à 14:50
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Tu as quoi exactement comme message ? Car ppmt avait un problème également. |
Subscription date : 26 October 2008
Messages : 1904
|
Bon toujours en train de m'amuser avec python et dbus j'aimerais comprendre comment faire pour executer une commade toutes les x secondes ou millisecondes...
Je voudrais donner l'impression d'un CD qui tourne sans faire perdre trop de CPU donc il me faut une boucle et puis j'ai pense a quatres images se repetant d'un CD a intervalle regulier cela pourrait donner l'impression de rotation...
Pour l'instant c'est a l'etat de test mais je pense qu'avec plein d'images de CD cette impression pourrait le faire en reduisant au max la conso CPU..
import sys
import gobject
import glib
import gtk
import dbus
from dbus.mainloop.glib import DBusGMainLoop
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
remote_object = bus.get_object("org.cairodock.CairoDock","/org/cairodock/CairoDock")
iface = dbus.Interface(remote_object, "org.cairodock.CairoDock")
i=0
while i<1000:
iface.SetIcon("~/Images/CD1.svg", "none", "Rhythmbox","none")
iface.SetIcon("~/Images/CD2.svg", "none", "Rhythmbox","none")
iface.SetIcon("~/Images/CD3.svg", "none", "Rhythmbox","none")
iface.SetIcon("~/Images/CD4.svg", "none", "Rhythmbox","none")
i= i + 1
loop = gobject.MainLoop()
loop.run()
|
Subscription date : 26 October 2008
Messages : 1904
|
Une petite video bon les images devraient etres retravaillees parce que l'on a l'impression que le cd saute...
http://videobin.org/+lz/pw.html |
matttbe, Saturday 14 November 2009 à 17:06
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Pas mal . Mais perso, j'aurais fait un gif animé  |
Subscription date : 26 October 2008
Messages : 1904
|
Cairo-dock supporte les gif?? |
fabounet, Monday 16 November 2009 à 11:00
|
|
Subscription date : 30 November 2007
Messages : 17118
|
pour executer une commade toutes les x secondes ou millisecondes...
tu utilises un g_timeout (une fonction de la GLib, la syntaxe exacte en python je ne sais pas ) |
Subscription date : 26 October 2008
Messages : 1904
|
toujours dans ma recherche sur python je suis sur du code que je comprends pas du moins que j'arrive pas a faire marcher... ..
J'ai retrouve la version de spectrolet en python pure donc on a pas besoin de screenlet pour l'installer mais celle-ci n'est plus supporte par la version de python il me dit que
/home/taiebot/Bureau/Spectrolet-0.1a1-r10/Spectrolet.py:210: DeprecationWarning: os.popen3 is deprecated. Use the subprocess module.
audio_stream = os.popen3( "pacat -r -d %s" % device )
donc avec le code suivant
usr/bin/env python
import os, sys, gtk, cairo, time, random, struct, signal, gobject
from gtk import gdk
from threading import Thread
from numpy import *
if gtk.pygtk_version < ( 2, 9, 0 ):
print "PyGtk 2.9.0 or later required"
raise SystemExit
CHUNK = 1024 BITS = 16
CHANNELS = 2
keep_processing = True
audio_sample = ""
pixmap = None
peak_heights = [ 0 for i in range( 32 ) ]
total_peak_heights = [ 1 for i in range( 257 ) ]
def expose ( widget, event=None ):
global pixmap
widget.window.draw_drawable( widget.window.new_gc( ), pixmap,
event.area.x, event.area.y,
event.area.x, event.area.y,
event.area.width, event.area.height )
return True
def draw ( ):
global audio_sample, pixmap
if not audio_sample:
audio_sample = ""
audio_sample_str = audio_sample.ljust( CHUNK, chr( 0x00 ) )
audio_sample_array = [ ]
for i in range( CHUNK / ( ( BITS * CHANNELS ) / 8 ) ):
avg_amp = 0.0
for n in range( CHANNELS ):
amp = 0
for c in range( BITS / 8 ):
amp += ord( audio_sample_str[ i + ( n * BITS / 8 ) + c ] ) << ( c * 8 )
amp = ( amp + 2 ** ( BITS - 1 ) ) % 2 ** BITS - 2 ** ( BITS - 1 )
avg_amp += amp
avg_amp /= CHANNELS
audio_sample_array.append( avg_amp )
fft_array = fft.fft( array( audio_sample_array ) )
ffted_array = [ ]
i = 1
for x in fft_array:
i += 1
if total_peak_heights[ i - 1 ] < sqrt( x.real ** 2 + x.imag ** 2 ):
total_peak_heights[ i - 1 ] = sqrt( x.real ** 2 + x.imag ** 2 )
ffted_array.append( sqrt( x.real ** 2 + x.imag ** 2 ) / total_peak_heights[ i - 1 ] )
l = len( ffted_array ) / 4
width, height = pixmap.get_size( )
cst = cairo.ImageSurface( cairo.FORMAT_ARGB32, width, height )
cr = cairo.Context( cst )
n_bars = 32
bar_width = 16
bar_spacing = 1
for i in range( 1, l, l / n_bars ):
cr.set_source_rgba( 0.0, 0.6, 1.0, 0.8 )
bar_amp_norm = ffted_array[ i ]
bar_height = bar_amp_norm * height + 3
peak_index = int( ( i - 1 ) / ( l / n_bars ) )
if bar_height > peak_heights[ peak_index ]:
peak_heights[ peak_index ] = bar_height
else:
peak_heights[ peak_index ] -= 3
if peak_heights[ peak_index ] < 3:
peak_heights[ peak_index ] = 3
for j in range( 0, int( bar_height / 3 ) ):
cr.rectangle(
( bar_width + bar_spacing ) * ( i / ( l / n_bars ) ),
height - j * 3,
bar_width,
-2
)
cr.fill( )
cr.set_source_rgba( 1.0, 0.0, 0.0, 0.8 )
cr.rectangle(
( bar_width + bar_spacing ) * ( i / ( l / n_bars ) ),
height - int( peak_heights[ peak_index ] ),
bar_width,
-2
)
cr.fill( )
cr.fill( )
cr.stroke( )
cr_pixmap = pixmap.cairo_create( )
cr_pixmap.set_source_rgba( 1.0, 1.0, 1.0, 0.0 ) cr_pixmap.set_operator( cairo.OPERATOR_SOURCE )
cr_pixmap.paint( )
cr_pixmap.set_source_surface( cst, 0, 0 )
cr_pixmap.paint( )
return False
def screenChanged ( widget, old_screen=None ):
screen = widget.get_screen( )
colormap = screen.get_rgba_colormap( )
widget.set_colormap( colormap )
return False
def timerExecFrame ( win ):
global pixmap
draw( )
width, height = pixmap.get_size( )
win.queue_draw_area( 0, 0, width, height )
win.window.process_updates( True )
return True
def discontinueProcessing ( ):
global keep_processing
keep_processing = False
return 0
def captureAudio ( ):
global keep_processing, audio_sample
device = os.popen( "pactl list | grep monitor" ).readline( ).strip( )[len( "Name: " ):]
audio_stream = os.popen3( "pacat -r -d %s" % device )
while keep_processing:
audio_sample = audio_stream[ 1 ].read( CHUNK )
for stream in audio_stream:
stream.close( )
print "\ncaptureAudio Thread Die..."
def animationLoop ( win ):
global keep_processing
while keep_processing:
timerExecFrame( win )
time.sleep( 1.0 / 30 )
print "\nanimationLoop Thread Die..."
def main(args):
global keep_processing, pixmap
gdk.threads_init( )
gdk.threads_enter( )
width = 544
height = 100
screen = gdk.screen_get_default( )
win = gtk.Window( )
win.set_title( 'Spectrumize' )
win.set_default_size( width, height )
win.stick( )
win.set_keep_below( True )
win.set_decorated( False )
win.set_skip_taskbar_hint( True )
win.connect( 'delete-event', gtk.main_quit )
win.connect( 'expose-event', expose )
win.connect( 'screen-changed', screenChanged )
screenChanged( win )
win.show_all( )
pixmap = gdk.Pixmap( win.window, width, height, -1 )
win.set_app_paintable( True )
win.set_double_buffered( False )
screen_rect = screen.get_monitor_geometry( 0 )
win.move( screen_rect.width / 2 - width / 2 + screen_rect.x, screen_rect.height / 2 - height / 2 + screen_rect.y )
ca_thread = Thread( target=captureAudio )
ca_thread.start( )
gobject.timeout_add( 33, timerExecFrame, win )
try:
gtk.main( )
except KeyboardInterrupt:
pass
gdk.threads_leave( )
discontinueProcessing( )
ca_thread.join( )
print "Main Thead Die..."
return True
if __name__ == '__main__':
try:
import ctypes
libc = ctypes.CDLL('libc.so.6')
libc.prctl(15, sys.argv[ 0 ], 0, 0, 0)
except:
pass
sys.exit( main( sys.argv ) )
Il faudrait remplacer
def captureAudio ( ):
global keep_processing, audio_sample
device = os.popen( "pactl list | grep monitor" ).readline( ).strip( )[len( "Name: " ):]
audio_stream = os.popen3( "pacat -r -d %s" % device )
while keep_processing:
audio_sample = audio_stream[ 1 ].read( CHUNK )
for stream in audio_stream:
stream.close( )
parce que os.popen() et os.popen3() ne sont plus supportes .. donc faudrait les remplacer par
http://docs.python.org/library/subprocess.html#subprocess-replacements
moi je suis paume mais ca serait un bon debut pour avoir un spectre de musique dans le dock...si quelqu'un pouvait m'aider.. |
ppmt, Friday 04 December 2009 à 01:33
|
|
Subscription date : 29 November 2007
Messages : 3520
|
Ben deja il faut importer le module subprocess
from subprocess import Popen
subprocess apparement contient un class Popen qui te permet de remplacer entre autre popen et popen3
os.popen( "pactl list | grep monitor" )
deviendrait
Popen("pactl list | grep monitor", shell=True)
par contre pour le reste tu va devoir bidouiller un peu car Popen ne connait pas readline
sinon quel version de Python tu utilises? |
Subscription date : 26 October 2008
Messages : 1904
|
2.6.4 ...
MAis c'est vraiment hors de porte j'ai l'impression.. |
ppmt, Friday 04 December 2009 à 23:05
|
|
Subscription date : 29 November 2007
Messages : 3520
|
comment ca hors de porte?
je ne comprends pas ce que tu veux dire?
Voila ce que ca donne dans un CLI de python.
>>>import subprocess
>>> subprocess.Popen("pactl list | grep monitor", shell=True)
<subprocess.Popen object at 0x7f4b15a3fcd0>
>>> Monitor Source: alsa_output.pci-0000_00_07.0.analog-stereo.monitor
Name: alsa_output.pci-0000_00_07.0.analog-stereo.monitor
device.class = "monitor"
ce n'est pas complique ensuite d'extraire la ligne qui t'interresse....j'essaierais ce soir et je te tiens au courant. |
Subscription date : 26 October 2008
Messages : 1904
|
Le probleme c'est qu'il y a l'autre aussi...
device = os.popen( "pactl list | grep monitor" ).readline( ).strip( )[len( "Name: " ):]
audio_stream = os.popen3( "pacat -r -d %s" % device )
si je comprends bien il trouve bien tout mais apres je sais pas quoi en faire il faut que os.popen3 reconnaisse aussi pactL
eption in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 477, in run
self.target(*self.args, **self.kwargs)
File "./Spectrolet.py", line 210, in captureAudio
audio_stream = subprocess.Popen( "pactl -r -d %s" %device)
File "/usr/lib/python2.6/subprocess.py", line 621, in init
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1126, in _execute_child
raise child_exception
OSError: [Errno 2] Aucun fichier ou dossier de ce type
Moniteur de la source : alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
Nom : alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
device.class = "monitor"
|
Subscription date : 26 October 2008
Messages : 1904
|
Bon allez reouverture pour un nouveau devloppement de plugin Taskbar in sous-dock
Bon j'ai peut etre encore sous-estime la difficulte mais bon il semble plus facile que Pidgin... |
Subscription date : 26 October 2008
Messages : 1904
|
Aller 1ere version j'affiche le nom de la class, le nom de l'appli, le nom de la fenetre de toutes les fenetres d'ouvertes ca fait beaucoup pour une seule et meme fenetre mais on ne sait jamais ca pourra servir pour plus tard et il faut que je trouve comment regrouper toutes ces infos dans un seul group
import gtk, wnck, os
def window_opened(screen, window):
ouverte = window.get_name()
print "Fenetre ouverte: " + ouverte
pass
def window_closed(screen, window):
ferme = window.get_name()
print "Fenetre ferme: " + ferme
pass
def application_opened(screen, application):
Appli_ouverte = application.get_name()
print "Application ouverte: " + Appli_ouverte
def application_closed(screen, application):
Appli_ferme = application.get_name()
print "Application ferme: " + Appli_ferme
def class_group_opened(screen, class_group):
Class_ouverte = class_group.get_name()
print "Class ouverte: " + Class_ouverte
def class_group_closed(screen, class_group):
Class_ferme = class_group.get_name()
print "Class ferme: " + Class_ferme
screen = wnck.screen_get_default()
screen.connect("window_opened", window_opened)
screen.connect("window_closed", window_closed)
screen.connect("application_opened", application_opened)
screen.connect("application_closed", application_closed)
screen.connect("class_group_opened", class_group_opened)
screen.connect("class_group_closed", class_group_closed)
gtk.main()
|
Subscription date : 26 October 2008
Messages : 1904
|
Est ce que Dbus permet le permet d'afficher des icones si on lui mets des pixbuf..
<gtk.gdk.Pixbuf object at 0xb754ab44 (GdkPixbuf at 0x9403f30)> |
Cairo-Dock cafe | Café Cairo-Dock
|