2017-05-13 89 views
0

​​如何在數組迭代中等待?

我正在學習supercollider。我找到了SimpleNumber.wait函數,但很快我就知道它不能在「正常」函數內工作,只能在稱爲例程的一些「不同」類函數中使用。

我故意停在那裏問這個問題:在someArray.do構造的每次迭代中,是否有一種簡單的方法可以暫停給定的時間量?通過「簡單的方式」,我的意思是不需要學習十幾個新概念並進行範式轉換。

注意哦:我知道我會最終需要了解例程,任務和supercollider其他測序機制,但整個巨大的書,現在我只想玩「瑪麗有隻一隻小羊羔「,並稱它爲noob的一天,而不必學習全部之前我可以讓任何東西都在發生。

這可能嗎?

回答

4

例程需要使用.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();