IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec Python Discussion :

Traduire un script ruby pour vérifier un bug


Sujet :

GTK+ avec Python

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Par défaut Traduire un script ruby pour vérifier un bug
    Bonjour.

    J'obtiens un bug assez dur à reproduire lorsque j'utilise conjointement ruby/gtk2 et ruby/gst ("bindings" pour GStreamer). J'ai circonscrit la reproduction du bug à script ruby d'une quarantaine de lignes. Lorsque le bug est reproduit, l'interface graphique "freeze". L'apparition du bug semble dépendre de la configuration de l'ordinateur. En particulier la présence d'un proxy semble supprimer le bug.

    J'aimerai essayer de connaitre l'origine de ce bug. Pour éliminer les bibliothèques ruby de mes suspicions, j'aimerai tester le un script équivalent en python.

    Quelqu'un pourrait-il traduire ce code ruby afin que je teste avec la même configuration ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #!/usr/bin/env ruby
    # encoding: UTF-8
     
    require 'gtk2'
    require 'gst'
     
    class Player
    	def initialize
                    @soup=Gst::ElementFactory.make('souphttpsrc')
    	end
     
    	def play
                    @soup.location='http://mp3.live.tv-radio.com/centpourcent/all/centpourcent-128k.mp3'
    		p "Going to play..."
    		#@soup.play##Freeze
    		#Thread.new{@soup.play}.join##Freeze
    		Thread.new{@soup.play}#Do not Freeze
    		p  "Playing."
    	end
    end
     
    class Gui
    	def initialize(player)
                    @player=player
                    @bstop=Gtk::Button.new('Stop')
                    @bstop.signal_connect('clicked'){@player.stop}
                    @bplay=Gtk::Button.new('Play')
                    @bplay.signal_connect('clicked'){@player.play}
                    @box=Gtk::HBox.new
                    @box.pack_start(@bstop)
                    @box.pack_start(@bplay)
                    @window=Gtk::Window.new
                    @window.add(@box)
                    @window.show_all
                    @window.signal_connect("delete_event"){Gtk.main_quit; true}
    	end
    end
     
    player=Player.new
    gui=Gui.new(player)
    Gtk.main
    Si vous avez des questions sur le code ruby, n'hésitez pas à les poser.

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Essaie ce truc vite fait / mal fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #!/usr/bin/python2
    # -*- coding:utf-8 -*-
     
    import pygtk
    pygtk.require('2.0')
    import gtk
    import gst
     
     
    class Player:
        def __init__(self):
            self.player = gst.Pipeline("player")
            source = gst.element_factory_make('souphttpsrc', "source")
            source.set_property('location', 'http://mp3.live.tv-radio.com/centpourcent/all/centpourcent-128k.mp3')
            decoder = gst.element_factory_make('mad', "decoder")
            conv = gst.element_factory_make('audioconvert', "converter")
            sink = gst.element_factory_make('alsasink', "output")
            self.player.add(source, decoder, conv, sink)
            gst.element_link_many(source, decoder, conv, sink)
     
        def play(self, *data):
            print "Going to play..."
            #@soup.play##Freeze
            #Thread.new{@soup.play}.join##Freeze
            #Thread.new{@soup.play}#Do not Freeze
            self.player.set_state(gst.STATE_PLAYING)
            print "Playing."
     
        def stop(self, *data):
            self.player.set_state(gst.STATE_NULL)
            print "Stop."
     
     
    class Gui:
        def __init__(self, player):
            self.player = player
            bstop = gtk.Button('Stop')
            bstop.connect('clicked', self.player.stop)
            bplay = gtk.Button('Play')
            bplay.connect('clicked', self.player.play)
            box = gtk.HBox()
            box.pack_start(bstop)
            box.pack_start(bplay)
            window = gtk.Window()
            window.add(box)
            window.show_all()
            window.connect('destroy', self.quit)
     
        def quit(self, *data):
            self.player.stop()
            gtk.main_quit()
     
     
    player = Player()
    gui = Gui(player)
    gtk.main()
    Note : je m'y connais pas trop en Gstreamer, et j'ai pas compris le truc avec le Thread...
    Néanmoins, quand je clique sur "play", y'a bien une musique de djeuns dans mes écouteurs


    -

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Par défaut
    Merci monnomamoi.

    J'écoute Laura Pausini via python.

    Le truc avec Thread c'est juste une façon de contourner le bug! Je sais pas trop pourquoi çà marche ou pourquoi j'ai eu l'idée d'essayer.

    Bon, je suppose que le bug est alors dans une des deux bibliothèques ruby.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Si tu veux juste lire de la musique, autant utiliser directement l'élément playbin2 et laisser gstreamer gérer tout ce qui est threads, ... pour toi.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Par défaut
    Bonjour.

    J'utilise playbin mais ici il s'agit de reproduire un bug. Comme ce bug n'apparaît qu'avec certaines radios, j'ai forcé l'utilisation de "souphttpsrc" pour vérifier que le bug provient de là.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Forum] Script pour vérifier si l'e-mail est reçu
    Par ovi_ili dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 02/09/2011, 19h42
  2. Script shell pour vérifier l'état de plusieurs services
    Par sergeh dans le forum Administration système
    Réponses: 3
    Dernier message: 23/08/2011, 16h00
  3. Réponses: 1
    Dernier message: 02/04/2009, 16h10
  4. Réponses: 1
    Dernier message: 02/04/2009, 16h10
  5. script pour vérifier si un champ existe déjà dans une BDD
    Par tomguiss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/02/2009, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo