Increment a tick and return value
tick key (symbol)
Increment the default tick by 1 and return value. Successive calls to tick
will continue to increment the default tick. If a key
is specified, increment that specific tick. If an increment value
is specified, increment key by that value rather than 1. Ticks are in_thread
and live_loop
local, so incrementing a tick only affects the current thread’s version of that tick. See tick_reset
and tick_set
for directly manipulating the tick vals.
Introduced in v2.6
Examples
# Example 1 |
puts tick
puts tick
puts tick
puts tick
|
#=> 0
#=> 1
#=> 2
#=> 3
|
# Example 2 |
puts tick(:foo)
puts tick(:foo)
puts tick(:foo)
puts tick(:bar)
|
#=> 0 # named ticks have their own counts
#=> 1
#=> 2
#=> 0 # tick :bar is independent of tick :foo
|
# Example 3 |
puts tick
puts tick
puts tick
puts tick(step: 2)
puts tick(step: 2)
puts tick(step: 10)
puts tick
|
# You can tick by more than increments of 1
# using the step: opt
#=> 0
#=> 1
#=> 2
#=> 4
#=> 6
#=> 16
#=> 17
|
# Example 4 |
live_loop :fast_tick do
puts tick
sleep 2
end
live_loop :slow_tick do
puts tick
sleep 4
end
|
# Each_live loop has its own separate ticks
# the fast_tick live_loop's tick will
# be updated every 2 seconds
# the slow_tick live_loop's tick is
# totally independent from the fast_tick
# live loop and will be updated every 4
# seconds
|
# Example 5 |
live_loop :regular_tick do
puts tick
sleep 1
end
live_loop :random_reset_tick do
if one_in 3
tick_reset
puts "reset tick!"
end
puts tick
sleep 1
end
|
# the regular_tick live_loop's tick will
# be updated every second
# randomly reset tick
# this live_loop's tick is totally
# independent and the reset only affects
# this tick.
|
# Example 6 |
live_loop :scale do
play [:c, :d, :e, :f, :g].tick
sleep 1
end
|
# Ticks work directly on lists, and will tick through each element
# However, once they get to the end, they'll return nil
# play all notes just once, then rests
|
# Example 7 |
live_loop :odd_scale do
tick
play [:c, :d, :e, :f, :g, :a].tick
sleep 1
end
|
# Normal ticks interact directly with list ticks
# Increment the default tick
# this now play every *other* note just once,
# then rests
|
# Example 8 |
live_loop :looped_scale do
play (ring :c, :d, :e, :f, :g).tick
sleep 1
end
|
# Ticks work wonderfully with rings
# as the ring ensures the tick wraps
# round internally always returning a
# value
# play all notes just once, then repeats
|
# Example 9 |
live_loop :looped_scale do
play (scale :e3, :minor_pentatonic).tick
sleep 0.25
end
|
# Ticks work wonderfully with scales
# which are also rings
# play all notes just once, then repeats
|