Class: RoadToRubykaigi::Audio::SequencerBase
- Inherits:
-
Object
- Object
- RoadToRubykaigi::Audio::SequencerBase
show all
- Defined in:
- lib/road_to_rubykaigi/audio/sequencer.rb
Constant Summary
collapse
- BPM =
100
- NOTES =
{
REST: 0.0,
C4: 261.63, C4s: 277.18,
D4: 293.66, D4s: 311.13,
E4: 329.63,
F4: 349.23, F4s: 369.99,
G4: 392.00, G4s: 415.30,
A4: 440.00, A4s: 466.16,
B4: 493.88,
C5: 523.25, C5s: 554.37,
D5: 587.33, D5s: 622.25,
E5: 659.25,
F5: 698.46, F5s: 739.99,
G5: 783.99, G5s: 830.61,
A5: 880.00, A5s: 932.33,
B5: 987.77,
C6: 1046.50,
}
- ENVELOPE =
{
bass: { a: 0.2, d: 0.2, s: 0.6, sl: 0.6, rl: 0.9 },
bass_short: { a: 0.2, d: 0.2, s: 0.05, sl: 0.6, rl: 0.9 },
melody: { a: 0.05, d: 0.1, s: 0.1, sl: 0.75, rl: 1.35 },
melody_long: { a: 0.5, d: 0.2, s: 0.7, sl: 0.6, rl: 1.0 },
fanfare: { a: 0.2, d: 0.1, s: 0.35, sl: 0.6, rl: 1.5 },
}
Instance Method Summary
collapse
Instance Method Details
#finished? ⇒ Boolean
56
57
58
|
# File 'lib/road_to_rubykaigi/audio/sequencer.rb', line 56
def finished?
!loop? && @current_note_index >= @notes.size
end
|
#gain ⇒ Object
48
49
50
|
# File 'lib/road_to_rubykaigi/audio/sequencer.rb', line 48
def gain
@generator.gain
end
|
#generate ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/road_to_rubykaigi/audio/sequencer.rb', line 31
def generate
process
env = envelope
sample = if (current_note[:frequency] != [:REST]) &&
(@current_note_sample_count < (@samples_per_note * staccato_ratio))
@generator.generate(frequencies: current_frequencies)
else
0.0
end
increment_current_note_sample_count
sample * env
end
|
#rewind ⇒ Object
52
53
54
|
# File 'lib/road_to_rubykaigi/audio/sequencer.rb', line 52
def rewind
self
end
|
#sample_rate ⇒ Object
44
45
46
|
# File 'lib/road_to_rubykaigi/audio/sequencer.rb', line 44
def sample_rate
@generator.sample_rate
end
|