Class: Musicality::NoteSequence

Inherits:
Object
  • Object
show all
Defined in:
lib/musicality/performance/model/note_sequence.rb

Defined Under Namespace

Classes: Element

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(offset, separation, elements = []) ⇒ NoteSequence

Returns a new instance of NoteSequence.



24
25
26
27
28
# File 'lib/musicality/performance/model/note_sequence.rb', line 24

def initialize offset, separation, elements = []
  @offset = offset
  @separation = separation
  @elements = elements
end

Instance Attribute Details

#elementsObject

Returns the value of attribute elements.



23
24
25
# File 'lib/musicality/performance/model/note_sequence.rb', line 23

def elements
  @elements
end

#offsetObject Also known as: start

Returns the value of attribute offset.



23
24
25
# File 'lib/musicality/performance/model/note_sequence.rb', line 23

def offset
  @offset
end

#separationObject

Returns the value of attribute separation.



23
24
25
# File 'lib/musicality/performance/model/note_sequence.rb', line 23

def separation
  @separation
end

Class Method Details

.adjust_duration(duration, separation) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/musicality/performance/model/note_sequence.rb', line 6

def self.adjust_duration duration, separation
  function = case separation
  when Separation::TENUTO
    DurationFunctions::TENUTO_DURATION
  when Separation::PORTATO
    DurationFunctions::PORTATO_DURATION
  when Separation::STACCATO
    DurationFunctions::STACCATO_DURATION
  when Separation::STACCATISSIMO
    DurationFunctions::STACCATISSIMO_DURATION
  else
    DurationFunctions::NORMAL_DURATION
  end

  function.at(duration)
end

Instance Method Details

#durationObject



47
48
49
# File 'lib/musicality/performance/model/note_sequence.rb', line 47

def duration
  stop - offset
end

#first_pitchObject



55
56
57
# File 'lib/musicality/performance/model/note_sequence.rb', line 55

def first_pitch
  elements.first.pitch
end

#full_durationObject



51
52
53
# File 'lib/musicality/performance/model/note_sequence.rb', line 51

def full_duration
  @elements.map {|el| el.duration }.inject(0,:+)
end

#last_attackObject



63
64
65
# File 'lib/musicality/performance/model/note_sequence.rb', line 63

def last_attack
  elements.last.attack
end

#last_pitchObject



59
60
61
# File 'lib/musicality/performance/model/note_sequence.rb', line 59

def last_pitch
  elements.last.pitch
end

#offsetsObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/musicality/performance/model/note_sequence.rb', line 32

def offsets
  raise "contains no elements" if elements.empty?
  
  off = @offset
  elements.map do |e|
    x = off
    off += e.duration
    x
  end
end

#stopObject



43
44
45
# File 'lib/musicality/performance/model/note_sequence.rb', line 43

def stop
  offsets.last + NoteSequence.adjust_duration(elements.last.duration, separation)
end