Kivy : gestion de la fin d’une lecture audio

Introduction

Kivy ne propose pas d’interface élaborée pour surveiller le bon déroulement du fichier audio qui est en cours de lecture (durée, temps passé). Mais je vous propose de voir en détail ce qui est exploitable en utilisant le « player » associé à l’objet « son joué ».

 

Structure des données

Pour écouter un fichier MP3 (WAV ou OGG), il faut réaliser ceci :

filename = "youi.mp3"
self.currentSound = SoundLoader.load(filename)
self.currentSound.play()

L’objet « SoundLoader » ne propose pas beaucoup d’interaction. Il est possible de le lire (méthode play), de le forcer à s’arrêter (méthode stop) et de savoir s’il est arrêté ou s’il en lecture.

La méthode « on_stop » est appelée à la fin du son.

 

Description

Le fichier audio doit être joué par le scheduler et non directement :

filename = "youi.mp3"
self.currentSound = SoundLoader.load(filename)
Clock.schedule_once(self.play_current_sound, 0)

De plus, d’autres méthodes sont définies.

1. Méthode pour lancer la lecture du fichier audio :

    def play_current_sound(self, arg):
        self.currentSound.play()
        self.currentSound.bind(on_stop = self.stop_sound)

Attention à respecter cet ordre sinon à la fin du son, la méthode « on_stop » n’est pas appelée.

 

2. Méthode qui arrête la lecture du fichier audio (forcée par un bouton) ou qui est appelée en fin de lecture :

    def stop_sound(self,  arg = None):
        self.currentSound.unbind(on_stop = self.stop_sound)
        if self.currentSound is not None:
            self.currentSound.stop()

 

Conclusion

Avec ce principe, la méthode « stop_sound » est appelée lorsque le fichier est terminé ou lorsque l’utilisateur a volontairement arrêté la lecture. Il est possible de présenter un bouton [Stop] uniquement lorsqu’il y a un son qui est joué.

Cette fonctionnalité de lecture d’un son est implémentée de manière différente en le PC (sous Linux) et un SmartPhone Android. Il faudra faire les ajustements au dernier moment ou implémenter une interface…

 

2 réflexions au sujet de « Kivy : gestion de la fin d’une lecture audio »

  1. Bonjour,
    Je vois que vous programmez beaucoup avec kivy, notamment avec du son.
    Je viens de me lancer moi, et j’ai fait un simple slider qui contrôle le son d’un fichier audio joué. Cela fonctionne mais pas lorsque je déporte mon application sur Android.
    Auriez-vous une idée sur ce qu’il faut faire pour contrôler le volume du son sur android?

    Merci par avance, votre blog est super !

    • Bonjour,
      En effet, si on passe par le PC, c’est un le module pygame (de mémoire) qui joue le son. Sur Android, pygame n’est pas utilisé.
      Ces 2 lignes de code devraient marcher sur toutes les plates-formes :

      self.audio = SoundLoader.load(« sounds/pouet.mp3″)
      self.audio.play()

      Par contre, les contrôles (méthodes et variables) qui sont proposés par l’interpréteur du son (pour avoir accès à l’état de la lecture, changer le volume, etc.) sont différents entre pygame et celui du mobile.
      Je te conseille fortement de faire un « print(self.audio) » dans ton code et de regarder la log (avec la commande suivante dans ton terminal : adb logcat -s « python »). Tu trouveras le nom de la classe et avec une recherche google, tu auras peut-être les moyens de changer le volume son du fichier audio joué.

      Bonne continuation.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>