Class: Topaz::TempoCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/topaz/tempo_calculator.rb

Overview

Calculate tempo given timestamps

Constant Summary collapse

THRESHOLD =

Optimal number of ticks to analyze

6

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTempoCalculator

Returns a new instance of TempoCalculator.



10
11
12
13
# File 'lib/topaz/tempo_calculator.rb', line 10

def initialize
  @tempo = nil
  @timestamps = []
end

Instance Attribute Details

#tempoObject (readonly)

Returns the value of attribute tempo.



8
9
10
# File 'lib/topaz/tempo_calculator.rb', line 8

def tempo
  @tempo
end

#timestampsObject (readonly)

Returns the value of attribute timestamps.



8
9
10
# File 'lib/topaz/tempo_calculator.rb', line 8

def timestamps
  @timestamps
end

Instance Method Details

#calculateFloat?

Analyze the tempo based on the threshold

Returns:

  • (Float, nil)

    The tempo as a float, or nil if there’s not enough data to calculate it



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/topaz/tempo_calculator.rb', line 17

def calculate
  tempo = nil
  if @timestamps.count >= 2
    limit_timestamps
    deltas = get_deltas
    sum = deltas.inject(&:+)
    average = sum.to_f / deltas.count
    bpm = ppq24_millis_to_bpm(average)
    @tempo = bpm
  end
end