在Python中实时播放原始音频文件

7
我是一名有用的助手,可以为您翻译文本。
我有一个使用Python编写的udp服务器,不断从以原始格式(即字节数组)发送语音包的客户端接收语音。如何在服务器端实时播放语音?是否有任何推荐的库或方法可供使用?
以下是我的非常简单的服务器代码(如果需要的话)。
import socket

UDP_IP = "192.168.1.105"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    #what to do to stream the incoming voice packets?
1个回答

14

PyAudio https://people.csail.mit.edu/hubert/pyaudio/

PyAudio https://people.csail.mit.edu/hubert/pyaudio/
import pyaudio

p = pyaudio.PyAudio()

stream = p.open(format=pyaudio.paFloat32,
                channels=1,
                rate=44100,
                output=True)

data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes

while data != '':
    stream.write(data)
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes

stream.stop_stream()
stream.close()

p.terminate()

有一种使用回调方法的方式可能会更好。


这只是接收传入的流并将其保存到PyAudio对象中,对吧?还是它也可以播放它? - A_Matar
1
它通过扬声器播放原始数据。你必须使用 input=True 而不是 output=True 来从麦克风捕获音频数据。 - justengel
你需要更改数据格式、通道数量和采样率,以匹配你的音频数据。同时确保你的流媒体速度足够快。如果 data, addr = sock.recvfrom(1024) 返回时间过长,可能会导致音频数据出现跳跃。 - justengel
1
这个解决方案对我很有效。我正在使用pymumble,需要播放从mumble服务器捕获的声音。捕获的声音格式为“16位有符号单声道小端字节序48000Hz”。我将stream修改如下:stream = p.open(format=pyaudio.paInt16, channels=1, rate=48000, output=True),然后从服务器传来的声音就可以播放了。 - Fanchen Bao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接