问题描述
我在 macOS Mojave 上尝试输入特定时刻。在我正在开发的应用程序中,我需要在回调函数和 Python 模块中的其他函数中触发特定操作/函数后存储时间。我的目标是在同一时间轴上创建三个不同的图。
我理解:时间(在回调参数列表中)值是单调递增的,并且具有未指定的原点,即来自回调参数的 time.currentTime。我也读过:
PortAudio 流回调以非常高或实时的优先级运行。它需要始终如一地满足其时间期限。不要分配内存、访问文件系统、调用库函数或从流回调调用其他函数,这些函数可能会阻塞或需要不可预测的时间才能完成。除了 cpu_load 之外,不允许从流回调中调用 PortAudio API 函数。
import sounddevice as sd
import time
duration = 5.5 # seconds
times = list()
def callback(indata,outdata,frames,time,status):
global times
if status:
print(status)
times.append(time.time())
outdata[:] = indata
with sd.Stream(channels=2,callback=callback):
sd.sleep(int(duration * 1000))
然而,这会产生以下错误:
输入溢出
来自 cffi 回调
因此,出于开发目的,你们对蒸汽的计时和其他动作的建议是什么,因为音频蒸汽输入是从麦克风中处理的?
任何帮助将不胜感激。
解决方法
您的回调函数存在问题。由于 sounddevice 回调函数有一个参数“time”,它与模块“time”冲突。我建议您将导入时间名称更改为其他名称作为快速修复:
import sounddevice as sd
import time as tm
duration = 5.5 # seconds
times = list()
def callback(indata,outdata,frames,time,status):
global times
if status:
print(status)
times.append(tm.time())
outdata[:] = indata
with sd.Stream(channels=2,callback=callback):
sd.sleep(int(duration * 1000))