Python 尝试从麦克风录制并实时播放
我试着从我的麦克风中记录数据,然后通过扬声器实时播放,有一些延迟,但我遇到了一些问题。我选择使用python和alsaaudio,可以找到我当前遇到问题的脚本。这适用于我目前所拥有的(不是延迟部分),但会产生一些点击。alsaaudio文档必须说明: PCM音频播放出现问题的最常见原因是写入PCM设备必须与设备的数据速率完全匹配 如果写入设备的数据太少,设备将运行不足,并会发出难听的咔哒声。相反,如果写入设备的数据太多,写入功能将阻塞(PCM_正常模式)或返回零(PCM_非阻塞模式) 我似乎误解了文件,上面写的是关于write() PCM.写入(数据) 在数据中写入(播放)声音。数据的长度必须是帧大小的倍数,并且应该正好是一个周期的大小 我剧本中的句号是160 上面说的是read(): 在PCM_正常模式下,此函数将阻塞,直到有一个完整的时段可用,然后返回一个元组(长度,数据),其中长度是捕获数据的帧数,数据是作为字符串捕获的声音帧。返回数据的长度将为periodsize*framesize字节 在我的脚本中,period_size*frame_size也应该等于160,但是当我打印长度(tuple read()返回的部分)时,我得到了940。显然,我似乎没有将正确数量的数据传递给out.write(),但我不确定该去哪里。我主要是通过我找到的示例将这些代码组合在一起,我刚刚开始使用alsaaudio/sound,试图组合一些有趣的项目,所以我还不知道很多 我还想通过麦克风录制实况,然后以100毫秒的延迟播放,这就是评论的time.sleep()。如果我取消注释它,长度似乎会从940反复变为-32,最终导致out.write()抛出异常(数据不足) 有人能告诉我如何(或者我的脚本有什么问题)实时录制和播放声音数据,并且延迟100毫秒吗?你不能使用睡眠(0.1)将输出延迟100毫秒。您需要创建一个保存100ms音频数据的缓冲区:Python 尝试从麦克风录制并实时播放,python,audio-streaming,audio-recording,playback,alsa,Python,Audio Streaming,Audio Recording,Playback,Alsa,我试着从我的麦克风中记录数据,然后通过扬声器实时播放,有一些延迟,但我遇到了一些问题。我选择使用python和alsaaudio,可以找到我当前遇到问题的脚本。这适用于我目前所拥有的(不是延迟部分),但会产生一些点击。alsaaudio文档必须说明: PCM音频播放出现问题的最常见原因是写入PCM设备必须与设备的数据速率完全匹配 如果写入设备的数据太少,设备将运行不足,并会发出难听的咔哒声。相反,如果写入设备的数据太多,写入功能将阻塞(PCM_正常模式)或返回零(PCM_非阻塞模式) 我似乎误解
buf = []
while True:
l, data = inp.read()
buf.append(data)
if len(buffer)>=10:
out.write(buf[0])
del buf[0]
将10更改为会导致100毫秒延迟的某个数字。您也尝试过吗?试试“曼阿尔萨洛普”。您也可以通过该命令选择延迟。我明白了,谢谢。我已经这样做了,它肯定会有延迟(仍然是点击),但我不确定如何确定哪个数字会导致正确的延迟。我试着打印经过的时间和摆弄数字,但似乎没有改变。也就是说,似乎更多的是关于回声,哈哈。麦克风离扬声器很近。