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