spectrum-analyzer 0.1.2 → 0.1.3

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NmNhN2RmNGEzMTMwMTgyYjE2NDk4ODY4YWUxMzIwYTkxOTRlNmQ5NQ==
4
+ NGE0ZWFkNjFhMmQ3NmRkZmU4ODRlOGUwNmZlMDIwNzVkYjRlZmEwZg==
5
5
  data.tar.gz: !binary |-
6
- MjgxMzg5NzA3Mjg1YmIzYjMzMWI1ZTM3ZjdiYWYxODg1ZGRmNTE4Zg==
6
+ ZWIxZTdmZmVhOGM1Yzg2OGE3OTAwNGQyMDAxNTc4MWJjYWY3YjEyMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzU4YmYxOTVjNzg3MTU1ODA3MmQzYjk5ZTA1YzEwNDJjY2I4NjViMzgyMGVm
10
- NDYzZjE0MDhmOTQ0MzJlM2FlMGJlYzY2Njg2YzAwNTAxZTlhMTg4ZjQ1YzQy
11
- NWNmMjU2NjM2ZTA3M2UzY2Q3YjI4NjI4MWNiMWNiNjVhZTI4ZTQ=
9
+ Yzc4ODFlZDU5YzM3MTg3NzliMzc4MzQ0NzUxYTM5MDRiYTBhMGZkZDlmNDI0
10
+ YWJiZmE4NDhhN2MxYjRlNmExZDRmNmIwYTY1NTZhMzdhNzY3NGQzYzE0MjI5
11
+ M2VlNWM3ZGI3MzYxMjgxYTA4NjA1ZjAyOGMyN2E2YjcyNDIyNzU=
12
12
  data.tar.gz: !binary |-
13
- ZDBiYWIyYmYzZmViYjI3MThhMWM5NTE1OGEzYzIwNjI3MjI1NDcyMzFhYzFm
14
- NDU2ZThlMjg0MDJkOGUyMDUzZTY4ZjAxMWNkMjkxNTkyYmVlYjViMmExZDE4
15
- ZjNjNTU0M2I3Njc0YjY1Zjc1YzEzNWE5ODUxNDZmZjZhNDdjYzA=
13
+ ZmNkNzViYmNiMTk4YmQ1MmIxYTcyNDQ5NjViMzhlN2Y0MmEwMGIwOGQzYjYy
14
+ MjdmZWM4NWI0NzNlMDYxZTJkMjFmMjY0YTY3ODM5YTFiYjZjOGE5MGQzMjlk
15
+ NjYwNGJkOTFkNGQyMDA3OWZiNDYzZjNlNDEzMGJjYWZmZmIxY2M=
data/README.md CHANGED
@@ -28,7 +28,9 @@ You now have a bunch of "domains" held in the spectrum (SpectrumAnalyzer.spectru
28
28
  s = SpectrumAnalyzer.spectrum
29
29
  s.domains
30
30
  ```
31
- These domains are an array of frequencies that occur over the time slice defined by the window_size. The values are currently complex numbers, but they represent decibels of each frequency range in that window.
31
+ These domains are an array of frequencies that occur over the time slice defined by the window_size. The values are currently magnitudes of the complex numbers, and represent the amplitude of each frequency range.
32
+
33
+ Want them to be available as both complex and magnitudes? Let me know, or submit a pull request!
32
34
 
33
35
  More to come.
34
36
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -4,6 +4,7 @@ module SpectrumAnalyzer
4
4
  @config = SpectrumAnalyzer.configuration
5
5
  @file = build_file_info
6
6
  @spectrum = SpectrumAnalyzer.spectrum
7
+ @window_functions = SpectrumAnalyzer::WindowFunctions.new(@config.window_size)
7
8
  end
8
9
 
9
10
  def set_file(file)
@@ -26,25 +27,12 @@ module SpectrumAnalyzer
26
27
 
27
28
 
28
29
  def generate_spectrum
29
- #For each FFT window built
30
- #add FFT window to spectrum class
31
30
  begin
32
31
  buffer = RubyAudio::Buffer.float(@config.window_size)
33
32
  RubyAudio::Sound.open(@config.file_name) do |snd|
34
33
  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
34
+ domain = generate_domain(buffer)
35
+ @spectrum.domains.push (domain)
48
36
  end
49
37
  end
50
38
 
@@ -58,8 +46,8 @@ module SpectrumAnalyzer
58
46
  windowed_array = apply_window(buffer.to_a, windows[@config.window_function])
59
47
  na = NArray.to_na(windowed_array)
60
48
  fft_array = FFTW3.fft(na).to_a[0, @config.window_size/2]
61
- domain = Array.new()
62
- fft_array.each { |x| domain.push(x.magnitude)}
49
+ domain = SpectrumAnalyzer::Domain.new()
50
+ fft_array.each { |x| domain.raw_values.push(x); domain.values.push(x.magnitude)}
63
51
  domain
64
52
  end
65
53
 
@@ -79,8 +67,8 @@ module SpectrumAnalyzer
79
67
 
80
68
  def windows
81
69
  {
82
- :hanning => hanning(@config.window_size),
83
- :rectangle => rectangle(@config.window_size)
70
+ :hanning => @window_functions.hanning(),
71
+ :rectangle => @window_functions.rectangle()
84
72
  }
85
73
  end
86
74
 
@@ -99,18 +87,6 @@ module SpectrumAnalyzer
99
87
  buffer.each { |x| windowed_array[i] = x * window_type[i]; i+=1}
100
88
  end
101
89
 
102
- def hanning (window_size)
103
- hannified_array = Array.new
104
- i=0
105
- (0..window_size).each { |x| hannified_array[i] = 0.5 - 0.5 * Math.cos(2 * Math::PI * i / window_size) ; i+=1}
106
-
107
- hannified_array
108
- end
109
-
110
- def rectangle (window_size)
111
- Array.new(window_size, 1)
112
- end
113
-
114
90
  def analysis_array
115
91
  @config.analysis_array
116
92
  end
@@ -0,0 +1,19 @@
1
+ module SpectrumAnalyzer
2
+ class WindowFunctions
3
+ def initialize(window_size)
4
+ @window_size = window_size
5
+ end
6
+ def hanning
7
+ hannified_array = Array.new
8
+ i=0
9
+ (0..@window_size).each { |x| hannified_array[i] = 0.5 - 0.5 * Math.cos(2 * Math::PI * i / @window_size) ; i+=1}
10
+
11
+ hannified_array
12
+ end
13
+
14
+ def rectangle
15
+ Array.new(@window_size, 1)
16
+ end
17
+
18
+ end
19
+ end
@@ -1,9 +1,10 @@
1
1
  module SpectrumAnalyzer
2
2
  class Domain
3
- attr_accessor :values, :contains_frequency_range
3
+ attr_accessor :values, :raw_values, :contains_frequency_range
4
4
 
5
- def initialize(values)
6
- @values = values
5
+ def initialize()
6
+ @values = []
7
+ @raw_values = []
7
8
  end
8
9
  end
9
10
  end
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: spectrum-analyzer 0.1.2 ruby lib
5
+ # stub: spectrum-analyzer 0.1.3 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "spectrum-analyzer"
9
- s.version = "0.1.2"
9
+ s.version = "0.1.3"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Justin Roberts"]
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "lib/spectrum-analyzer.rb",
30
30
  "lib/spectrum-analyzer/clients/analyze.rb",
31
31
  "lib/spectrum-analyzer/clients/generator.rb",
32
+ "lib/spectrum-analyzer/clients/window_functions.rb",
32
33
  "lib/spectrum-analyzer/config.rb",
33
34
  "lib/spectrum-analyzer/criteria/domain.rb",
34
35
  "lib/spectrum-analyzer/criteria/file.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spectrum-analyzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Roberts
@@ -127,6 +127,7 @@ files:
127
127
  - lib/spectrum-analyzer.rb
128
128
  - lib/spectrum-analyzer/clients/analyze.rb
129
129
  - lib/spectrum-analyzer/clients/generator.rb
130
+ - lib/spectrum-analyzer/clients/window_functions.rb
130
131
  - lib/spectrum-analyzer/config.rb
131
132
  - lib/spectrum-analyzer/criteria/domain.rb
132
133
  - lib/spectrum-analyzer/criteria/file.rb