Python 3.x 如何按原样播放音频';通过网络接收到什么?

Python 3.x 如何按原样播放音频';通过网络接收到什么?,python-3.x,sockets,audio,Python 3.x,Sockets,Audio,我正在尝试录制来自客户端的麦克风输入,然后通过网络发送音频数据。服务器接收此音频数据并在接收时播放音频 目前,我有一个程序,客户端记录音频样本3秒钟。音频样本随后被发送到服务器,服务器随后将音频数据转换为.wav文件 服务器: import socket import pyaudio import wave # Socket HOST = socket.gethostname() PORT = 5000 # Audio FORMAT = pyaudio.paInt16 CHANNELS =

我正在尝试录制来自客户端的麦克风输入,然后通过网络发送音频数据。服务器接收此音频数据并在接收时播放音频

目前,我有一个程序,客户端记录音频样本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)
客户端:

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
模块中有一个名为的文档示例,它正是我需要服务器端做的事情。但是,该程序的级别似乎相当低,我无法理解如何传入使用
pyaudio

编辑:解决方案录制的音频数据 看起来魔法来自
stream.write(data)
,其中
data
是通过套接字接收的字节对象。:)