feep 0.1.2 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a4ddbae117f9ad17cc10c47a75a56381e6d5742b
4
- data.tar.gz: 80cc11d69da0bf6cb57a9d595b73b921dd5462ef
2
+ SHA256:
3
+ metadata.gz: 59543cefdd37f6d8096b1ddc2cffc002f29feb400959fd151666b9b5840db475
4
+ data.tar.gz: f93bc3597f9b124022df28392a3b2d0a95a662c78a486d5585757c334befbf09
5
5
  SHA512:
6
- metadata.gz: b9521d96d2a556d7cd8c01181110c9f377b1aad9841c9b7d1a017c735833edd406286e15a97bde1ec15f661c18544638f485e2b0dea690cde9358aa4dc4ef26a
7
- data.tar.gz: 37f076a5061a8a2140bd0094761b63228faaa529aa8882a0ac5abbc619af5dabac25fbcfced46e225f1ce670ec91696b6c997e53c6c36bc8d3c8d7b79ba8e65b
6
+ metadata.gz: d142fd388e4795be9ddb531622abac78c834c12e4ab771a1e2e24cd844bddf087cbc99208a25043f3a54e2abc8a1d0799981c7beebf687e19afa5361fc207529
7
+ data.tar.gz: 79c1faa0adc9dd6e88b3d3b0e0e3d7a392b53dab7dba833f409e0f456910a79fce710511ebf7377aec1cd4963de7ab31cfdc2c694d8eeb1f908bb8e9ac243a77
@@ -1,16 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- feep (0.1.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.0.0)
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
- parser (2.2.0.3)
25
- ast (>= 1.1, < 3.0)
26
- powerpack (0.1.0)
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,8 +35,8 @@ GEM
36
35
  pry-byebug (3.0.1)
37
36
  byebug (~> 3.4)
38
37
  pry (~> 0.10)
39
- rainbow (2.0.0)
40
- rake (10.4.2)
38
+ rainbow (3.0.0)
39
+ rake (12.3.3)
41
40
  rspec (3.2.0)
42
41
  rspec-core (~> 3.2.0)
43
42
  rspec-expectations (~> 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.29.1)
55
- astrolabe (~> 1.3)
56
- parser (>= 2.2.0.1, < 3.0)
53
+ rubocop (0.52.1)
54
+ parallel (~> 1.10)
55
+ parser (>= 2.4.0.2, < 3.0)
57
56
  powerpack (~> 0.1)
58
- rainbow (>= 1.99.1, < 3.0)
59
- ruby-progressbar (~> 1.4)
60
- ruby-progressbar (1.7.5)
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
 
@@ -67,12 +68,12 @@ PLATFORMS
67
68
  x64-mingw32
68
69
 
69
70
  DEPENDENCIES
70
- bundler (~> 1.8)
71
+ bundler (~> 2.0)
71
72
  feep!
72
73
  pry-byebug (~> 3.0)
73
- rake (~> 10.0)
74
+ rake (~> 12.0)
74
75
  rspec (~> 3.0)
75
- rubocop (~> 0.29)
76
+ rubocop (~> 0.52.1)
76
77
 
77
78
  BUNDLED WITH
78
- 1.10.3
79
+ 2.1.4
data/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
  [![Gem Version](https://badge.fury.io/rb/feep.svg)](http://badge.fury.io/rb/feep)
3
3
 
4
4
  ## Wha?
5
- Use the power of Ruby gems to make your computer [feep](http://dictionary.reference.com/browse/feep) (except more musically) using sweet [WAV-file-writing technology](http://wavefilegem.com) from [Joel Strait](https://github.com/jstrait). Works on both Windows and *nix (including OS X) as it uses the standard WAV format to do its bidding.
5
+ Use the power of Ruby gems to make your computer [feep](http://dictionary.reference.com/browse/feep) (except more musically) using sweet [WAV-file-writing technology](http://wavefilegem.com) from [Joel Strait](https://github.com/jstrait). Works on both Windows and \*nix (including OS X) as it uses the standard WAV format to do its bidding.
6
6
 
7
- _Note:_ In order for the sound-playing magic to work on Windows, you will need [sounder](http://www.elifulkerson.com/projects/commandline-wav-player.php), a free command-line WAV file player on your system and in your path. Mac and *nix uses `afplay`, which should be built-in, but feel free to change either to something you already have or desire to install.
7
+ _Note:_ In order for the sound-playing magic to work on Windows, you will need [sounder](http://www.elifulkerson.com/projects/commandline-wav-player.php), a free command-line WAV file player on your system and in your path. Mac and \*nix uses `afplay`, which should be built-in, but feel free to change either to something you already have or desire to install.
8
8
 
9
9
  ## Why?
10
10
 
@@ -18,7 +18,7 @@ Feep doesn't require any parameters, as it will play a 440Hz/A4 sine wave at 50%
18
18
 
19
19
  The full usage looks like this:
20
20
 
21
- `feep [-f, --frequency FREQUENCY] [-n, --note NOTE_NAME] [-s, --scale SCALE_ID] [--degrees SCALE_DEGREES] [-w, --waveform WAVEFORM_ID] [-a, --amplitude MAX_AMPLITUDE] [-d, --duration DURATION] [--save] [--loud]`
21
+ `feep [-f, --frequency FREQUENCY] [-n, --note NOTE_NAME] [-s, --scale SCALE_ID] [--degrees SCALE_DEGREES] [-w, --waveform WAVEFORM_ID] [-a, --amplitude MAX_AMPLITUDE] [-d, --duration DURATION] [--save] [--verbose] [--visual_cue]`
22
22
 
23
23
  `-f, --frequency, -n, --note`: a number from 0 to 20000, or a valid note name from C0 to B9 (including sharps and flats). Both `-f|--frequency` and `-n|--note` parameters can take either kind; they're both supported mainly for ease of use. You can try a frequency outside of this range, but you may get odd results. You may also enter some combination of these with commas between them and it'll play all of them together in a chord.
24
24
 
@@ -34,7 +34,9 @@ The full usage looks like this:
34
34
 
35
35
  `--save`: switch to save the resulting WAV file in the current directory. Will create it in the format of `waveform_frequency-in-Hz_volume_duration.wav`.
36
36
 
37
- `--loud`: switch that displays note and file-making information.
37
+ `--verbose`: switch that displays note and file-making information.
38
+
39
+ `--visual_cue`: switch that display a cute "Feep!" message, the length of which determined by the duration of the feep.
38
40
 
39
41
  ## Examples
40
42
 
data/bin/feep CHANGED
@@ -1,33 +1,43 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'optparse'
4
- require 'pry'
5
4
 
6
5
  require_relative '../lib/feep'
7
6
  require_relative '../lib/feep/version'
8
7
 
9
8
  def parse_options
10
- options = {:freq_or_note => '440.000', :scale => nil, :waveform => 'sine', :volume => 0.5, :duration => 100, :save => false, :loud => false, :usage => nil}
9
+ options = {
10
+ :freq_or_note => '440.000',
11
+ :scale => nil,
12
+ :waveform => 'sine',
13
+ :volume => 0.5,
14
+ :duration => 100,
15
+ :save => false,
16
+ :verbose => false,
17
+ :visual_cue => false,
18
+ :usage => nil
19
+ }
11
20
 
12
21
  optparse = OptionParser.new do |opts|
13
- opts.banner = 'usage: feep [-f, -n, --frequency, --note FREQUENCY|NOTE_NAME] [-s, --scale SCALE_ID] [-sd, --degrees NUMBER_OF_SCALE_DEGREES] [-w, --waveform WAVEFORM_ID] [-a, --amplitude MAX_AMPLITUDE] [-d, --duration DURATION] [--save] [--loud] [--notext]'
22
+ opts.banner = "Play sounds on the command line\n"
23
+ opts.banner += "usage: feep [-f, -n, --frequency, --note FREQUENCY|NOTE_NAME] [-s, --scale SCALE_ID] [-sd, --degrees NUMBER_OF_SCALE_DEGREES] [-w, --waveform WAVEFORM_ID] [-a, --amplitude MAX_AMPLITUDE] [-d, --duration DURATION] [--save] [--verbose] [--visual_cue]\n\n"
14
24
 
15
25
  opts.on('-f', '--frequency FREQUENCY', 'One or more frequencies or to play at once, e.g. 440 or 220,440,880') do |frequency|
16
26
  options[:freq_or_note] = frequency
17
27
  end
18
-
28
+
19
29
  opts.on('-n', '--note NOTE_NAME', 'One or more note names to play at once, e.g. A4 or A4,C5,E5') do |note|
20
30
  options[:freq_or_note] = note
21
31
  end
22
-
32
+
23
33
  opts.on('-s', '--scale SCALE_ID', 'Name of a scale to play') do |scale_id|
24
34
  options[:scale] = scale_id
25
35
  end
26
-
36
+
27
37
  opts.on('--degrees SCALE_DEGREES', 'Number of degrees of the scale to play') do |degrees|
28
38
  options[:degrees] = degrees
29
39
  end
30
-
40
+
31
41
  opts.on('-w', '--waveform WAVEFORM', 'Waveform type to use for the sound') do |waveform|
32
42
  options[:waveform] = waveform
33
43
  end
@@ -35,7 +45,7 @@ def parse_options
35
45
  opts.on('-a', '--amplitude MAX_AMPLITUDE', 'Amplitude/volume (0.0 - 1.0) to play the sound(s) at') do |amplitude|
36
46
  options[:volume] = amplitude.to_f
37
47
  end
38
-
48
+
39
49
  opts.on('-d', '--duration DURATION', 'Duration in ms to play the sound(s)') do |duration|
40
50
  options[:duration] = duration.to_i
41
51
  end
@@ -43,13 +53,13 @@ def parse_options
43
53
  opts.on('--save', 'Save the resulting WAV file in the current directory') do
44
54
  options[:save] = true
45
55
  end
46
-
47
- opts.on('--loud', 'Displays information about note(s) being played') do
48
- options[:loud] = true
56
+
57
+ opts.on('--verbose', 'Displays information about note(s) being played') do
58
+ options[:verbose] = true
49
59
  end
50
-
51
- opts.on('--notext', 'No "Feeep!" text on play') do
52
- options[:notext] = true
60
+
61
+ opts.on('--visual_cue', 'Display "Feeep!" text on play') do
62
+ options[:visual_cue] = true
53
63
  end
54
64
 
55
65
  opts.on('-v', '--version', 'Display version number and exit') do
@@ -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.29'
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', '~> 2.0'
27
+ spec.add_development_dependency 'rake', '~> 12.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.0'
29
+ spec.add_development_dependency 'rubocop', '~> 0.52.1'
30
+ end
@@ -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
@@ -27,18 +27,18 @@ module Feep
27
27
  :volume => options[:volume],
28
28
  :duration => options[:duration],
29
29
  :save => options[:save],
30
- :loud => options[:loud]
30
+ :verbose => options[:verbose]
31
31
  }
32
32
 
33
33
  # play number of degrees of scale supplied or one octave by default
34
34
  degrees = options[:degrees] || steps.length
35
35
 
36
- if options[:loud]
36
+ if options[:verbose]
37
37
  puts "Playing a #{options[:scale]} scale..."
38
38
  end
39
39
 
40
40
  1.upto(degrees.to_i) {|deg|
41
- if options[:loud]
41
+ if options[:verbose]
42
42
  puts "note: #{NOTE_FREQ.key(freq)}, freq: #{freq}"
43
43
  end
44
44
 
@@ -7,22 +7,22 @@ module Feep
7
7
 
8
8
  # main function that creates, plays, and removes note
9
9
  def play_note(frequency, output_filename, samples_to_write, options)
10
- if options[:loud]
10
+ if options[:verbose]
11
11
  puts 'Playing note'
12
12
  puts " frequency: #{frequency.to_f.abs}"
13
13
  puts " midi: #{Utils.freq_to_midi(frequency)}"
14
14
  puts " duration: #{options[:duration]}"
15
15
  end
16
16
  SoundFile.new.create_sound(frequency, samples_to_write, output_filename, options)
17
- play_wav_file(output_filename, options[:duration], options[:notext])
17
+ play_wav_file(output_filename, options[:duration], options[:visual_cue])
18
18
  remove_sound(output_filename, options)
19
19
  end
20
20
 
21
21
  # use command line app to play wav file
22
- def play_wav_file(file, duration, notext)
22
+ def play_wav_file(file, duration, visual_cue)
23
23
  if OS.windows?
24
24
  if command_exists?(SNDPLAYER_WIN)
25
- display_text_beep(duration) unless notext
25
+ display_text_beep(duration) if visual_cue
26
26
  system("#{SNDPLAYER_WIN} #{file}")
27
27
  else
28
28
  puts "couldn't find #{SNDPLAYER_WIN}"
@@ -31,7 +31,7 @@ module Feep
31
31
 
32
32
  if OS.mac? || OS.linux?
33
33
  if command_exists?(SNDPLAYER_UNIX)
34
- display_text_beep(duration) unless notext
34
+ display_text_beep(duration) if visual_cue
35
35
  system("#{SNDPLAYER_UNIX} #{file}")
36
36
  else
37
37
  puts "couldn't find #{SNDPLAYER_UNIX}"
@@ -50,7 +50,7 @@ module Feep
50
50
  puts 'ep!'
51
51
  end
52
52
 
53
- # removes the sound, unless marked to save,
53
+ # removes the sound, unless marked to save,
54
54
  # and optionally display info about file
55
55
  def remove_sound(file, options)
56
56
  unless options[:save]
@@ -60,7 +60,7 @@ module Feep
60
60
  system("rm #{file}")
61
61
  end
62
62
  else
63
- if options[:loud]
63
+ if options[:verbose]
64
64
  info = WaveFile::Reader.info(file)
65
65
  duration = info.duration
66
66
  formatted_duration = duration.minutes.to_s.rjust(2, '0') << ':' <<
@@ -1,3 +1,3 @@
1
- module Feep
2
- VERSION = '0.1.2'
3
- end
1
+ module Feep
2
+ VERSION = '0.2.2'
3
+ end
@@ -10,7 +10,7 @@ describe Feep do
10
10
  :volume => 0.5,
11
11
  :duration => 100,
12
12
  :save => false,
13
- :loud => false,
13
+ :verbose => false,
14
14
  :usage => nil
15
15
  }
16
16
 
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.1.2
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Chadwick
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-25 00:00:00.000000000 Z
11
+ date: 2020-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wavefile
@@ -64,28 +64,28 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.8'
67
+ version: '2.0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '1.8'
74
+ version: '2.0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rake
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '10.0'
81
+ version: '12.0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '10.0'
88
+ version: '12.0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -106,14 +106,14 @@ dependencies:
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.29'
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: '0.29'
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
@@ -143,7 +143,7 @@ homepage: http://rubygems.org/gems/feep
143
143
  licenses:
144
144
  - MIT
145
145
  metadata: {}
146
- post_install_message:
146
+ post_install_message:
147
147
  rdoc_options: []
148
148
  require_paths:
149
149
  - lib
@@ -158,9 +158,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  requirements: []
161
- rubyforge_project:
162
- rubygems_version: 2.4.8
163
- signing_key:
161
+ rubygems_version: 3.1.4
162
+ signing_key:
164
163
  specification_version: 4
165
164
  summary: Make your computer feep with Ruby
166
165
  test_files: