| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- # -*-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()
|