【问题标题】:Pyaudio Recording audio from streaming PythonPyaudio 从流式 Python 录制音频
【发布时间】: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


【解决方案1】:

您得到一个TypeError,因为打开的wav 文件需要一个字节流,而您正在传递一个int 值。我认为您想将整个帧写入文件,而不仅仅是 data1 中的块。试试wf.writeframes(b''.join(frames))。也不要忘记在最后关闭流。

stream.stop_stream() stream.close()

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2011-05-20
    • 2015-04-09
    相关资源
    最近更新 更多