forked from Tecnologias-multimedia/InterCom
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathintercom.py
More file actions
90 lines (70 loc) · 2.41 KB
/
intercom.py
File metadata and controls
90 lines (70 loc) · 2.41 KB
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
# -*- coding: utf-8 -*-
"""Modulo receptor emisor de audio.
Usamos upd para estas dos tareas con dos hilos simultaneos
"""
from pyaudio import paInt16
from pyaudio import PyAudio
import socket
import threading
# import toWavelet
# from struct import *
# import sys
CHUNK = 1024
FORMAT = paInt16
CHANNELS = 1
RATE = 44100
def receiver(port_receiv):
"""Receptor de datos.
Usado como un hilo recibe el puerto por el que se desea escuchar
"""
sock_receiver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('0.0.0.0', int(port_receiv))
sock_receiver.bind(server_address)
p = PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
output=True,
frames_per_buffer=CHUNK)
while True:
data, addr = sock_receiver.recvfrom(2048)
# recibir datos, descomprimirlos y etc. luego reproducir
stream.write(data)
def transmiter(ip_transm, port_transm):
"""Emisor de datos.
Usado como un segundo hilo recibe como parametros la ip del compañero
al que enviar datos y el puerto por el que lo hace
"""
sock_transmiter = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
p = PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
while True:
# grabar sonido comprimirlo y etc y enviarlo.
data = stream.read(1024)
# importante -> print(unpack('<1024h', data))
sock_transmiter.sendto(data, (ip_transm, int(port_transm)))
def main():
"""main
Esta es la parte que realmente se ejecuta para ponerse a escucha
y para empezar a enviar paquetes.
"""
# establecemos puerto de escucha
port_receiv = input("Introduce el puerto para recibir: ")
# iniciamos el hilo reporoductor que lee lo que entra de udp
r = threading.Thread(target=receiver, args=(port_receiv,))
r.daemon = True
r.start()
# solicitamos los datos del "peer"
host_transm = input("Introduce la ip del host: ")
port_transm = input("Introduce el puerto del host: ")
# hilo para enviar udp de lo que se graba
t = threading.Thread(target=transmiter, args=(host_transm, port_transm,))
t.daemon = True
t.start()
input("Introduce algo mas: ")
if __name__ == '__main__':
main()