python sounddevice - 如何播放我同时录制的一段音频?

问题描述

首先声明我对此非常陌生,以前从未使用过任何音频库,也从未在此处发布过。

我想做的基本上是在录制当前音频的同时播放过去的音频。我试过 sounddevice.playrec(),但这不是我想要的。我希望能够“跟踪”或“滚动”过去的音频,并在仍然录制当前音频的同时播放更新或更旧的剪辑。 playrec 不会让我在它仍在录制时更改我正在播放的内容

我想我可以尝试使用 sounddevice.stream(),并且一直在研究输入/输出传递的 this example。我希望我可以在我的回调函数中做一些类似的事情,我基本上将输入数据保存在某个地方(这将是我可以跟踪的过去的音频),并用过去的音频填充输出缓冲区。

为此,我一直在尝试使用这个回调函数

def callback(indata,outdata,frames,time,status):
    if status:
        print(status)
    if len(buf) == 0:      #buf is just a list of indata arrays - idk if that's what I should be using
        outdata.fill(0)
        buf.append(indata)
    else :
        # get_trackbar_value gets me an index between 0 and len(buf),# and also tells me if this has changed since the last time I called the function. 
        trackbar_val,change,_ = get_trackbar_value() 
        print(trackbar_val)
        print(change)
        if not change:  
            trackbar_val+=1
        if trackbar_val >= len(buf):  #if the trackbar is at the very max I just want silence                
            outdata.fill(0)
        else:
            outdata[:] = buf[trackbar_val] 
        buf.append(indata)

但这并没有真正起作用。如果我说它有点像回声,但我无法回溯并让它重播我说过的话。有时,当您运行示例中的输入/输出直通代码时,它会产生非常大的噪音。我觉得我误解了 indata 缓冲区实际包含的内容,但我真的找不到很多示例或教程或任何东西来帮助我了解如何处理这些数据。任何指针将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...