| Switch to marshal for interchange, use git postgres_ext - warvox - VoIP based w… | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| commit 6e553f120bad0e80842f90bf69dc9edcda1473f2 | |
| parent 52ae1909d535f2886e702c0a4d14dc497ae69c8b | |
| Author: HD Moore <[email protected]> | |
| Date: Thu, 27 Dec 2012 01:14:43 -0600 | |
| Switch to marshal for interchange, use git postgres_ext | |
| Diffstat: | |
| M Gemfile | 3 ++- | |
| M Gemfile.lock | 15 ++++++++++----- | |
| M app/models/dial_result.rb | 1 - | |
| M app/views/analyze/view.html.erb | 2 +- | |
| M bin/analyze_result.rb | 15 ++++++++------- | |
| M config/initializers/warvox.rb | 3 +++ | |
| M lib/warvox/audio/raw.rb | 15 +++++++++------ | |
| M lib/warvox/jobs/analysis.rb | 14 +++++--------- | |
| M lib/warvox/jobs/dialer.rb | 1 - | |
| 9 files changed, 38 insertions(+), 31 deletions(-) | |
| --- | |
| diff --git a/Gemfile b/Gemfile | |
| @@ -6,7 +6,8 @@ gem 'rails', '3.2.8' | |
| gem 'pg', '0.11' | |
| # Integer array support (until Rails 4.0 is released) | |
| -gem 'postgres_ext' | |
| +# Git version required to work around this bug: https://github.com/dockyard/po… | |
| +gem 'postgres_ext', :git => 'git://github.com/dockyard/postgres_ext.git' | |
| gem 'kissfft' | |
| gem 'librex' | |
| diff --git a/Gemfile.lock b/Gemfile.lock | |
| @@ -1,3 +1,11 @@ | |
| +GIT | |
| + remote: git://github.com/dockyard/postgres_ext.git | |
| + revision: a0ac550ecc63f5413b31e808798443a7b7b250eb | |
| + specs: | |
| + postgres_ext (0.1.0) | |
| + activerecord (~> 3.2.0) | |
| + pg_array_parser (~> 0.0.8) | |
| + | |
| GEM | |
| remote: http://rubygems.org/ | |
| specs: | |
| @@ -59,11 +67,8 @@ GEM | |
| mime-types (1.19) | |
| multi_json (1.5.0) | |
| pg (0.11.0) | |
| - pg_array_parser (0.0.1) | |
| + pg_array_parser (0.0.8) | |
| polyglot (0.3.3) | |
| - postgres_ext (0.0.6) | |
| - activerecord (~> 3.2.0) | |
| - pg_array_parser (~> 0.0.1) | |
| rack (1.4.1) | |
| rack-cache (1.2) | |
| rack (>= 0.4) | |
| @@ -123,7 +128,7 @@ DEPENDENCIES | |
| kissfft | |
| librex | |
| pg (= 0.11) | |
| - postgres_ext | |
| + postgres_ext! | |
| rails (= 3.2.8) | |
| sass-rails (~> 3.2.3) | |
| thin | |
| diff --git a/app/models/dial_result.rb b/app/models/dial_result.rb | |
| @@ -21,5 +21,4 @@ class DialResult < ActiveRecord::Base | |
| "dial_results.id != \'#{id}\' " + | |
| 'ORDER BY matchscore DESC' | |
| } | |
| - | |
| end | |
| diff --git a/app/views/analyze/view.html.erb b/app/views/analyze/view.html.erb | |
| @@ -50,7 +50,7 @@ | |
| %> | |
| <div style="color: #<%= col%>;"><%=h name%> (<%=h sid … | |
| <% end %> | |
| - <% if dial_result.fprint and dial_result.fprint.to_s != '{}' %> | |
| + <% if dial_result.fprint and dial_result.fprint.length > 0 %> | |
| <a href="<%=view_matches_path(dial_result.id)%>">View … | |
| <% end %> | |
| </td> | |
| diff --git a/bin/analyze_result.rb b/bin/analyze_result.rb | |
| @@ -3,14 +3,13 @@ | |
| # | |
| # Load the library path | |
| -# | |
| +# | |
| base = __FILE__ | |
| while File.symlink?(base) | |
| base = File.expand_path(File.readlink(base), File.dirname(base)) | |
| end | |
| $:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib')) | |
| require 'warvox' | |
| -require 'yaml' | |
| # | |
| # Script | |
| @@ -20,9 +19,11 @@ inp = ARGV.shift || exit(0) | |
| $0 = "warvox(analyzer): #{inp}" | |
| $stdout.write( | |
| - WarVOX::Jobs::CallAnalysis.new( | |
| - 0 | |
| - ).analyze_call( | |
| - inp | |
| - ).to_yaml | |
| + Marshal.dump( | |
| + WarVOX::Jobs::CallAnalysis.new( | |
| + 0 | |
| + ).analyze_call( | |
| + inp | |
| + ) | |
| + ) | |
| ) | |
| diff --git a/config/initializers/warvox.rb b/config/initializers/warvox.rb | |
| @@ -0,0 +1,3 @@ | |
| + | |
| +# Extend PostgreSQL | |
| +require 'postgres_ext' | |
| diff --git a/lib/warvox/audio/raw.rb b/lib/warvox/audio/raw.rb | |
| @@ -54,15 +54,15 @@ class Raw | |
| (s > 0x7fff) ? (0x10000 - s) * -1 : s | |
| end | |
| end | |
| - | |
| + | |
| def to_raw | |
| self.samples.pack("v*") | |
| end | |
| - | |
| + | |
| def to_wav | |
| raw = self.to_raw | |
| - wav = | |
| - "RIFF" + | |
| + wav = | |
| + "RIFF" + | |
| [raw.length + 36].pack("V") + | |
| "WAVE" + | |
| "fmt " + | |
| @@ -70,7 +70,7 @@ class Raw | |
| "data" + | |
| [ raw.length ].pack("V") + | |
| raw | |
| - end | |
| + end | |
| def to_flow(opts={}) | |
| @@ -238,6 +238,10 @@ class Raw | |
| "{" + to_freq_sig(opts).sort.join(",") + "}" | |
| end | |
| + def to_freq_sig_arr(opts={}) | |
| + to_freq_sig(opts) | |
| + end | |
| + | |
| def self.fft_to_freq_sig(ffts, freq_cnt) | |
| sig = [] | |
| ffts.each do |s| | |
| @@ -323,4 +327,3 @@ class Raw | |
| end | |
| end | |
| end | |
| - | |
| diff --git a/lib/warvox/jobs/analysis.rb b/lib/warvox/jobs/analysis.rb | |
| @@ -4,7 +4,6 @@ class Analysis < Base | |
| require 'fileutils' | |
| require 'tempfile' | |
| - require 'yaml' | |
| require 'open3' | |
| @@kissfft_loaded = false | |
| @@ -52,6 +51,7 @@ class Analysis < Base | |
| end | |
| def start | |
| + | |
| @status = 'active' | |
| begin | |
| @@ -59,6 +59,7 @@ class Analysis < Base | |
| model = get_job | |
| model.processed = true | |
| + | |
| db_save(model) | |
| stop() | |
| @@ -104,8 +105,6 @@ class Analysis < Base | |
| def run_analyze_call(r) | |
| $stderr.puts "DEBUG: Processing audio for #{r.number}..." | |
| - | |
| - | |
| bin = File.join(WarVOX::Base, 'bin', 'analyze_result.rb') | |
| tmp = Tempfile.new("Analysis") | |
| begin | |
| @@ -115,16 +114,13 @@ class Analysis < Base | |
| end | |
| pfd = IO.popen("#{bin} '#{tmp.path}'") | |
| - out = YAML.load(pfd.read) | |
| + out = Marshal.load(pfd.read) | |
| pfd.close | |
| return if not out | |
| out.each_key do |k| | |
| - setter = "#{k.to_s}=" | |
| - if(r.respond_to?(setter)) | |
| - r.send(setter, out[k]) | |
| - end | |
| + r[k] = out[k] | |
| end | |
| r.processed_at = Time.now | |
| @@ -155,7 +151,7 @@ class Analysis < Base | |
| raw = WarVOX::Audio::Raw.from_file(input) | |
| fft = KissFFT.fftr(8192, 8000, 1, raw.samples) | |
| - freq = raw.to_freq_sig_txt() | |
| + freq = raw.to_freq_sig_arr() | |
| # Save the signature data | |
| res[:fprint] = freq | |
| diff --git a/lib/warvox/jobs/dialer.rb b/lib/warvox/jobs/dialer.rb | |
| @@ -216,4 +216,3 @@ class Dialer < Base | |
| end | |
| end | |
| end | |
| - |