我想知道如何使用jack audio api使我的应用程序与时基主应用程序保持同步。你知道吗
假设有Hydrogen drum machine在主模式下运行,我想在播放的每1/4个音符上打印一条消息。你知道吗
这就是我要做的(使用python):
#!/usr/bin/env python3
import time
import jack
client = jack.Client('klicker')
def print_msg (last_tick):
state, pos = client.transport_query()
if state == jack.ROLLING:
if pos['tick'] < last_tick:
print ("klick")
return pos['tick']
with client:
last_tick = 0
while True:
last_tick = print_msg (last_tick)
time.sleep(0.00002)
所以我用很少的睡眠时间运行一个循环,如果当前的节拍已经结束,那么检查每个迭代。你知道吗
这对我来说似乎有点肮脏和不精确。那么解决这个问题的正确方法是什么呢?你知道吗
最后,我找到了一个更精确的解决方案:
首先,我们希望使用进程回调,而不是无限循环。你知道吗
每次调用此回调时,都会处理
f
个帧。采样率告诉我们将在1秒内处理多少帧。把这个乘以60,再除以beats per minute
的数目,我们就得到了在一拍中处理的帧数。 你知道吗相关问题 更多 >
编程相关推荐