class Serinette::Song

Has functions for kicking off initializer chain, rendering final song, and constants necessary for determining song-level characteristcs

Constants

CHANNELS
EFFECT_NUMBER
HIGHEST_DURATION
LOWEST_DURATION
RATE
TRACK_NUMBER

Attributes

duration[RW]
effects[RW]
tracks[RW]

Public Class Methods

default_effects() click to toggle source
# File lib/serinette/song.rb, line 15
def self.default_effects
  { rate: RATE, channels: CHANNELS }
end
new() click to toggle source
# File lib/serinette/song.rb, line 19
def initialize
  init_duration
  init_tracks
  init_effects
end

Public Instance Methods

configure_command(sox) click to toggle source

Taks a sox instance and adds input, sets effects, and sets output

@param sox [Sox::Cmd] Sox command instance

# File lib/serinette/song.rb, line 33
def configure_command(sox)
  render.each do |file|
    sox.add_input(file)
  end
  sox.set_effects(generate_effects_options)
  sox.set_output(Serinette.output_path)
end
render() click to toggle source

Recurses render tree via render

# File lib/serinette/song.rb, line 26
def render
  @tracks.map(&:render)
end

Private Instance Methods

generate_effects_options() click to toggle source

Uses effects instance variable to generate hash of all effects as sox key/pairs

# File lib/serinette/song.rb, line 45
def generate_effects_options
  effects_hash = Song.default_effects

  @effects.each do |effect|
    effects_hash.merge! effect.to_sox_key_pair
  end

  effects_hash
end
init_duration() click to toggle source

Initializes duration

# File lib/serinette/song.rb, line 56
def init_duration
  @duration = (LOWEST_DURATION..HIGHEST_DURATION).to_a.sample
end
init_effects() click to toggle source

Initializes effects

# File lib/serinette/song.rb, line 66
def init_effects
  @effects = Effect.sample_effects_classes(1)
end
init_tracks() click to toggle source

Initializes tracks

# File lib/serinette/song.rb, line 61
def init_tracks
  @tracks = Array.new(TRACK_NUMBER) { Track.new }
end