Module: Ramekin::Util

Extended by:
Util
Includes:
Error::Helpers
Included in:
AMKRunner, AMKSetup::Setup, CLI, SPCPlayer::SPCPlayer, Util
Defined in:
lib/ramekin/util.rb

Constant Summary collapse

KNOWN_LENGTHS =
{}.tap do |out|
  ticks = 192
  length = 1

  loop do
    out[ticks] = length.to_s

    break unless ticks % 2 == 0

    out[ticks * 3 / 2] = "#{length}."
    length *= 2
    ticks /= 2
  end
end

Instance Method Summary collapse

Instance Method Details

#adsr_value(adsr) ⇒ Object



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

def adsr_value(adsr)
  case adsr.value
  when 'flat'
    [0, 7, 7, 31]
  else
    vals = adsr.value.split(',').map { |x| x.to_i(16) }
    error! 'invalid #adsr, expected 4 arguments', el: adsr unless vals.size == 4

    a, d, s, r = vals
    error! 'invalid attack (must be 0-F)', el: adsr unless (0..15).include?(a)
    error! 'invalid decay (must be 0-7)', el: adsr unless (0..7).include?(d)
    error! 'invalid sustain (must be 0-7)', el: adsr unless (0..7).include?(s)
    error! 'invalid release (must be 0-1F)', el: adsr unless (0..31).include?(r)
    [a, d, s, r]
  end
end

#extra_nice_length_amk(ticks) ⇒ Object



40
41
42
43
44
# File 'lib/ramekin/util.rb', line 40

def extra_nice_length_amk(ticks)
  # output uses l16
  return '' if ticks == 12
  nice_length_amk(ticks)
end

#nice_length_amk(ticks) ⇒ Object



46
47
48
# File 'lib/ramekin/util.rb', line 46

def nice_length_amk(ticks)
  KNOWN_LENGTHS.fetch(ticks) { "=#{ticks}" }
end