Module: Feep

Defined in:
lib/feep/utils.rb,
lib/feep.rb,
lib/feep/scale.rb,
lib/feep/version.rb,
lib/feep/constants.rb,
lib/feep/sound_file.rb,
lib/feep/sound_player.rb

Overview

lib/feep/constants.rb

Defined Under Namespace

Modules: Utils Classes: Base, Scale, SoundFile, SoundPlayer

Constant Summary collapse

VERSION =
'0.2.3'
SNDPLAYER_WIN =

constants

'sounder.exe'
SNDPLAYER_UNIX =
'afplay'
SAMPLE_RATE =
44100
TWO_PI =
2 * Math::PI
RANDOM_GENERATOR =
Random.new
WAVE_TYPES =
%w[sine square saw triangle noise]
SCALES =

tables of musical data

Hash[
  :chromatic          => '1,1,1,1,1,1,1,1,1,1,1,1,1',
  :whole_tone         => '2,2,2,2,2,2,2',
  :major              => '2,2,2,1,2,2,2,1',
  :minor_harm         => '2,1,2,2,1,3,3',
  :minor_melodic      => '2,1,2,2,2,2,3',
  :major_pentatonic   => '2,2,3,2,3,2',
  :minor_pentatonic   => '3,2,2,3,2,3',
  :blues              => '3,2,1,1,3,2,3',
  :phyrgian           => '1,2,2,2,1,2,2,2',
  :dorian             => '2,1,2,2,2,1,2,2'
]
NOTES =
Array[
'C0','C#0','D0','D#0','E0','F0','F#0','G0','G#0','A0','A#0','B0',
'C1','C#1','D1','D#1','E1','F1','F#1','G1','G#1','A1','A#1','B1',
'C2','C#2','D2','D#2','E2','F2','F#2','G2','G#2','A2','A#2','B2',
'C3','C#3','D3','D#3','E3','F3','F#3','G3','G#3','A3','A#3','B3',
'C4','C#4','D4','D#4','E4','F4','F#4','G4','G#4','A4','A#4','B4',
'C5','C#5','D5','D#5','E5','F5','F#5','G5','G#5','A5','A#5','B5',
'C6','C#6','D6','D#6','E6','F6','F#6','G6','G#6','A6','A#6','B6',
'C7','C#7','D7','D#7','E7','F7','F#7','G7','G#7','A7','A#7','B7',
'C8','C#8','D8','D#8','E8','F8','F#8','G8','G#8','A8','A#8','B8',
'C9','C#9','D9','D#9','E9','F9','F#9','G9','G#9','A9','A#9','B9'
]
NOTES_ALT =
Array[
'C0','Db0','D0','Eb0','E0','F0','Gb0','G0','Ab0','A0','Bb0','B0',
'C1','Db1','D1','Eb1','E1','F1','Gb1','G1','Ab1','A1','Bb1','B1',
'C2','Db2','D2','Eb2','E2','F2','Gb2','G2','Ab2','A2','Bb2','B2',
'C3','Db3','D3','Eb3','E3','F3','Gb3','G3','Ab3','A3','Bb3','B3',
'C4','Db4','D4','Eb4','E4','F4','Gb4','G4','Ab4','A4','Bb4','B4',
'C5','Db5','D5','Eb5','E5','F5','Gb5','G5','Ab5','A5','Bb5','B5',
'C6','Db6','D6','Eb6','E6','F6','Gb6','G6','Ab6','A6','Bb6','B6',
'C7','Db7','D7','Eb7','E7','F7','Gb7','G7','Ab7','A7','Bb7','B7',
'C8','Db8','D8','Eb8','E8','F8','Gb8','G8','Ab8','A8','Bb8','B8',
'C9','Db9','D9','Eb9','E9','F9','Gb9','G9','Ab9','A9','Bb9','B9'
]
FREQS =
Array[
16.351,17.324,18.354,19.445,20.601,21.827,23.124,24.499,25.956,27.500,29.135,30.868,
32.703,34.648,36.708,38.891,41.203,43.654,46.249,48.999,51.913,55.000,58.270,61.375,
65.406,69.296,73.416,77.782,82.407,87.307,92.499,97.999,103.826,110.000,116.541,
123.471,130.813,138.591,146.832,155.564,164.814,174.614,184.997,195.998,207.652,220.000,233.082,246.942,
261.626,277.183,293.665,311.127,329.628,349.228,369.994,391.995,415.305,440.000,466.164,493.883,
523.251,554.365,587.330,622.254,659.255,698.457,739.989,783.991,830.609,880.000,932.328,987.767,
1046.502,1108.731,1174.659,1244.508,1318.510,1396.913,1479.978,1567.982,1661.219,1760.000,1864.655,1975.533,
2093.005,2217.461,2349.318,2489.016,2637.021,2793.826,2959.956,3135.964,3322.438,3520.000,3729.310,3951.066,
4186.009,4434.922,4698.636,4978.032,5274.042,5587.652,5919.910,6271.928,6644.876,7040.000,7458.620,7902.132,
8372.018,8869.844,9397.272,9956.064,10548.084,11175.304,11839.820,12543.856,13289.752,14080.000,14917.240,15804.264
]
MIDIS =
Array[
 12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
 24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
 36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
 48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,
 60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,
 72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
 84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
 96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107,
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131
]
NOTE_FREQ =
Hash[
'C0' =>     16.351,
'C#0' =>    17.324,
'Db0' =>    17.324,
'D0' =>     18.354,
'D#0' =>    19.445,
'Eb0' =>    19.445,
'E0' =>     20.601,
'F0' =>     21.827,
'F#0' =>    23.124,
'Gb0' =>    23.124,
'G0' =>     24.499,
'G#0' =>    25.956,
'Ab0' =>    25.956,
'A0' =>     27.500,
'A#0' =>    29.135,
'Bb0' =>    29.135,
'B0' =>     30.868,
'C1' =>     32.703,
'C#1' =>    34.648,
'Db1' =>    34.648,
'D1' =>     36.708,
'D#1' =>    38.891,
'Eb1' =>    38.891,
'E1' =>     41.203,
'F1' =>     43.654,
'F#1' =>    46.249,
'Gb1' =>    46.249,
'G1' =>     48.999,
'G#1' =>    51.913,
'Ab1' =>    51.913,
'A1' =>     55.000,
'A#1' =>    58.270,
'Bb1' =>    58.270,
'B1' =>     61.375,
'C2' =>     65.406,
'C#2' =>    69.296,
'Db2' =>    69.296,
'D2' =>     73.416,
'D#2' =>    77.782,
'Eb2' =>    77.782,
'E2' =>     82.407,
'F2' =>     87.307,
'F#2' =>    92.499,
'Gb2' =>    92.499,
'G2' =>     97.999,
'G#2' =>    97.999,
'Ab2' =>   103.826,
'A2' =>    110.000,
'A#2' =>   116.541,
'Bb2' =>   116.541,
'B2' =>    123.471,
'C3' =>    130.813,
'C#3' =>   138.591,
'Db3' =>   138.591,
'D3' =>    146.832,
'D#3' =>   155.564,
'Eb3' =>   155.564,
'E3' =>    164.814,
'F3' =>    174.614,
'F#3' =>   184.997,
'Gb3' =>   184.997,
'G3' =>    195.998,
'G#3' =>   207.652,
'Ab3' =>   207.652,
'A3' =>    220.000,
'A#3' =>   233.082,
'Bb3' =>   233.082,
'B3' =>    246.942,
'C4' =>    261.626,
'C#4' =>   277.183,
'Db4' =>   277.183,
'D4' =>    293.665,
'D#4' =>   311.127,
'Eb4' =>   311.127,
'E4' =>    329.628,
'F4' =>    349.228,
'F#4' =>   369.994,
'Gb4' =>   369.994,
'G4' =>    391.995,
'G#4' =>   415.305,
'Ab4' =>   415.305,
'A4' =>    440.000,
'A#4' =>   466.164,
'Bb4' =>   466.164,
'B4' =>    493.883,
'C5' =>    523.251,
'C#5' =>   554.365,
'Db5' =>   554.365,
'D5' =>    587.330,
'D#5' =>   622.254,
'Eb5' =>   622.254,
'E5' =>    659.255,
'F5' =>    698.457,
'F#5' =>   739.989,
'Gb5' =>   739.989,
'G5' =>    783.991,
'G#5' =>   830.609,
'Ab5' =>   830.609,
'A5' =>    880.000,
'A#5' =>   932.328,
'Bb5' =>   932.328,
'B5' =>    987.767,
'C6' =>   1046.502,
'C#6' =>  1108.731,
'Db6' =>  1108.731,
'D6' =>   1174.659,
'D#6' =>  1244.508,
'Eb6' =>  1244.508,
'E6' =>   1318.510,
'F6' =>   1396.913,
'F#6' =>  1479.978,
'Gb6' =>  1479.978,
'G6' =>   1567.982,
'G#6' =>  1661.219,
'Ab6' =>  1661.219,
'A6' =>   1760.000,
'A#6' =>  1864.655,
'Bb6' =>  1864.655,
'B6' =>   1975.533,
'C7' =>   2093.005,
'C#7' =>  2217.461,
'Db7' =>  2217.461,
'D7' =>   2349.318,
'D#7' =>  2489.016,
'Eb7' =>  2489.016,
'E7' =>   2637.021,
'F7' =>   2793.826,
'F#7' =>  2959.956,
'Gb7' =>  2959.956,
'G7' =>   3135.964,
'G#7' =>  3322.438,
'Ab7' =>  3322.438,
'A7' =>   3520.000,
'A#7' =>  3729.310,
'Bb7' =>  3729.310,
'B7' =>   3951.066,
'C8' =>   4186.009,
'C#8' =>  4434.922,
'Db8' =>  4434.922,
'D8' =>   4698.636,
'D#8' =>  4978.032,
'Eb8' =>  4978.032,
'E8' =>   5274.042,
'F8' =>   5587.652,
'F#8' =>  5919.910,
'Gb8' =>  5919.910,
'G8' =>   6271.928,
'G#8' =>  6644.876,
'Ab8' =>  6644.876,
'A8' =>   7040.000,
'A#8' =>  7458.620,
'Bb8' =>  7458.620,
'B8' =>   7902.132,
'C9' =>   8372.018,
'C#9' =>  8869.844,
'Db9' =>  8869.844,
'D9' =>   9397.272,
'D#9' =>  9956.064,
'Eb9' =>  9956.064,
'E9' =>  10548.084,
'F9' =>  11175.304,
'F#9' => 11839.820,
'Gb9' => 11839.820,
'G9' =>  12543.856,
'G#9' => 13289.752,
'Ab9' => 13289.752,
'A9' =>  14080.000,
'A#9' => 14917.240,
'Bb9' => 14917.240,
'B9' =>  15804.264
]
ERROR_MSG =

error messages

Hash[
  :invalid_note             => 'Note name argument is invalid.',
  :invalid_scale            => "Scale ID is invalid. Valid IDs are: #{SCALES.keys}",
  :invalid_scale_root_note  => 'Scale cannot start with that note/frequency.',
  :invalid_waveform => "Waveform type is invalid. Valid waveform types are: #{WAVE_TYPES}",
  :scale_needs_note => 'You need to enter a valid note (-n) if you want to play a scale.'
]