48 lines
896 B
Ruby
48 lines
896 B
Ruby
|
#!/usr/bin/ruby
|
||
|
|
||
|
base = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
|
||
|
$:.unshift(File.join(File.dirname(base)))
|
||
|
|
||
|
require 'test/unit'
|
||
|
require 'kissfft'
|
||
|
require 'pp'
|
||
|
|
||
|
#
|
||
|
# Simple unit test
|
||
|
#
|
||
|
|
||
|
class KissFFT::UnitTest < Test::Unit::TestCase
|
||
|
def test_version
|
||
|
assert_equal(String, KissFFT.version.class)
|
||
|
puts "KissFFT version: #{KissFFT.version}"
|
||
|
end
|
||
|
def test_fftr
|
||
|
data = File.read('sample.data').unpack('s*')
|
||
|
|
||
|
min = 1
|
||
|
res = KissFFT.fftr(8192, 8000, 1, data)
|
||
|
|
||
|
tones = {}
|
||
|
res.each do |x|
|
||
|
rank = x.sort{|a,b| a[1].to_i <=> b[1].to_i }.reverse
|
||
|
rank[0..10].each do |t|
|
||
|
f = t[0].round
|
||
|
p = t[1].round
|
||
|
next if f == 0
|
||
|
next if p < min
|
||
|
tones[ f ] ||= []
|
||
|
tones[ f ] << t
|
||
|
end
|
||
|
end
|
||
|
|
||
|
tones.keys.sort.each do |t|
|
||
|
next if tones[t].length < 2
|
||
|
puts "#{t}hz"
|
||
|
tones[t].each do |x|
|
||
|
puts "\t#{x[0]}hz @ #{x[1]}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|