# -*-coding:Latin-1 -* """fonction client du chat vocal""" import socket import wave import audioop import time #modules complémentaires import pyaudio connecte = False port = 6660 #host=raw_input("Ip: ") host="localhost" #demarrage de pyaudio et parametrage p = pyaudio.PyAudio() frequence = 22050 frames = 512 #attention! en 16bits(?), le nombre de bits envoyees vaut le double du #nombre de frames utilisé pour récupérer les donnees sonores #amalgame des donnees sonores recues (pour enregistrement sur wav) framesR=[] #creation du socket udp s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #creation des flux audio emission = p.open(format=pyaudio.paInt16, channels=1, rate=frequence, input = True, frames_per_buffer=frames) reception = p.open(format=p.get_format_from_width(2), channels=1, rate=frequence, output=True, frames_per_buffer=frames) #t_debut = time.time() #pour test while True: #on attend la connexion au serveur try: s.sendto(b"", (host, port)) print(s.recvfrom(frames)) connecte = True break except: pass while connecte: #while time.time() - t_debut < 10: #pour test #print(time.time() - t_debut) try: #on recupere le flux audio for i in range(0, int(frequence/frames*0.5)): #on recupere la donnee du flux d'emission data = emission.read(frames) #on envoie au serveur s.sendto(data, (host, port)) #print("{}\n".format(len(data))) #on receptionne la reponse recu, adresse = s.recvfrom(1024) #on la transmet au flux audio de reception reception.write(recu) #pour enregistrer la reception (deboguage): framesR.append(recu) except OSError: #on attend la connexion au serveur connecte = False if raw_input("Connexion au serveur perdue - Tenter de reconnecter? (o/n)") == "o": while not connecte: #on attend la connexion au serveur try: s.sendto(b"", (host, port)) print(s.recvfrom(frames)) connecte = True except: pass except KeyboardInterrupt: connecte = False #on enregistre dans 'reception.wav' try: #on enregistre les donnees recues dans un fichier .wav wf = wave.open("reception.wav", 'wb') wf.setnchannels(1) wf.setsampwidth(p.get_sample_size(pyaudio.paInt16)) wf.setframerate(frequence) wf.writeframes(b''.join(framesR)) wf.close() except: print("reception: enregistrement impossible") print("*Fin de la communication\n") emission.close() reception.close() p.terminate() s.close()