python - ruidos - eliminar ruido de un audio online
Transferencia de sonido UDP: sonido reproducido tiene mucho ruido (1)
He buscado la razón de este ruido. Finalmente pude detectar por qué sucedió esto.
En realidad, esta transferencia UDP del programa no causó la pérdida de paquetes.
Incluso si lo hizo, el sonido no tiene un ruido tan serio.
Este programa envió datos correctamente y casi no hay pérdida de paquetes, pero el método "recibir" no pudo recibir los datos correctamente.
En el programa de servidor
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 programa podría solo datos "25%". (Comprobé la cantidad de datos)
Entonces, traté de recibir los datos multiplicados (CHANNELS * 2)
soundData, addr = udp.recvfrom(CHUNK * CHANNELS * 2)
Esto da como resultado que los datos de sonido se puedan recibir 100% por completo.
Finalmente, el sonido grabado por una PC se reproduce en la otra PC sin 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 programa puede funcionar correctamente, pero el sonido contiene (?) Ruido incómodo. cuando intenté grabar y reproducir sonido en una secuencia de programa, funcionó correctamente. No hubo 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 es porque el sonido reproducido está en la otra PC y lo solucioné haciendo buffer. Resolvió 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 largo código fuente. Siéntase libre de jugar este programa.