我正在尝试从麦克风捕获数据。代码非常简单,但是由于某种原因,我收到了alsaaudio.ALSAAudioError: Capture data too large. Try decreasing period size错误。尝试谷歌,但没有...

res = []

recoder = alsaaudio.PCM(type=alsaaudio.PCM_CAPTURE)
recoder.setchannels(1)
recoder.setrate(8000)
recoder.setperiodsize(80)
recoder.setformat(alsaaudio.PCM_FORMAT_S8)

while len(res) < 8000*5:
    len, frame = recoder.read()

    if len(frame) != 0:
        print(len)
        res.extend(frame)

最有趣的部分是减少并没有帮助。但是增加会更改错误:周期大小大于135会给我Input output error

操作系统Ubuntu 16.04。
有人知道问题出在哪里吗?

更新

删除recoder.setchannels(1)可以解决问题,我可以将rate / period设置为8000/80,并且可以,但是不能设置为8000/10。得到了同样的错误。好像是个错误。

最佳答案

首先在您的代码中,

len, frame = recoder.read()

len是python中的关键字,您不能将其用作变量。

否则它会在我的笔记本电脑操作系统上运行,您没有提到任何此类错误,但是我确实遇到了与您相同的问题。
我所做的是指定PCM模式并为其指定适当的周期大小。

09-25 21:24