Diapason
Music with Ruby.
Install
Install it directly: gem install diapason
Or put it in your Gemfile: gem 'diapason'
Use
require 'diapason'
tonic = Diapason::Note.a440
twelve_tone_equal_temperament = Diapason::Tuning::EqualTemperament.new(12, tonic)
notes = twelve_tone_equal_temperament.notes
major_scale_intervals = [2, 2, 1, 2, 2, 2, 1]
c_major = notes[3]
c_major_scale = Diapason::Scale.build(notes, major_scale_intervals, c_major)
waves = c_major_scale.notes.map do |note|
Diapason::Sound::SineWave.from_note(note)
end
sample_rate = 44100
sampler = Diapason::Sound::SinusoidalWaveSampler.new(sample_rate)
samples = waves.map do |wave|
sampler.samples_for_duration(wave, 1)
end
writer = Diapason::Sound::WaveFileWriter.new(sample_rate)
file = writer.write_samples(samples.map(&:to_a).flatten, '/path/to/c_major_scale.wav')
Diapason::Sound::WaveFilePlayer.new.play(file)