# -*-coding:Latin-1 -* """lecture d'un flux audio mp3""" from time import sleep from threading import Thread #modules complémentaires import pymedia.audio.sound as sound import pymedia.audio.acodec as acodec class Lecture(Thread): """instance de lecture audio d'un flux mp3""" def __init__(self, identifiant, cparams, debug): """création du fil de lecture""" self.Terminated = False Thread.__init__(self) self.debug = debug self.dec = acodec.Decoder(cparams) self.sortie = sound.Output( cparams["sample_rate"], 1, sound.AFMT_S16_LE, 0 ) if self.debug: self.recept = open( "{}.mp3".format(identifiant), 'wb' ) def lire(self, recu): """reception des donnees a lire""" retour = "" if recu: son_decode = self.dec.decode(recu) if self.debug: self.recept.write(recu) if son_decode: self.sortie.play(son_decode.data) def run(self): """boucle vide""" while not self.Terminated: sleep(0.1) def stop(self): """Fermeture du fil de lecture""" print("Fin de la lecture\n") self.Terminated = True if self.debug: self.recept.close() if __name__ == "__main__": # si lancement direct: micro = sound.Input( 22050, 1, sound.AFMT_S16_LE, 0 ) micro.start() cparams= { 'id': acodec.getCodecID( 'mp3' ), 'bitrate': 32000, 'sample_rate': 22050, 'channels': 1 } ac = acodec.Encoder( cparams ) le = Lecture("test_lecture", cparams, False) le.start() i = 0 while True: try: i += 1 son = micro.getData() if son and len(son): son_encode = ac.encode(son) print("".format(i)) for fr in son_encode: print(le.lire(fr)) except KeyboardInterrupt: break micro.stop() le.stop()