Я пытаюсь записать микрофонный вход от клиента, а затем отправить аудиоданные по сети.Сервер получает эти аудиоданные и воспроизводит их по мере их поступления.
В настоящее время у меня есть программа, в которой клиент записывает аудиосэмпл в течение 3 секунд.Затем аудиосэмпл отправляется на сервер, который затем преобразует аудиоданные в файл .wav.
Сервер:
import socket
import pyaudio
import wave
# Socket
HOST = socket.gethostname()
PORT = 5000
# Audio
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
frames = []
with socket.socket() as server_socket:
server_socket.bind((HOST, PORT))
server_socket.listen(1)
conn, address = server_socket.accept()
print("Connection from " + address[0] + ":" + str(address[1]))
while True:
try:
data = conn.recv(2048)
frames.append(data)
except socket.error as error_message:
break
print(frames)
with wave.open(WAVE_OUTPUT_FILENAME, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
Клиент:
import socket
import pyaudio
# Socket
HOST = socket.gethostname()
PORT = 5000
# Audio
CHUNK = 1024 * 4
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 3
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("Recording")
with socket.socket() as client_socket:
client_socket.connect((HOST, PORT))
while True:
data = stream.read(CHUNK)
client_socket.send(data)
Модуль sounddevice
имеет пример документации под названием wire.py , который делает именно то, что мне нужно на стороне сервера.Тем не менее, программа, кажется, довольно низкого уровня, и я не могу понять, как передать аудиоданные, записанные с pyaudio
.