录制和播放从麦克风录制的音频流
Posted
技术标签:
【中文标题】录制和播放从麦克风录制的音频流【英文标题】:Recording and play audio stream recorded from microphone 【发布时间】:2013-04-10 14:57:01 【问题描述】:我想用 python (pyaudio) 录制声音/对话,然后使用录制的流并使用套接字在另一台计算机上播放它(没有文件,只有 python)
我该怎么做?我应该使用哪些模块?
【问题讨论】:
【参考方案1】:只需通过套接字发送原始帧,而不是写入文件。使用端口音频网页上的播放示例。只需将pyaudio示例中的这段代码替换为录制(http://people.csail.mit.edu/hubert/pyaudio/):
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
通过套接字发送 ((b''.join(frames)), FORMAT, CHANNELS, RATE)。对这些信息进行编码的一种简单方法可能是作为 post 请求,其中参数是 FORMAT、CHANNELS 和 RATE,正文是音频字节串。
import urrllib2
url = '192.168.1.10'
data = urllib.urlencode('FORMAT' : format,
'CHANNELS' : channels,
'RATE' : rate)
response = urllib2.urlopen(url=url, data= b''.join(frames)).read()
assert(response == "Successfully Played")
在这个例子中只需要修改你的ip地址,然后在接收端设置一个简单的web服务器(比如用flask)来处理请求。
然后用户可以在套接字上解码此信息并使用播放示例,方法是创建一个具有正确参数的新流(如播放示例)。
如果您需要实时音频流,请使用格式通道和速率发起单个请求,然后只需打开一个原始 tcp 套接字即可发送原始帧。
【讨论】:
以上是关于录制和播放从麦克风录制的音频流的主要内容,如果未能解决你的问题,请参考以下文章