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

Programmation multimédia/Jeux Python Discussion :

Comment utiliser un son


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut Comment utiliser un son
    Bonjour,

    Je souhaiterai créer un petit programme me permettant de lire à la suite plusieurs sons (.wav ou .og ou .mp3...).
    C'est à dire:
    son1.ogg puis lorsque celui-ci est fini son2.ogg...

    J'ai trouvé plusieurs outils:

    *Avec wxPython il y a wxSound pour les sons .wav. J'arrive à lancer le premier son et éventuellement avec celui-ci à faire une boucle, mais je en parviens pas de manière simple. Une solution serait de boucler le lancement d'une fonction en s'assurant que celle-ci est correctement achevée (ça je sais pas faire) et à chaque relancement de la dite fonction changer le tritre à jouer...
    *Avec Pygame, j'arrive à lancer deux son l'un à la suite de l'autre, mais pas plus, alors que mon projet devra en lancer une bonne centaine...
    *Il existe Pymedia mais pas pour Python2.5 (celui que j'utilise évidemment...)
    *J'ai trouvé SFML, mais pas moyen de le faire fonctionner (voir l'un de mes messages)
    *Toujours pour wxPython il y a aussi SDL. Là je vais commencer à étudier ceci.


    Le but de mon message est de savoir si quelqu'un peut m'aider ou me donner l'adresse d'une librairie simple et qui marche...

    D'avance merci
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Décidément, t'es vraiment dans le même cas que moi
    J'ai trouvé tout un tas de librairie mais pas pour Python 2.5 , c'est d'ailleurs pour ça que j'ai demandé s'il y avait moyen d'installer une librairie pour Python 2.4 sous Python 2.5
    Maintenant, je place tous mes espoirs sur gstreamer

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    J'ai continué à regarder comment je pouvais faire avec wxPython.
    Il y a wxSound et wxMediaCtrl.

    avec wxSound le seul moyen de faire ce que je veux c'est à priori de boucler une fonction.
    wxMediaCtrl a l'air plus puissant, mais je n'ai pas encore eu le temps de tout zieuter... Il permet notamment de connaitre la durée en milli-seconde du fichier qui est joué... donc en bidouillant deux ou trois bout de code, on pourrait imaginer le lancement d'une "tempo" qui permettrai de réinitialiser la fonction.
    (En automatisme c'est super simple à faire... donc je pense que là aussi...


    Sinon je vais regarder aussi gstreamer...

    Si tu as plus d'info hésite pas...
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Bon voilà, j'ai pu avancer dans mon projet. Voici le code:

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #-*- coding:utf-8 -*-
     
    import wx
    import wx.media
     
     
    ID_PLAY = 101
    ID_STOP = 102
    ID_PAUSE = 103
     
     
    class Root(wx.Frame):
        def __init__(self, titre):
            wx.Frame.__init__(self, None, -1, title = titre, size = (372,165))
            icon = wx.Icon('icone.ico', wx.BITMAP_TYPE_ICO)
            self.SetIcon(icon)
            self.status = wx.StatusBar(self, -1)
            self.status.SetFieldsCount(1)
            self.status.SetStatusWidths([-1])
            self.SetStatusBar(self.status)
     
            font0 = wx.Font(9, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, 'Verdana')
            font1 = wx.Font(8, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, 'Verdana')
     
            sizer = wx.GridBagSizer()
     
            conteneur = wx.Panel(self, -1)
            conteneur.SetSizer(sizer)
     
            titre = wx.StaticText(conteneur, -1, u"SON WAVE A JOUER:", style = wx.ALIGN_CENTER)
            titre.SetFont(font0)
            self.entree1 = wx.TextCtrl(conteneur, -1, 'son1')
            self.entree1.SetFont(font1)
            self.entree2 = wx.TextCtrl(conteneur, -1, 'son2')
            self.entree2.SetFont(font1)
            btn1 = wx.Button(conteneur, -1, u"PLAY", (20,20))
            btn1.SetFont(font1)
            self.Bind(wx.EVT_BUTTON, self.OnPlay, btn1)
            btn2 = wx.Button(conteneur, -1, u"PAUSE", (20,20))
            btn2.SetFont(font1)
            self.Bind(wx.EVT_BUTTON, self.OnPause, btn2)
            btn3 = wx.Button(conteneur, -1, u"STOP", (20,20))
            btn3.SetFont(font1)
            self.Bind(wx.EVT_BUTTON, self.OnStop, btn3)
     
     
            self.pos = wx.StaticText(conteneur, -1, '0')
            self.son = wx.media.MediaCtrl(conteneur,-1,self.entree1.GetValue()+'.wav', style=wx.SIMPLE_BORDER)
     
            sizer.Add(titre, (0,2))
            sizer.Add(self.entree1, (1,1))
            sizer.Add(self.entree2, (1,2))
            sizer.Add(btn1, (3,1))
            sizer.Add(btn2, (3,2))
            sizer.Add(btn3, (3,3))
            sizer.Add(self.son, (3,4))
            sizer.Add(self.pos, (3,5))
     
        def OnTimer(self, evt):
            offset = self.son.Tell()
            self.pos.SetLabel('%d' % offset)
            a = self.son.Length
            self.Comparaison(offset)
     
        def OnPlay(self, evt):
            self.timer = wx.Timer(self)
            self.Bind(wx.EVT_TIMER, self.OnTimer)
            self.timer.Start(100)
            self.son.Play()
     
     
        def Comparaison(self, time):
            if time < 1000:
                pass
            else:
                print time
     
        def OnPause(self, evt):
            self.son.Pause()
     
        def OnStop(self, evt):
            self.son.Stop()
     
     
    class MonApp(wx.App):
        def OnInit(self):
            fen = Root(u"Musique")
            fen.Show(True)
            self.SetTopWindow(fen)
            return True
     
    app = MonApp()
    app.MainLoop()
    Maintenant il me reste plus qu'a trouver une solution pour remplacer le fichier à lire à l'instant T et de relancer la fonction OnPlay().
    Je pense que ceci doit être faisable dans la fonction Comparaison() mais j'ai pas encore trouvé.

    Si quelqu'un à une idée, elle sera la bienvenue.

    Moi je re-travaille dessus demain.

    Bye à tous
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Bon voilà j'ai pu encore avancé un peu et je bloque là.

    J'ai quelque peut modifier le code. Le voici à jour:
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    #-*- coding:utf-8 -*-
     
    import wx
    import wx.media
     
     
    ID_PLAY = 101
    ID_STOP = 102
    ID_PAUSE = 103
     
     
    class Root(wx.Frame):
        def __init__(self, titre):
            wx.Frame.__init__(self, None, -1, title = titre, size = (372,165))
            icon = wx.Icon('icone.ico', wx.BITMAP_TYPE_ICO)
            self.SetIcon(icon)
            self.status = wx.StatusBar(self, -1)
            self.status.SetFieldsCount(1)
            self.status.SetStatusWidths([-1])
            self.SetStatusBar(self.status)
     
            font0 = wx.Font(9, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, 'Verdana')
            font1 = wx.Font(8, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, 'Verdana')
     
            sizer = wx.GridBagSizer()
     
            conteneur = wx.Panel(self, -1)
            conteneur.SetSizer(sizer)
     
            titre = wx.StaticText(conteneur, -1, u"SON WAVE A JOUER:", style = wx.ALIGN_CENTER)
            titre.SetFont(font0)
            self.entree1 = wx.TextCtrl(conteneur, -1, 'son1')
            self.entree1.SetFont(font1)
            self.entree2 = wx.TextCtrl(conteneur, -1, 'son2')
            self.entree2.SetFont(font1)
            btn1 = wx.Button(conteneur, -1, u"PLAY", (20,20))
            btn1.SetFont(font1)
            self.Bind(wx.EVT_BUTTON, self.Play, btn1)
            btn2 = wx.Button(conteneur, -1, u"PAUSE", (20,20))
            btn2.SetFont(font1)
            self.Bind(wx.EVT_BUTTON, self.OnPause, btn2)
            btn3 = wx.Button(conteneur, -1, u"STOP", (20,20))
            btn3.SetFont(font1)
            self.Bind(wx.EVT_BUTTON, self.OnStop, btn3)
     
     
            self.pos = wx.StaticText(conteneur, -1, '0')
            self.son = wx.media.MediaCtrl(conteneur,-1, style=wx.SIMPLE_BORDER)
            self.Choix()
     
            sizer.Add(titre, (0,2))
            sizer.Add(self.entree1, (1,1))
            sizer.Add(self.entree2, (1,2))
            sizer.Add(btn1, (3,1))
            sizer.Add(btn2, (3,2))
            sizer.Add(btn3, (3,3))
            sizer.Add(self.son, (3,4))
            sizer.Add(self.pos, (3,5))
     
        def OnTimer(self, evt):
            offset = self.son.Tell()
            self.pos.SetLabel('%d' % offset)
            a = self.son.Length
            self.Comparaison(offset)
     
        def Play(self,evt):
            self.OnPlay()
     
        def OnPlay(self):
            self.timer = wx.Timer(self)
            self.Bind(wx.EVT_TIMER, self.OnTimer)
            self.timer.Start(100)
            self.son.Play()
     
        def Choix(self):
            self.OnLoad('son1.wav')
     
        def OnLoad(self, path):
            self.son.Load(path)
     
     
        def Comparaison(self, time):
            if time < 1000:
                pass
            else:
                self.OnStop(self)
                self.OnLoad('son2.wav')
                self.OnPlay()
                print time
     
        def OnPause(self, evt):
            self.son.Pause()
     
        def OnStop(self, evt):
            self.son.Stop()
     
     
    class MonApp(wx.App):
        def OnInit(self):
            fen = Root(u"Musique")
            fen.Show(True)
            self.SetTopWindow(fen)
            return True
     
    app = MonApp()
    app.MainLoop()

    Le problème se situe au moment où la fonction Comparaison() se lance.
    Une fois time > à 1000, le son s'arrête, se charge mais ne redémarre pas...

    Un petit coup de main serai le bienvenu.

    Merci
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Pour Pymedia, il existe une version pour windows et python 2.5
    =>
    http://pymedia.org/downloads/pymedia...in32-py2.5.exe

Discussions similaires

  1. Comment utiliser du son avec la gtk?
    Par grex1 dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 24/02/2010, 19h11
  2. Comment utiliser FMod avec plusieurs cartes sons?
    Par NJKMASTER dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/11/2007, 11h43
  3. Comment utiliser un composant sans son nom ?
    Par aliwassem dans le forum Langage
    Réponses: 4
    Dernier message: 03/10/2005, 20h47

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