Transferencia de sonido UDP: el sonido reproducido tiene un gran ruido

No tengo idea de cómo resolver este problema. Por favor, ayúdame 🙂

Me gustaría enviar datos de sonido, grabados por una PC, a la otra PC y reproducirlos. (por UDP)

El progtwig podría funcionar correctamente, pero el sonido contiene (?) Ruido incómodo. cuando intenté grabar y reproducir sonido en una secuencia de progtwig, funcionó correctamente. No había ruido. En caso de usar UDP incluso en una PC, use IP 127.0.0.1, apareció el ruido. Al principio, pensé que el factor se debe a que el sonido reproducido está fuera en la otra PC y lo arreglé haciendo un búfer. Se solucionó poco ruido, pero casi todo el ruido aún permanece.

el siguiente código es

Cliente

import pyaudio import socket from threading import Thread frames = [] def udpStream(): udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: if len(frames) > 0: udp.sendto(frames.pop(0), ("127.0.0.1", 12345)) udp.close() def record(stream, CHUNK): while True: frames.append(stream.read(CHUNK)) if __name__ == "__main__": CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 p = pyaudio.PyAudio() stream = p.open(format = FORMAT, channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = CHUNK, ) Tr = Thread(target = record, args = (stream, CHUNK,)) Ts = Thread(target = udpStream) Tr.setDaemon(True) Ts.setDaemon(True) Tr.start() Ts.start() Tr.join() Ts.join() 

Servidor

 import pyaudio import socket from threading import Thread frames = [] def udpStream(CHUNK): udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp.bind(("127.0.0.1", 12345)) while True: soundData, addr = udp.recvfrom(CHUNK) frames.append(soundData) udp.close() def play(stream, CHUNK): BUFFER = 10 while True: if len(frames) == BUFFER: while True: stream.write(frames.pop(0), CHUNK) if __name__ == "__main__": FORMAT = pyaudio.paInt16 CHUNK = 1024 CHANNELS = 2 RATE = 44100 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels = CHANNELS, rate = RATE, output = True, frames_per_buffer = CHUNK, ) Ts = Thread(target = udpStream, args=(CHUNK,)) Tp = Thread(target = play, args=(stream, CHUNK,)) Ts.setDaemon(True) Tp.setDaemon(True) Ts.start() Tp.start() Ts.join() Tp.join() 

Lo siento por el código fuente largo. Siéntete libre de jugar este progtwig.

He buscado la razón de este ruido. Finalmente pude detectar por qué sucedió esto.

En realidad, este progtwig de transferencia UDP no causó la pérdida de paquetes.

Incluso si lo hiciera, el sonido no tiene un ruido tan grave.

Este progtwig envió los datos correctamente y casi no hay pérdida de paquetes, pero el método “recibir” no pudo recibir los datos correctamente.

En el servidor del progtwig

 def udpStream(CHUNK): udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp.bind(("127.0.0.1", 12345)) while True: soundData, addr = udp.recvfrom(CHUNK) frames.append(soundData) udp.close() 

Este progtwig solo pudo datos del “25%”. (Revisé la cantidad de datos)

Entonces, traté de recibir los datos multiplicados (CANALES * 2)

  soundData, addr = udp.recvfrom(CHUNK * CHANNELS * 2) 

Esto da como resultado que los datos de sonido se pueden recibir al 100% por completo.

Finalmente, el sonido grabado por una PC se reproduce en la otra PC sin ruido.