feep 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile.lock +17 -16
- data/feep.gemspec +30 -30
- data/lib/feep/constants.rb +257 -257
- data/lib/feep/version.rb +3 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 928244c2a8864fca9f619a60eed0c7da8e6d4df507d467660beb2907597716db
|
4
|
+
data.tar.gz: 102df846ee51d192a915318fc78f63dcdd4de8881ae7e5d090e5c4d3080269a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 641ca5b0a4f84d7ee28b7c61289d64039903a5db7f4290e9f0bbcbddf3de0926ca4248b4188a14c7079dd2eb0ff28f3ac82862c11ad8b657fbee010ffc8af860
|
7
|
+
data.tar.gz: 5c2f14de1f60e886f089aadf1f18a38eb7444a736912dddf9f3a69a0565bc0a387080e5d5c220a573349773f2dbea43711beae7a681e068b9d24ae1aab61836c
|
data/Gemfile.lock
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
feep (0.1
|
4
|
+
feep (0.2.1)
|
5
5
|
os (~> 0.9, >= 0.9.6)
|
6
6
|
wavefile (= 0.6.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
ast (2.
|
12
|
-
astrolabe (1.3.0)
|
13
|
-
parser (>= 2.2.0.pre.3, < 3.0)
|
11
|
+
ast (2.3.0)
|
14
12
|
byebug (3.5.1)
|
15
13
|
columnize (~> 0.8)
|
16
14
|
debugger-linecache (~> 1.2)
|
@@ -21,9 +19,10 @@ GEM
|
|
21
19
|
diff-lcs (1.2.5)
|
22
20
|
method_source (0.8.2)
|
23
21
|
os (0.9.6)
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
parallel (1.12.1)
|
23
|
+
parser (2.4.0.2)
|
24
|
+
ast (~> 2.3)
|
25
|
+
powerpack (0.1.1)
|
27
26
|
pry (0.10.1)
|
28
27
|
coderay (~> 1.1.0)
|
29
28
|
method_source (~> 0.8.1)
|
@@ -36,7 +35,7 @@ GEM
|
|
36
35
|
pry-byebug (3.0.1)
|
37
36
|
byebug (~> 3.4)
|
38
37
|
pry (~> 0.10)
|
39
|
-
rainbow (
|
38
|
+
rainbow (3.0.0)
|
40
39
|
rake (10.4.2)
|
41
40
|
rspec (3.2.0)
|
42
41
|
rspec-core (~> 3.2.0)
|
@@ -51,14 +50,16 @@ GEM
|
|
51
50
|
diff-lcs (>= 1.2.0, < 2.0)
|
52
51
|
rspec-support (~> 3.2.0)
|
53
52
|
rspec-support (3.2.2)
|
54
|
-
rubocop (0.
|
55
|
-
|
56
|
-
parser (>= 2.
|
53
|
+
rubocop (0.52.1)
|
54
|
+
parallel (~> 1.10)
|
55
|
+
parser (>= 2.4.0.2, < 3.0)
|
57
56
|
powerpack (~> 0.1)
|
58
|
-
rainbow (>=
|
59
|
-
ruby-progressbar (~> 1.
|
60
|
-
|
57
|
+
rainbow (>= 2.2.2, < 4.0)
|
58
|
+
ruby-progressbar (~> 1.7)
|
59
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
60
|
+
ruby-progressbar (1.9.0)
|
61
61
|
slop (3.6.0)
|
62
|
+
unicode-display_width (1.3.0)
|
62
63
|
wavefile (0.6.0)
|
63
64
|
win32console (1.3.2)
|
64
65
|
|
@@ -72,7 +73,7 @@ DEPENDENCIES
|
|
72
73
|
pry-byebug (~> 3.0)
|
73
74
|
rake (~> 10.0)
|
74
75
|
rspec (~> 3.0)
|
75
|
-
rubocop (~> 0.
|
76
|
+
rubocop (~> 0.52.1)
|
76
77
|
|
77
78
|
BUNDLED WITH
|
78
|
-
1.
|
79
|
+
1.16.1
|
data/feep.gemspec
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'feep/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = 'feep'
|
8
|
-
spec.version = Feep::VERSION
|
9
|
-
spec.platform = Gem::Platform::RUBY
|
10
|
-
spec.authors = ['Michael Chadwick']
|
11
|
-
spec.email = 'mike@codana.me'
|
12
|
-
spec.homepage = 'http://rubygems.org/gems/feep'
|
13
|
-
spec.summary = 'Make your computer feep with Ruby'
|
14
|
-
spec.description = 'Use Ruby to make your computer beep at a certain frequency for a certain duration. Do it for fun, or add it to other programs for easy alert sounds.'
|
15
|
-
|
16
|
-
spec.files = `git ls-files`.split("\n")
|
17
|
-
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
19
|
-
spec.require_paths = ['lib']
|
20
|
-
spec.license = 'MIT'
|
21
|
-
|
22
|
-
spec.add_runtime_dependency 'wavefile', '= 0.6.0'
|
23
|
-
spec.add_runtime_dependency 'os', '~> 0.9', '>= 0.9.6'
|
24
|
-
|
25
|
-
spec.add_development_dependency 'pry-byebug', '~> 3.0'
|
26
|
-
spec.add_development_dependency 'bundler', '~> 1.8'
|
27
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
28
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
30
|
-
end
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'feep/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'feep'
|
8
|
+
spec.version = Feep::VERSION
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.authors = ['Michael Chadwick']
|
11
|
+
spec.email = 'mike@codana.me'
|
12
|
+
spec.homepage = 'http://rubygems.org/gems/feep'
|
13
|
+
spec.summary = 'Make your computer feep with Ruby'
|
14
|
+
spec.description = 'Use Ruby to make your computer beep at a certain frequency for a certain duration. Do it for fun, or add it to other programs for easy alert sounds.'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split("\n")
|
17
|
+
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
spec.license = 'MIT'
|
21
|
+
|
22
|
+
spec.add_runtime_dependency 'wavefile', '= 0.6.0'
|
23
|
+
spec.add_runtime_dependency 'os', '~> 0.9', '>= 0.9.6'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'pry-byebug', '~> 3.0'
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.8'
|
27
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
+
spec.add_development_dependency 'rubocop', '~> 0.52.1'
|
30
|
+
end
|
data/lib/feep/constants.rb
CHANGED
@@ -1,257 +1,257 @@
|
|
1
|
-
# lib/feep/constants.rb
|
2
|
-
|
3
|
-
module Feep
|
4
|
-
# constants
|
5
|
-
SNDPLAYER_WIN = 'sounder.exe'
|
6
|
-
SNDPLAYER_UNIX = 'afplay'
|
7
|
-
SAMPLE_RATE = 44100
|
8
|
-
TWO_PI = 2 * Math::PI
|
9
|
-
RANDOM_GENERATOR = Random.new
|
10
|
-
WAVE_TYPES = %w[sine square saw triangle noise]
|
11
|
-
|
12
|
-
# tables of musical data
|
13
|
-
SCALES = Hash[
|
14
|
-
:chromatic => '1,1,1,1,1,1,1,1,1,1,1,1,1',
|
15
|
-
:whole_tone => '2,2,2,2,2,2,2',
|
16
|
-
:major => '2,2,2,1,2,2,2,1',
|
17
|
-
:minor_harm => '2,1,2,2,1,3,3',
|
18
|
-
:minor_melodic => '2,1,2,2,2,2,3',
|
19
|
-
:major_pentatonic => '2,2,3,2,3,2',
|
20
|
-
:minor_pentatonic => '3,2,2,3,2,3',
|
21
|
-
:blues => '3,2,1,1,3,2,3',
|
22
|
-
:phyrgian => '1,2,2,2,1,2,2,2',
|
23
|
-
:dorian => '2,1,2,2,2,1,2,2'
|
24
|
-
]
|
25
|
-
NOTES = Array[
|
26
|
-
'C0','C#0','D0','D#0','E0','F0','F#0','G0','G#0','A0','A#0','B0',
|
27
|
-
'C1','C#1','D1','D#1','E1','F1','F#1','G1','G#1','A1','A#1','B1',
|
28
|
-
'C2','C#2','D2','D#2','E2','F2','F#2','G2','G#2','A2','A#2','B2',
|
29
|
-
'C3','C#3','D3','D#3','E3','F3','F#3','G3','G#3','A3','A#3','B3',
|
30
|
-
'C4','C#4','D4','D#4','E4','F4','F#4','G4','G#4','A4','A#4','B4',
|
31
|
-
'C5','C#5','D5','D#5','E5','F5','F#5','G5','G#5','A5','A#5','B5',
|
32
|
-
'C6','C#6','D6','D#6','E6','F6','F#6','G6','G#6','A6','A#6','B6',
|
33
|
-
'C7','C#7','D7','D#7','E7','F7','F#7','G7','G#7','A7','A#7','B7',
|
34
|
-
'C8','C#8','D8','D#8','E8','F8','F#8','G8','G#8','A8','A#8','B8',
|
35
|
-
'C9','C#9','D9','D#9','E9','F9','F#9','G9','G#9','A9','A#9','B9'
|
36
|
-
]
|
37
|
-
NOTES_ALT = Array[
|
38
|
-
'C0','Db0','D0','Eb0','E0','F0','Gb0','G0','Ab0','A0','Bb0','B0',
|
39
|
-
'C1','Db1','D1','Eb1','E1','F1','Gb1','G1','Ab1','A1','Bb1','B1',
|
40
|
-
'C2','Db2','D2','Eb2','E2','F2','Gb2','G2','Ab2','A2','Bb2','B2',
|
41
|
-
'C3','Db3','D3','Eb3','E3','F3','Gb3','G3','Ab3','A3','Bb3','B3',
|
42
|
-
'C4','Db4','D4','Eb4','E4','F4','Gb4','G4','Ab4','A4','Bb4','B4',
|
43
|
-
'C5','Db5','D5','Eb5','E5','F5','Gb5','G5','Ab5','A5','Bb5','B5',
|
44
|
-
'C6','Db6','D6','Eb6','E6','F6','Gb6','G6','Ab6','A6','Bb6','B6',
|
45
|
-
'C7','Db7','D7','Eb7','E7','F7','Gb7','G7','Ab7','A7','Bb7','B7',
|
46
|
-
'C8','Db8','D8','Eb8','E8','F8','Gb8','G8','Ab8','A8','Bb8','B8',
|
47
|
-
'C9','Db9','D9','Eb9','E9','F9','Gb9','G9','Ab9','A9','Bb9','B9'
|
48
|
-
]
|
49
|
-
|
50
|
-
FREQS = Array[
|
51
|
-
16.351,17.324,18.354,19.445,20.601,21.827,23.124,24.499,25.956,27.500,29.135,30.868,
|
52
|
-
32.703,34.648,36.708,38.891,41.203,43.654,46.249,48.999,51.913,55.000,58.270,61.375,
|
53
|
-
65.406,69.296,73.416,77.782,82.407,87.307,92.499,97.999,103.826,110.000,116.541,
|
54
|
-
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,
|
55
|
-
261.626,277.183,293.665,311.127,329.628,349.228,369.994,391.995,415.305,440.000,466.164,493.883,
|
56
|
-
523.251,554.365,587.330,622.254,659.255,698.457,739.989,783.991,830.609,880.000,932.328,987.767,
|
57
|
-
1046.502,1108.731,1174.659,1244.508,1318.510,1396.913,1479.978,1567.982,1661.219,1760.000,1864.655,1975.533,
|
58
|
-
2093.005,2217.461,2349.318,2489.016,2637.021,2793.826,2959.956,3135.964,3322.438,3520.000,3729.310,3951.066,
|
59
|
-
4186.009,4434.922,4698.636,4978.032,5274.042,5587.652,5919.910,6271.928,6644.876,7040.000,7458.620,7902.132,
|
60
|
-
8372.018,8869.844,9397.272,9956.064,10548.084,11175.304,11839.820,12543.856,13289.752,14080.000,14917.240,15804.264
|
61
|
-
]
|
62
|
-
|
63
|
-
MIDIS = Array[
|
64
|
-
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
65
|
-
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
|
66
|
-
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
67
|
-
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
|
68
|
-
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
|
69
|
-
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
|
70
|
-
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
71
|
-
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
|
72
|
-
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
|
73
|
-
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131
|
74
|
-
]
|
75
|
-
|
76
|
-
NOTE_FREQ = Hash[
|
77
|
-
'C0' => 16.351,
|
78
|
-
'C#0' => 17.324,
|
79
|
-
'Db0' => 17.324,
|
80
|
-
'D0' => 18.354,
|
81
|
-
'D#0' => 19.445,
|
82
|
-
'Eb0' => 19.445,
|
83
|
-
'E0' => 20.601,
|
84
|
-
'F0' => 21.827,
|
85
|
-
'F#0' => 23.124,
|
86
|
-
'Gb0' => 23.124,
|
87
|
-
'G0' => 24.499,
|
88
|
-
'G#0' => 25.956,
|
89
|
-
'Ab0' => 25.956,
|
90
|
-
'A0' => 27.500,
|
91
|
-
'A#0' => 29.135,
|
92
|
-
'Bb0' => 29.135,
|
93
|
-
'B0' => 30.868,
|
94
|
-
'C1' => 32.703,
|
95
|
-
'C#1' => 34.648,
|
96
|
-
'Db1' => 34.648,
|
97
|
-
'D1' => 36.708,
|
98
|
-
'D#1' => 38.891,
|
99
|
-
'Eb1' => 38.891,
|
100
|
-
'E1' => 41.203,
|
101
|
-
'F1' => 43.654,
|
102
|
-
'F#1' => 46.249,
|
103
|
-
'Gb1' => 46.249,
|
104
|
-
'G1' => 48.999,
|
105
|
-
'G#1' => 51.913,
|
106
|
-
'Ab1' => 51.913,
|
107
|
-
'A1' => 55.000,
|
108
|
-
'A#1' => 58.270,
|
109
|
-
'Bb1' => 58.270,
|
110
|
-
'B1' => 61.375,
|
111
|
-
'C2' => 65.406,
|
112
|
-
'C#2' => 69.296,
|
113
|
-
'Db2' => 69.296,
|
114
|
-
'D2' => 73.416,
|
115
|
-
'D#2' => 77.782,
|
116
|
-
'Eb2' => 77.782,
|
117
|
-
'E2' => 82.407,
|
118
|
-
'F2' => 87.307,
|
119
|
-
'F#2' => 92.499,
|
120
|
-
'Gb2' => 92.499,
|
121
|
-
'G2' => 97.999,
|
122
|
-
'G#2' => 97.999,
|
123
|
-
'Ab2' => 103.826,
|
124
|
-
'A2' => 110.000,
|
125
|
-
'A#2' => 116.541,
|
126
|
-
'Bb2' => 116.541,
|
127
|
-
'B2' => 123.471,
|
128
|
-
'C3' => 130.813,
|
129
|
-
'C#3' => 138.591,
|
130
|
-
'Db3' => 138.591,
|
131
|
-
'D3' => 146.832,
|
132
|
-
'D#3' => 155.564,
|
133
|
-
'Eb3' => 155.564,
|
134
|
-
'E3' => 164.814,
|
135
|
-
'F3' => 174.614,
|
136
|
-
'F#3' => 184.997,
|
137
|
-
'Gb3' => 184.997,
|
138
|
-
'G3' => 195.998,
|
139
|
-
'G#3' => 207.652,
|
140
|
-
'Ab3' => 207.652,
|
141
|
-
'A3' => 220.000,
|
142
|
-
'A#3' => 233.082,
|
143
|
-
'Bb3' => 233.082,
|
144
|
-
'B3' => 246.942,
|
145
|
-
'C4' => 261.626,
|
146
|
-
'C#4' => 277.183,
|
147
|
-
'Db4' => 277.183,
|
148
|
-
'D4' => 293.665,
|
149
|
-
'D#4' => 311.127,
|
150
|
-
'Eb4' => 311.127,
|
151
|
-
'E4' => 329.628,
|
152
|
-
'F4' => 349.228,
|
153
|
-
'F#4' => 369.994,
|
154
|
-
'Gb4' => 369.994,
|
155
|
-
'G4' => 391.995,
|
156
|
-
'G#4' => 415.305,
|
157
|
-
'Ab4' => 415.305,
|
158
|
-
'A4' => 440.000,
|
159
|
-
'A#4' => 466.164,
|
160
|
-
'Bb4' => 466.164,
|
161
|
-
'B4' => 493.883,
|
162
|
-
'C5' => 523.251,
|
163
|
-
'C#5' => 554.365,
|
164
|
-
'Db5' => 554.365,
|
165
|
-
'D5' => 587.330,
|
166
|
-
'D#5' => 622.254,
|
167
|
-
'Eb5' => 622.254,
|
168
|
-
'E5' => 659.255,
|
169
|
-
'F5' => 698.457,
|
170
|
-
'F#5' => 739.989,
|
171
|
-
'Gb5' => 739.989,
|
172
|
-
'G5' => 783.991,
|
173
|
-
'G#5' => 830.609,
|
174
|
-
'Ab5' => 830.609,
|
175
|
-
'A5' => 880.000,
|
176
|
-
'A#5' => 932.328,
|
177
|
-
'Bb5' => 932.328,
|
178
|
-
'B5' => 987.767,
|
179
|
-
'C6' => 1046.502,
|
180
|
-
'C#6' => 1108.731,
|
181
|
-
'Db6' => 1108.731,
|
182
|
-
'D6' => 1174.659,
|
183
|
-
'D#6' => 1244.508,
|
184
|
-
'Eb6' => 1244.508,
|
185
|
-
'E6' => 1318.510,
|
186
|
-
'F6' => 1396.913,
|
187
|
-
'F#6' => 1479.978,
|
188
|
-
'Gb6' => 1479.978,
|
189
|
-
'G6' => 1567.982,
|
190
|
-
'G#6' => 1661.219,
|
191
|
-
'Ab6' => 1661.219,
|
192
|
-
'A6' => 1760.000,
|
193
|
-
'A#6' => 1864.655,
|
194
|
-
'Bb6' => 1864.655,
|
195
|
-
'B6' => 1975.533,
|
196
|
-
'C7' => 2093.005,
|
197
|
-
'C#7' => 2217.461,
|
198
|
-
'Db7' => 2217.461,
|
199
|
-
'D7' => 2349.318,
|
200
|
-
'D#7' => 2489.016,
|
201
|
-
'Eb7' => 2489.016,
|
202
|
-
'E7' => 2637.021,
|
203
|
-
'F7' => 2793.826,
|
204
|
-
'F#7' => 2959.956,
|
205
|
-
'Gb7' => 2959.956,
|
206
|
-
'G7' => 3135.964,
|
207
|
-
'G#7' => 3322.438,
|
208
|
-
'Ab7' => 3322.438,
|
209
|
-
'A7' => 3520.000,
|
210
|
-
'A#7' => 3729.310,
|
211
|
-
'Bb7' => 3729.310,
|
212
|
-
'B7' => 3951.066,
|
213
|
-
'C8' => 4186.009,
|
214
|
-
'C#8' => 4434.922,
|
215
|
-
'Db8' => 4434.922,
|
216
|
-
'D8' => 4698.636,
|
217
|
-
'D#8' => 4978.032,
|
218
|
-
'Eb8' => 4978.032,
|
219
|
-
'E8' => 5274.042,
|
220
|
-
'F8' => 5587.652,
|
221
|
-
'F#8' => 5919.910,
|
222
|
-
'Gb8' => 5919.910,
|
223
|
-
'G8' => 6271.928,
|
224
|
-
'G#8' => 6644.876,
|
225
|
-
'Ab8' => 6644.876,
|
226
|
-
'A8' => 7040.000,
|
227
|
-
'A#8' => 7458.620,
|
228
|
-
'Bb8' => 7458.620,
|
229
|
-
'B8' => 7902.132,
|
230
|
-
'C9' => 8372.018,
|
231
|
-
'C#9' => 8869.844,
|
232
|
-
'Db9' => 8869.844,
|
233
|
-
'D9' => 9397.272,
|
234
|
-
'D#9' => 9956.064,
|
235
|
-
'Eb9' => 9956.064,
|
236
|
-
'E9' => 10548.084,
|
237
|
-
'F9' => 11175.304,
|
238
|
-
'F#9' => 11839.820,
|
239
|
-
'Gb9' => 11839.820,
|
240
|
-
'G9' => 12543.856,
|
241
|
-
'G#9' => 13289.752,
|
242
|
-
'Ab9' => 13289.752,
|
243
|
-
'A9' => 14080.000,
|
244
|
-
'A#9' => 14917.240,
|
245
|
-
'Bb9' => 14917.240,
|
246
|
-
'B9' => 15804.264
|
247
|
-
]
|
248
|
-
|
249
|
-
# error messages
|
250
|
-
ERROR_MSG = Hash[
|
251
|
-
:invalid_note => 'Note name argument is invalid.',
|
252
|
-
:invalid_scale => "Scale ID is invalid. Valid IDs are: #{SCALES.keys}",
|
253
|
-
:invalid_scale_root_note => 'Scale cannot start with that note/frequency.',
|
254
|
-
:invalid_waveform => "Waveform type is invalid. Valid waveform types are: #{WAVE_TYPES}",
|
255
|
-
:scale_needs_note => 'You need to enter a valid note (-n) if you want to play a scale.'
|
256
|
-
]
|
257
|
-
end
|
1
|
+
# lib/feep/constants.rb
|
2
|
+
|
3
|
+
module Feep
|
4
|
+
# constants
|
5
|
+
SNDPLAYER_WIN = 'sounder.exe'
|
6
|
+
SNDPLAYER_UNIX = 'afplay'
|
7
|
+
SAMPLE_RATE = 44100
|
8
|
+
TWO_PI = 2 * Math::PI
|
9
|
+
RANDOM_GENERATOR = Random.new
|
10
|
+
WAVE_TYPES = %w[sine square saw triangle noise]
|
11
|
+
|
12
|
+
# tables of musical data
|
13
|
+
SCALES = Hash[
|
14
|
+
:chromatic => '1,1,1,1,1,1,1,1,1,1,1,1,1',
|
15
|
+
:whole_tone => '2,2,2,2,2,2,2',
|
16
|
+
:major => '2,2,2,1,2,2,2,1',
|
17
|
+
:minor_harm => '2,1,2,2,1,3,3',
|
18
|
+
:minor_melodic => '2,1,2,2,2,2,3',
|
19
|
+
:major_pentatonic => '2,2,3,2,3,2',
|
20
|
+
:minor_pentatonic => '3,2,2,3,2,3',
|
21
|
+
:blues => '3,2,1,1,3,2,3',
|
22
|
+
:phyrgian => '1,2,2,2,1,2,2,2',
|
23
|
+
:dorian => '2,1,2,2,2,1,2,2'
|
24
|
+
]
|
25
|
+
NOTES = Array[
|
26
|
+
'C0','C#0','D0','D#0','E0','F0','F#0','G0','G#0','A0','A#0','B0',
|
27
|
+
'C1','C#1','D1','D#1','E1','F1','F#1','G1','G#1','A1','A#1','B1',
|
28
|
+
'C2','C#2','D2','D#2','E2','F2','F#2','G2','G#2','A2','A#2','B2',
|
29
|
+
'C3','C#3','D3','D#3','E3','F3','F#3','G3','G#3','A3','A#3','B3',
|
30
|
+
'C4','C#4','D4','D#4','E4','F4','F#4','G4','G#4','A4','A#4','B4',
|
31
|
+
'C5','C#5','D5','D#5','E5','F5','F#5','G5','G#5','A5','A#5','B5',
|
32
|
+
'C6','C#6','D6','D#6','E6','F6','F#6','G6','G#6','A6','A#6','B6',
|
33
|
+
'C7','C#7','D7','D#7','E7','F7','F#7','G7','G#7','A7','A#7','B7',
|
34
|
+
'C8','C#8','D8','D#8','E8','F8','F#8','G8','G#8','A8','A#8','B8',
|
35
|
+
'C9','C#9','D9','D#9','E9','F9','F#9','G9','G#9','A9','A#9','B9'
|
36
|
+
]
|
37
|
+
NOTES_ALT = Array[
|
38
|
+
'C0','Db0','D0','Eb0','E0','F0','Gb0','G0','Ab0','A0','Bb0','B0',
|
39
|
+
'C1','Db1','D1','Eb1','E1','F1','Gb1','G1','Ab1','A1','Bb1','B1',
|
40
|
+
'C2','Db2','D2','Eb2','E2','F2','Gb2','G2','Ab2','A2','Bb2','B2',
|
41
|
+
'C3','Db3','D3','Eb3','E3','F3','Gb3','G3','Ab3','A3','Bb3','B3',
|
42
|
+
'C4','Db4','D4','Eb4','E4','F4','Gb4','G4','Ab4','A4','Bb4','B4',
|
43
|
+
'C5','Db5','D5','Eb5','E5','F5','Gb5','G5','Ab5','A5','Bb5','B5',
|
44
|
+
'C6','Db6','D6','Eb6','E6','F6','Gb6','G6','Ab6','A6','Bb6','B6',
|
45
|
+
'C7','Db7','D7','Eb7','E7','F7','Gb7','G7','Ab7','A7','Bb7','B7',
|
46
|
+
'C8','Db8','D8','Eb8','E8','F8','Gb8','G8','Ab8','A8','Bb8','B8',
|
47
|
+
'C9','Db9','D9','Eb9','E9','F9','Gb9','G9','Ab9','A9','Bb9','B9'
|
48
|
+
]
|
49
|
+
|
50
|
+
FREQS = Array[
|
51
|
+
16.351,17.324,18.354,19.445,20.601,21.827,23.124,24.499,25.956,27.500,29.135,30.868,
|
52
|
+
32.703,34.648,36.708,38.891,41.203,43.654,46.249,48.999,51.913,55.000,58.270,61.375,
|
53
|
+
65.406,69.296,73.416,77.782,82.407,87.307,92.499,97.999,103.826,110.000,116.541,
|
54
|
+
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,
|
55
|
+
261.626,277.183,293.665,311.127,329.628,349.228,369.994,391.995,415.305,440.000,466.164,493.883,
|
56
|
+
523.251,554.365,587.330,622.254,659.255,698.457,739.989,783.991,830.609,880.000,932.328,987.767,
|
57
|
+
1046.502,1108.731,1174.659,1244.508,1318.510,1396.913,1479.978,1567.982,1661.219,1760.000,1864.655,1975.533,
|
58
|
+
2093.005,2217.461,2349.318,2489.016,2637.021,2793.826,2959.956,3135.964,3322.438,3520.000,3729.310,3951.066,
|
59
|
+
4186.009,4434.922,4698.636,4978.032,5274.042,5587.652,5919.910,6271.928,6644.876,7040.000,7458.620,7902.132,
|
60
|
+
8372.018,8869.844,9397.272,9956.064,10548.084,11175.304,11839.820,12543.856,13289.752,14080.000,14917.240,15804.264
|
61
|
+
]
|
62
|
+
|
63
|
+
MIDIS = Array[
|
64
|
+
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
65
|
+
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
|
66
|
+
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
67
|
+
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
|
68
|
+
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
|
69
|
+
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
|
70
|
+
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
71
|
+
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
|
72
|
+
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
|
73
|
+
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131
|
74
|
+
]
|
75
|
+
|
76
|
+
NOTE_FREQ = Hash[
|
77
|
+
'C0' => 16.351,
|
78
|
+
'C#0' => 17.324,
|
79
|
+
'Db0' => 17.324,
|
80
|
+
'D0' => 18.354,
|
81
|
+
'D#0' => 19.445,
|
82
|
+
'Eb0' => 19.445,
|
83
|
+
'E0' => 20.601,
|
84
|
+
'F0' => 21.827,
|
85
|
+
'F#0' => 23.124,
|
86
|
+
'Gb0' => 23.124,
|
87
|
+
'G0' => 24.499,
|
88
|
+
'G#0' => 25.956,
|
89
|
+
'Ab0' => 25.956,
|
90
|
+
'A0' => 27.500,
|
91
|
+
'A#0' => 29.135,
|
92
|
+
'Bb0' => 29.135,
|
93
|
+
'B0' => 30.868,
|
94
|
+
'C1' => 32.703,
|
95
|
+
'C#1' => 34.648,
|
96
|
+
'Db1' => 34.648,
|
97
|
+
'D1' => 36.708,
|
98
|
+
'D#1' => 38.891,
|
99
|
+
'Eb1' => 38.891,
|
100
|
+
'E1' => 41.203,
|
101
|
+
'F1' => 43.654,
|
102
|
+
'F#1' => 46.249,
|
103
|
+
'Gb1' => 46.249,
|
104
|
+
'G1' => 48.999,
|
105
|
+
'G#1' => 51.913,
|
106
|
+
'Ab1' => 51.913,
|
107
|
+
'A1' => 55.000,
|
108
|
+
'A#1' => 58.270,
|
109
|
+
'Bb1' => 58.270,
|
110
|
+
'B1' => 61.375,
|
111
|
+
'C2' => 65.406,
|
112
|
+
'C#2' => 69.296,
|
113
|
+
'Db2' => 69.296,
|
114
|
+
'D2' => 73.416,
|
115
|
+
'D#2' => 77.782,
|
116
|
+
'Eb2' => 77.782,
|
117
|
+
'E2' => 82.407,
|
118
|
+
'F2' => 87.307,
|
119
|
+
'F#2' => 92.499,
|
120
|
+
'Gb2' => 92.499,
|
121
|
+
'G2' => 97.999,
|
122
|
+
'G#2' => 97.999,
|
123
|
+
'Ab2' => 103.826,
|
124
|
+
'A2' => 110.000,
|
125
|
+
'A#2' => 116.541,
|
126
|
+
'Bb2' => 116.541,
|
127
|
+
'B2' => 123.471,
|
128
|
+
'C3' => 130.813,
|
129
|
+
'C#3' => 138.591,
|
130
|
+
'Db3' => 138.591,
|
131
|
+
'D3' => 146.832,
|
132
|
+
'D#3' => 155.564,
|
133
|
+
'Eb3' => 155.564,
|
134
|
+
'E3' => 164.814,
|
135
|
+
'F3' => 174.614,
|
136
|
+
'F#3' => 184.997,
|
137
|
+
'Gb3' => 184.997,
|
138
|
+
'G3' => 195.998,
|
139
|
+
'G#3' => 207.652,
|
140
|
+
'Ab3' => 207.652,
|
141
|
+
'A3' => 220.000,
|
142
|
+
'A#3' => 233.082,
|
143
|
+
'Bb3' => 233.082,
|
144
|
+
'B3' => 246.942,
|
145
|
+
'C4' => 261.626,
|
146
|
+
'C#4' => 277.183,
|
147
|
+
'Db4' => 277.183,
|
148
|
+
'D4' => 293.665,
|
149
|
+
'D#4' => 311.127,
|
150
|
+
'Eb4' => 311.127,
|
151
|
+
'E4' => 329.628,
|
152
|
+
'F4' => 349.228,
|
153
|
+
'F#4' => 369.994,
|
154
|
+
'Gb4' => 369.994,
|
155
|
+
'G4' => 391.995,
|
156
|
+
'G#4' => 415.305,
|
157
|
+
'Ab4' => 415.305,
|
158
|
+
'A4' => 440.000,
|
159
|
+
'A#4' => 466.164,
|
160
|
+
'Bb4' => 466.164,
|
161
|
+
'B4' => 493.883,
|
162
|
+
'C5' => 523.251,
|
163
|
+
'C#5' => 554.365,
|
164
|
+
'Db5' => 554.365,
|
165
|
+
'D5' => 587.330,
|
166
|
+
'D#5' => 622.254,
|
167
|
+
'Eb5' => 622.254,
|
168
|
+
'E5' => 659.255,
|
169
|
+
'F5' => 698.457,
|
170
|
+
'F#5' => 739.989,
|
171
|
+
'Gb5' => 739.989,
|
172
|
+
'G5' => 783.991,
|
173
|
+
'G#5' => 830.609,
|
174
|
+
'Ab5' => 830.609,
|
175
|
+
'A5' => 880.000,
|
176
|
+
'A#5' => 932.328,
|
177
|
+
'Bb5' => 932.328,
|
178
|
+
'B5' => 987.767,
|
179
|
+
'C6' => 1046.502,
|
180
|
+
'C#6' => 1108.731,
|
181
|
+
'Db6' => 1108.731,
|
182
|
+
'D6' => 1174.659,
|
183
|
+
'D#6' => 1244.508,
|
184
|
+
'Eb6' => 1244.508,
|
185
|
+
'E6' => 1318.510,
|
186
|
+
'F6' => 1396.913,
|
187
|
+
'F#6' => 1479.978,
|
188
|
+
'Gb6' => 1479.978,
|
189
|
+
'G6' => 1567.982,
|
190
|
+
'G#6' => 1661.219,
|
191
|
+
'Ab6' => 1661.219,
|
192
|
+
'A6' => 1760.000,
|
193
|
+
'A#6' => 1864.655,
|
194
|
+
'Bb6' => 1864.655,
|
195
|
+
'B6' => 1975.533,
|
196
|
+
'C7' => 2093.005,
|
197
|
+
'C#7' => 2217.461,
|
198
|
+
'Db7' => 2217.461,
|
199
|
+
'D7' => 2349.318,
|
200
|
+
'D#7' => 2489.016,
|
201
|
+
'Eb7' => 2489.016,
|
202
|
+
'E7' => 2637.021,
|
203
|
+
'F7' => 2793.826,
|
204
|
+
'F#7' => 2959.956,
|
205
|
+
'Gb7' => 2959.956,
|
206
|
+
'G7' => 3135.964,
|
207
|
+
'G#7' => 3322.438,
|
208
|
+
'Ab7' => 3322.438,
|
209
|
+
'A7' => 3520.000,
|
210
|
+
'A#7' => 3729.310,
|
211
|
+
'Bb7' => 3729.310,
|
212
|
+
'B7' => 3951.066,
|
213
|
+
'C8' => 4186.009,
|
214
|
+
'C#8' => 4434.922,
|
215
|
+
'Db8' => 4434.922,
|
216
|
+
'D8' => 4698.636,
|
217
|
+
'D#8' => 4978.032,
|
218
|
+
'Eb8' => 4978.032,
|
219
|
+
'E8' => 5274.042,
|
220
|
+
'F8' => 5587.652,
|
221
|
+
'F#8' => 5919.910,
|
222
|
+
'Gb8' => 5919.910,
|
223
|
+
'G8' => 6271.928,
|
224
|
+
'G#8' => 6644.876,
|
225
|
+
'Ab8' => 6644.876,
|
226
|
+
'A8' => 7040.000,
|
227
|
+
'A#8' => 7458.620,
|
228
|
+
'Bb8' => 7458.620,
|
229
|
+
'B8' => 7902.132,
|
230
|
+
'C9' => 8372.018,
|
231
|
+
'C#9' => 8869.844,
|
232
|
+
'Db9' => 8869.844,
|
233
|
+
'D9' => 9397.272,
|
234
|
+
'D#9' => 9956.064,
|
235
|
+
'Eb9' => 9956.064,
|
236
|
+
'E9' => 10548.084,
|
237
|
+
'F9' => 11175.304,
|
238
|
+
'F#9' => 11839.820,
|
239
|
+
'Gb9' => 11839.820,
|
240
|
+
'G9' => 12543.856,
|
241
|
+
'G#9' => 13289.752,
|
242
|
+
'Ab9' => 13289.752,
|
243
|
+
'A9' => 14080.000,
|
244
|
+
'A#9' => 14917.240,
|
245
|
+
'Bb9' => 14917.240,
|
246
|
+
'B9' => 15804.264
|
247
|
+
]
|
248
|
+
|
249
|
+
# error messages
|
250
|
+
ERROR_MSG = Hash[
|
251
|
+
:invalid_note => 'Note name argument is invalid.',
|
252
|
+
:invalid_scale => "Scale ID is invalid. Valid IDs are: #{SCALES.keys}",
|
253
|
+
:invalid_scale_root_note => 'Scale cannot start with that note/frequency.',
|
254
|
+
:invalid_waveform => "Waveform type is invalid. Valid waveform types are: #{WAVE_TYPES}",
|
255
|
+
:scale_needs_note => 'You need to enter a valid note (-n) if you want to play a scale.'
|
256
|
+
]
|
257
|
+
end
|
data/lib/feep/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Feep
|
2
|
-
VERSION = '0.2.
|
3
|
-
end
|
1
|
+
module Feep
|
2
|
+
VERSION = '0.2.1'
|
3
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Chadwick
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: wavefile
|
@@ -106,14 +106,14 @@ dependencies:
|
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
109
|
+
version: 0.52.1
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
116
|
+
version: 0.52.1
|
117
117
|
description: Use Ruby to make your computer beep at a certain frequency for a certain
|
118
118
|
duration. Do it for fun, or add it to other programs for easy alert sounds.
|
119
119
|
email: mike@codana.me
|
@@ -159,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
159
|
version: '0'
|
160
160
|
requirements: []
|
161
161
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
162
|
+
rubygems_version: 2.7.4
|
163
163
|
signing_key:
|
164
164
|
specification_version: 4
|
165
165
|
summary: Make your computer feep with Ruby
|