spectrum-analyzer 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +6 -0
- data/VERSION +1 -1
- data/lib/spectrum-analyzer.rb +35 -0
- data/lib/spectrum-analyzer/clients/analyze.rb +5 -0
- data/lib/spectrum-analyzer/clients/generator.rb +139 -0
- data/lib/spectrum-analyzer/config.rb +19 -0
- data/lib/spectrum-analyzer/criteria/domain.rb +9 -0
- data/lib/spectrum-analyzer/criteria/file.rb +13 -0
- data/lib/spectrum-analyzer/criteria/spectrum.rb +9 -0
- data/spec/analyze.wav +0 -0
- data/spectrum-analyzer.gemspec +77 -0
- metadata +41 -20
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTlmMzUwYjdkNDU3NzYzZDc3MThmYzZkMmZmNDY0ZWE4YzIxY2ZlZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NzgzZjUxNWE2MTBkM2ZkNjA3NDljZTQ3OTM2MWJlMzIxYWFlNDEwNA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDI1YzkyMjE5OWMwOTNjZTBmMDg1MmE4ZjE1OGVhYzkyNTVlMTRiOTA2NGU4
|
10
|
+
MzJkYzIzNjU5OThjOWY5ODQ2NDE0N2U1MTQzZWNjNmJkNjRjMjYwZmNlYmI0
|
11
|
+
MzExMTgyNzY2MmUyNmRjNDdkYTVhMWRjNjFkOTRmMGVlOTRhYTY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjZhNDY4MWQ3NjhmMjM1ZThmOTg1YTI2ZGRiYWU0ZjA4YmE4OWI3OTRkOTJj
|
14
|
+
NDc1ZDNkOTBmNmYzMGY4OTljNjE4MmVkMmUzMDIwNzgzNDU5Mjk3MGYwYTNl
|
15
|
+
OGFhZTIyZWZiYmMzYWMxOWRhZTRhNDNlZTA3NTE1YTQyNDBmMDM=
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,6 +7,8 @@ GEM
|
|
7
7
|
docile (1.1.0)
|
8
8
|
faraday (0.8.8)
|
9
9
|
multipart-post (~> 1.2.0)
|
10
|
+
fftw3 (0.3)
|
11
|
+
narray
|
10
12
|
git (1.2.6)
|
11
13
|
github_api (0.10.1)
|
12
14
|
addressable
|
@@ -34,6 +36,7 @@ GEM
|
|
34
36
|
multi_json (1.8.2)
|
35
37
|
multi_xml (0.5.5)
|
36
38
|
multipart-post (1.2.0)
|
39
|
+
narray (0.6.0.8)
|
37
40
|
nokogiri (1.5.10)
|
38
41
|
oauth2 (0.9.2)
|
39
42
|
faraday (~> 0.8)
|
@@ -54,6 +57,7 @@ GEM
|
|
54
57
|
rspec-expectations (2.8.0)
|
55
58
|
diff-lcs (~> 1.1.2)
|
56
59
|
rspec-mocks (2.8.0)
|
60
|
+
ruby-audio (1.6.1)
|
57
61
|
simplecov (0.8.1)
|
58
62
|
docile (~> 1.1.0)
|
59
63
|
lockfile (>= 2.1.0)
|
@@ -66,7 +70,9 @@ PLATFORMS
|
|
66
70
|
|
67
71
|
DEPENDENCIES
|
68
72
|
bundler (~> 1.0)
|
73
|
+
fftw3
|
69
74
|
jeweler (~> 1.8.7)
|
70
75
|
rdoc (~> 3.12)
|
71
76
|
rspec (~> 2.8.0)
|
77
|
+
ruby-audio
|
72
78
|
simplecov
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/spectrum-analyzer.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'ruby-audio'
|
2
|
+
require 'fftw3'
|
3
|
+
|
4
|
+
require_relative '../lib/spectrum-analyzer/config'
|
5
|
+
|
6
|
+
Dir[File.dirname(__FILE__) + '/spectrum-analyzer/clients/*.rb'].each {| file| load file }
|
7
|
+
Dir[File.dirname(__FILE__) + '/spectrum-analyzer/criteria/*.rb'].each {| file| load file }
|
8
|
+
|
9
|
+
module SpectrumAnalyzer
|
10
|
+
|
11
|
+
def self.configuration
|
12
|
+
@configuration ||= SpectrumAnalyzer::Config.new()
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.generate
|
16
|
+
SpectrumAnalyzer::Generator.new()
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.analyze
|
20
|
+
SpectrumAnalyzer::Analyze
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.quick_analyze
|
24
|
+
SpectrumAnalyzer::Generator.quick_analyze
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.file
|
28
|
+
@file ||= SpectrumAnalyzer::File.new()
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.spectrum
|
32
|
+
@spectrum ||= SpectrumAnalyzer::Spectrum.new()
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module SpectrumAnalyzer
|
2
|
+
class Generator
|
3
|
+
def initialize
|
4
|
+
@config = SpectrumAnalyzer.configuration
|
5
|
+
@file = build_file_info
|
6
|
+
@spectrum = SpectrumAnalyzer.spectrum
|
7
|
+
end
|
8
|
+
|
9
|
+
def set_file(file)
|
10
|
+
@file = file
|
11
|
+
end
|
12
|
+
|
13
|
+
def quick_analyze
|
14
|
+
#For each FFT window built
|
15
|
+
#check for hit
|
16
|
+
#return true if found
|
17
|
+
#return false
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_spectrum
|
21
|
+
generate_spectrum()
|
22
|
+
analyze_spectrum()
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
|
28
|
+
def generate_spectrum
|
29
|
+
#For each FFT window built
|
30
|
+
#add FFT window to spectrum class
|
31
|
+
begin
|
32
|
+
buffer = RubyAudio::Buffer.float(@config.window_size)
|
33
|
+
RubyAudio::Sound.open(@config.file_name) do |snd|
|
34
|
+
while snd.read(buffer) != 0
|
35
|
+
fft_slice = generate_domain(buffer)
|
36
|
+
@spectrum.domains.push (SpectrumAnalyzer::Domain.new(fft_slice))
|
37
|
+
#i=0
|
38
|
+
#fft_slice.each { |x| spectrum[i] += x.magnitude; i+=1}
|
39
|
+
#
|
40
|
+
#spectrum_array[iterations] = fft_slice
|
41
|
+
#i = 0
|
42
|
+
#spectrum_array[iterations].each { |x| spectrum_array[iterations][i] = x.magnitude; i+=1}
|
43
|
+
#iterations += 1
|
44
|
+
#
|
45
|
+
#ping = analyze_for_hit(fft_slice, iterations - 1)
|
46
|
+
#return ping if ping
|
47
|
+
#hits += 1 if ping
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
rescue => err
|
52
|
+
p "error reading audio file: " + err.to_s
|
53
|
+
exit
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def generate_domain(buffer)
|
58
|
+
wave = Array.new()
|
59
|
+
windowed_array = apply_window(buffer.to_a, windows[@config.window_function])
|
60
|
+
wave.concat(windowed_array)
|
61
|
+
na = NArray.to_na(windowed_array)
|
62
|
+
FFTW3.fft(na).to_a[0, @config.window_size/2]
|
63
|
+
end
|
64
|
+
|
65
|
+
def analyze_spectrum
|
66
|
+
#for each FFT window in spectrum class
|
67
|
+
#determine if window contains hit
|
68
|
+
#apply hit bool to that fft object
|
69
|
+
#sum all FFT windows in spectrum to create overall freq spectrum
|
70
|
+
#return spectrum class
|
71
|
+
end
|
72
|
+
|
73
|
+
def build_file_info
|
74
|
+
file = SpectrumAnalyzer::File.new(@config.file_name)
|
75
|
+
file.sample_rate = RubyAudio::Sound.open(file.name).info.samplerate
|
76
|
+
file
|
77
|
+
end
|
78
|
+
|
79
|
+
def windows
|
80
|
+
{
|
81
|
+
:hanning => hanning(@config.window_size),
|
82
|
+
:rectangle => rectangle(@config.window_size)
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
def gen_fft
|
87
|
+
|
88
|
+
|
89
|
+
#p hits
|
90
|
+
return false
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
def apply_window(buffer, window_type)
|
96
|
+
windowed_array = Array.new()
|
97
|
+
i=0
|
98
|
+
buffer.each { |x| windowed_array[i] = x * window_type[i]; i+=1}
|
99
|
+
end
|
100
|
+
|
101
|
+
def hanning (window_size)
|
102
|
+
hannified_array = Array.new
|
103
|
+
i=0
|
104
|
+
(0..window_size).each { |x| hannified_array[i] = 0.5 - 0.5 * Math.cos(2 * Math::PI * i / window_size) ; i+=1}
|
105
|
+
|
106
|
+
hannified_array
|
107
|
+
end
|
108
|
+
|
109
|
+
def rectangle (window_size)
|
110
|
+
Array.new(window_size, 1)
|
111
|
+
end
|
112
|
+
|
113
|
+
def analysis_array
|
114
|
+
@config.analysis_array
|
115
|
+
end
|
116
|
+
|
117
|
+
def analyze_for_hit(fft_array, index)
|
118
|
+
ranges = analysis_array
|
119
|
+
|
120
|
+
j=0
|
121
|
+
hit = Array.new()
|
122
|
+
#p "INDEX: #{index}"
|
123
|
+
ranges.each do |x|
|
124
|
+
sum_total = 0
|
125
|
+
for i in x[:b_index]..x[:t_index]
|
126
|
+
sum_total += fft_array[i] if !fft_array[i].nil?
|
127
|
+
end
|
128
|
+
average = sum_total / (x[:t_index] - x[:b_index])
|
129
|
+
hit[j] = average > x[:min] and average < x[:max]
|
130
|
+
j+=1
|
131
|
+
end
|
132
|
+
ping = !hit.include?(false)
|
133
|
+
return ping
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SpectrumAnalyzer
|
2
|
+
class Config
|
3
|
+
attr_accessor :file_name, :window_function, :window_size, :analysis_range
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@window_size = 512
|
7
|
+
@window_function = :hanning
|
8
|
+
@analysis_array = [{ :b_index => 27, :t_index => 47, :min => 1, :max => 2}, #Low area
|
9
|
+
{ :b_index => 58, :t_index => 64, :min => 2.5, :max => 6.5}, #High peak
|
10
|
+
{ :b_index => 70, :t_index => 74, :min => 2.0, :max => 4.2 }, #Mid peak
|
11
|
+
{ :b_index => 82, :t_index => 109, :min => 0.8, :max => 2}] #Low area
|
12
|
+
@file_name = "spec/analyze.wav"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
end
|
data/spec/analyze.wav
ADDED
Binary file
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: spectrum-analyzer 0.1.1 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "spectrum-analyzer"
|
9
|
+
s.version = "0.1.1"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ["Justin Roberts"]
|
13
|
+
s.date = "2013-11-27"
|
14
|
+
s.description = "Analyze a wav file for specific frequency signatures"
|
15
|
+
s.email = "justin.roberts@careerbuilder.com"
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE.txt",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
".rspec",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"LICENSE.txt",
|
26
|
+
"README.rdoc",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"lib/spectrum-analyzer.rb",
|
30
|
+
"lib/spectrum-analyzer/clients/analyze.rb",
|
31
|
+
"lib/spectrum-analyzer/clients/generator.rb",
|
32
|
+
"lib/spectrum-analyzer/config.rb",
|
33
|
+
"lib/spectrum-analyzer/criteria/domain.rb",
|
34
|
+
"lib/spectrum-analyzer/criteria/file.rb",
|
35
|
+
"lib/spectrum-analyzer/criteria/spectrum.rb",
|
36
|
+
"spec/analyze.wav",
|
37
|
+
"spec/spec_helper.rb",
|
38
|
+
"spec/spectrum-analyzer_spec.rb",
|
39
|
+
"spectrum-analyzer.gemspec"
|
40
|
+
]
|
41
|
+
s.homepage = "http://github.com/jusroberts/spectrum-analyzer"
|
42
|
+
s.licenses = ["MIT"]
|
43
|
+
s.require_paths = ["lib"]
|
44
|
+
s.rubygems_version = "2.1.11"
|
45
|
+
s.summary = "Analyze a wav file for specific frequency signatures"
|
46
|
+
|
47
|
+
if s.respond_to? :specification_version then
|
48
|
+
s.specification_version = 4
|
49
|
+
|
50
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
52
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
53
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
54
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.7"])
|
55
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
56
|
+
s.add_development_dependency(%q<ruby-audio>, [">= 0"])
|
57
|
+
s.add_development_dependency(%q<fftw3>, [">= 0"])
|
58
|
+
else
|
59
|
+
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
60
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
61
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
62
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
|
63
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
64
|
+
s.add_dependency(%q<ruby-audio>, [">= 0"])
|
65
|
+
s.add_dependency(%q<fftw3>, [">= 0"])
|
66
|
+
end
|
67
|
+
else
|
68
|
+
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
69
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
70
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
71
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
|
72
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
73
|
+
s.add_dependency(%q<ruby-audio>, [">= 0"])
|
74
|
+
s.add_dependency(%q<fftw3>, [">= 0"])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spectrum-analyzer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Justin Roberts
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rdoc
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: jeweler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,34 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: ruby-audio
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fftw3
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
107
|
requirements:
|
91
108
|
- - ! '>='
|
92
109
|
- !ruby/object:Gem::Version
|
@@ -108,34 +125,38 @@ files:
|
|
108
125
|
- Rakefile
|
109
126
|
- VERSION
|
110
127
|
- lib/spectrum-analyzer.rb
|
128
|
+
- lib/spectrum-analyzer/clients/analyze.rb
|
129
|
+
- lib/spectrum-analyzer/clients/generator.rb
|
130
|
+
- lib/spectrum-analyzer/config.rb
|
131
|
+
- lib/spectrum-analyzer/criteria/domain.rb
|
132
|
+
- lib/spectrum-analyzer/criteria/file.rb
|
133
|
+
- lib/spectrum-analyzer/criteria/spectrum.rb
|
134
|
+
- spec/analyze.wav
|
111
135
|
- spec/spec_helper.rb
|
112
136
|
- spec/spectrum-analyzer_spec.rb
|
137
|
+
- spectrum-analyzer.gemspec
|
113
138
|
homepage: http://github.com/jusroberts/spectrum-analyzer
|
114
139
|
licenses:
|
115
140
|
- MIT
|
141
|
+
metadata: {}
|
116
142
|
post_install_message:
|
117
143
|
rdoc_options: []
|
118
144
|
require_paths:
|
119
145
|
- lib
|
120
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
147
|
requirements:
|
123
148
|
- - ! '>='
|
124
149
|
- !ruby/object:Gem::Version
|
125
150
|
version: '0'
|
126
|
-
segments:
|
127
|
-
- 0
|
128
|
-
hash: 3408237005152452297
|
129
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
152
|
requirements:
|
132
153
|
- - ! '>='
|
133
154
|
- !ruby/object:Gem::Version
|
134
155
|
version: '0'
|
135
156
|
requirements: []
|
136
157
|
rubyforge_project:
|
137
|
-
rubygems_version: 1.
|
158
|
+
rubygems_version: 2.1.11
|
138
159
|
signing_key:
|
139
|
-
specification_version:
|
160
|
+
specification_version: 4
|
140
161
|
summary: Analyze a wav file for specific frequency signatures
|
141
162
|
test_files: []
|