录制和播放从麦克风录制的音频流

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 套接字即可发送原始帧。

【讨论】:

以上是关于录制和播放从麦克风录制的音频流的主要内容,如果未能解决你的问题,请参考以下文章

如何录制网络/浏览器音频输出(不是麦克风音频)

尝试从麦克风录制并实时播放

在 iOS 中通过蓝牙播放时从内置麦克风录制

同时录制音频和播放 iPod?

无法在 Qt 中将音频从麦克风录制到 QFile

在 iPhone 上录制播放和麦克风