class PicoTune::Tune
Attributes
name[R]
phrases[R]
sequence[R]
Public Class Methods
new(name, sequence, phrases)
click to toggle source
# File lib/picotune.rb, line 148 def initialize name, sequence, phrases @name = name @sequence = sequence @phrases = phrases @phrases.each do |p| p.tune = self end end
Public Instance Methods
buffer()
click to toggle source
# File lib/picotune.rb, line 170 def buffer @buffer ||= begin tune_buffer_length = @sequence.reduce(0) do |acc, phrase_name| acc + @phrases.find { |p| p.name == phrase_name }.buffer_size end offset = 0 samples = Array.new(tune_buffer_length) { PicoTune::Sample.new } @sequence.each do |phrase_name| phrase = @phrases.find { |p| p.name == phrase_name } phrase.buffer.each_with_index do |phrase_sample, index| tune_sample = samples[offset + index] || PicoTune::Sample.new tune_sample.add phrase_sample samples[offset + index] = tune_sample end offset += phrase.buffer_size end samples end end
volume_factor_for_simultaneous_melodies()
click to toggle source
# File lib/picotune.rb, line 158 def volume_factor_for_simultaneous_melodies max_melodies_in_phrases = 0 @phrases.each do |phrase| if phrase.simultaneous_melodies > max_melodies_in_phrases max_melodies_in_phrases = phrase.simultaneous_melodies end end 1.0 / max_melodies_in_phrases if max_melodies_in_phrases > 0 end
wav()
click to toggle source
# File lib/picotune.rb, line 195 def wav @wav ||= begin wav_format = WaveFile::Format.new :stereo, :float, PicoTune::SAMPLE_RATE wav_buffer = WaveFile::Buffer.new buffer.map(&:to_a), wav_format name = "#{@name}.wav" WaveFile::Writer.new(name, WaveFile::Format.new(:stereo, :pcm_8, PicoTune::SAMPLE_RATE)) do |writer| writer.write(wav_buffer) end name end end