如何在数组迭代中等待?

时间:2017-05-13 02:42:34

标签: supercollider

[1,2,3].do { /* how to wait 1s here? */ }

我正在学习supercollider。我找到了SimpleNumber.wait函数,但我很快就知道它在“普通”函数中不起作用,只在一些称为例程的“不同”函数中。

我故意停在那里问这个问题:在someArray.do构造的每次迭代中,是否有一种简单的方法可以暂停一段时间?通过“简单的方式”,我的意思是不需要学习十几个新概念并经历范式转换。

请注意:我知道我将最终需要学习关于超级滑翔机中的例程,任务和其他排序机制的整本大书,但现在我只想玩“玛丽有一只小羊羔”并称之为noob's day,而不必学习所有之前我才能做到任何事情都会发生。

这可能吗?

1 个答案:

答案 0 :(得分:5)

使用.wait / .yield功能需要例程。当你打电话时3.wait,你在某个地方告诉时钟等待3秒钟,然后从你离开的地方继续。为了做到这一点,你需要与一个时钟进行通信,你需要一些可以停止和启动的东西(例程执行一些功能)。

完整的语法,用于您尝试执行的操作: Routine({ [1, 2, 3].do { |n| n.postln; n.wait; } }).play(AppClock); 上面创建了一个带有功能的例程(你的1,2,3循环),然后在时钟上播放它(AppClock,标准时钟)。

但是,函数的.fork方法是执行上述操作的简写(即创建例程并播放它):

{ [1, 2, 3].do { |n| n.postln; n.wait; } }.fork();