lib/xi/event.rb in xi-lang-0.1.3 vs lib/xi/event.rb in xi-lang-0.1.4
- old
+ new
@@ -1,15 +1,46 @@
module Xi
+ # An Event is an object that represents a scalar +value+ of some type, and
+ # has a +start+ position or onset, and +duration+ in time.
+ #
+ # Both +start+ and +duration+ are in terms of cycles.
+ #
+ # Usually you don't create events, they are created by a Pattern when
+ # assigned to a Stream, or by some transformation methods on Pattern, so you
+ # don't need to worry about them. Most of the time, you will manually build
+ # Patterns from values and let the Pattern handle when values are applied in
+ # time, based on its default event duration, for example.
+ #
+ # You can instantiate an Event using {.[]}, like this
+ #
+ # Event.new(42, 0, 2) #=> E[42,0,2]
+ # Event[:a, 1, 1/2] #=> E[:a,1,1/2]
+ #
+ # E is an alias of Event, so you can build them using E instead. Note that
+ # the string representation of the object can be used to build the same event
+ # again (almost the same ignoring whitespace between constructor arguments).
+ #
+ # E[:a, 1, 1/4] #=> E[:a,1,1/4]
+ #
class Event
attr_reader :value, :start, :duration
+ # Creates a new Event with +value+, with both +start+ position and
+ # +duration+ in cycles
+ #
+ # @param value [Object]
+ # @param start [Numeric] default: 0
+ # @param duration [Numeric] default: 1
+ # @return [Event]
+ #
def initialize(value, start=0, duration=1)
@value = value
@start = start
@duration = duration
end
+ # @see #initialize
def self.[](*args)
new(*args)
end
def ==(o)
@@ -17,13 +48,23 @@
value == o.value &&
start == o.start &&
duration == o.duration
end
+ # Return the end position in cycles
+ #
+ # @return [Numeric]
+ #
def end
@start + @duration
end
+ # Creates a Pattern that only yields this event
+ #
+ # @param dur [Numeric, #each] event duration
+ # @param metadata [Hash]
+ # @return [Pattern]
+ #
def p(dur=nil, **metadata)
[self].p(dur, metadata)
end
def inspect