【发布时间】:2015-12-05 11:20:12
【问题描述】:
我想在 python 中使用 pyaudio 录制,音频通过套接字流式传输并将其保存在 *.wav 文件中。 我想在 wave after 中保存所有内容,以便我可以随意处理它。目前我已经尝试编写此代码,但编译一段时间后它总是失败。
错误是
wf.writeframes(b''.join(data1))
TypeError: sequence item 0: expected bytes, int found
我的 client.py 代码是:
import pyaudio, sys, socket, wave
port = 5000
ip = "192.168.1.110"
chunk = 512
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 49000
WAVE_OUTPUT="output.wav"
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT, channels = CHANNELS, rate = RATE, input =True,output = True, frames_per_buffer = chunk)
#Create a socket connection for connecting to the server:
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ip, port))
print ("***Registrazione in corso***")
frames=[]
for i in range (0,int(RATE/chunk*20)):
data1=client_socket.recv(chunk)
frames.append(data1)
while True:
#Recieve data from the server:
#data = client_socket.recv(1024)
stream.write(data1,chunk)
wf=wave.open(WAVE_OUTPUT,"wb")
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(data1))
#print data
wf.close()
socket.close()
【问题讨论】:
-
您得到一个
TypeError,因为打开的wav文件需要一个字节流,而您正在传递一个int值。我认为您想将整个帧写入文件,而不仅仅是data1中的块。试试wf.writeframes(b''.join(frames))。您还需要检查/修复上面代码示例的缩进。 -
太棒了!现在我注册了所有 wav 音频:D 另一个请求...在我什至可以听到扬声器发出的声音之前,扬声器现在静音但记录了波形文件...发生了什么变化?
-
太棒了!现在,我不确定扬声器,但我会首先检查您是否真的需要
stream.write(data1,chunk),您不是从流中读取并写入文件吗?最后,不要忘记关闭流。stream.stop_stream() stream.close()
标签: python sockets streaming registration pyaudio