| Some cli tools - warvox - VoIP based wardialing tool, forked from rapid7/warvox. | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| commit dd99a0b18c1af6a006281f0ad3d5e70cb78bbe7a | |
| parent d997b94f7515ada2a46c18eb3247edb9facf51fc | |
| Author: HD Moore <[email protected]> | |
| Date: Sun, 7 Aug 2011 00:34:17 +0000 | |
| Some cli tools | |
| Diffstat: | |
| A bin/audio_raw_to_fprint.rb | 38 +++++++++++++++++++++++++++++… | |
| A bin/audio_raw_to_wav.rb | 38 +++++++++++++++++++++++++++++… | |
| A bin/audio_trim.rb | 61 +++++++++++++++++++++++++++++… | |
| A bin/export_audio.rb | 69 ++++++++++++++++++++++++++++++ | |
| A bin/identify_matches.rb | 79 +++++++++++++++++++++++++++++… | |
| 5 files changed, 285 insertions(+), 0 deletions(-) | |
| --- | |
| diff --git a/bin/audio_raw_to_fprint.rb b/bin/audio_raw_to_fprint.rb | |
| @@ -0,0 +1,38 @@ | |
| +#!/usr/bin/env ruby | |
| +################### | |
| + | |
| +# | |
| +# 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' | |
| + | |
| +def usage | |
| + $stderr.puts "Usage: #{$0} <input.raw> <output.txt>" | |
| + exit | |
| +end | |
| + | |
| +# | |
| +# Script | |
| +# | |
| + | |
| +inp = ARGV.shift | |
| +out = ARGV.shift | |
| + | |
| +if (inp and inp == "-h") or not inp | |
| + usage() | |
| +end | |
| + | |
| +raw = WarVOX::Audio::Raw.from_file(inp) | |
| +if out | |
| + ::File.open(out, "wb") do |fd| | |
| + fd.write( "{" + raw.to_freq_sig.map{|x| x.to_s}.join(",") + "}… | |
| + end | |
| +else | |
| + $stdout.write( "{" + raw.to_freq_sig.map{|x| x.to_s}.join(",") + "}" ) | |
| +end | |
| diff --git a/bin/audio_raw_to_wav.rb b/bin/audio_raw_to_wav.rb | |
| @@ -0,0 +1,38 @@ | |
| +#!/usr/bin/env ruby | |
| +################### | |
| + | |
| +# | |
| +# 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' | |
| + | |
| +def usage | |
| + $stderr.puts "Usage: #{$0} <input.raw> <output.wav>" | |
| + exit | |
| +end | |
| + | |
| +# | |
| +# Script | |
| +# | |
| + | |
| +inp = ARGV.shift | |
| +out = ARGV.shift | |
| + | |
| +if (inp and inp == "-h") or not inp | |
| + usage() | |
| +end | |
| + | |
| +raw = WarVOX::Audio::Raw.from_file(inp) | |
| +if out | |
| + ::File.open(out, "wb") do |fd| | |
| + fd.write(raw.to_wav) | |
| + end | |
| +else | |
| + $stdout.write(raw.to_wav) | |
| +end | |
| diff --git a/bin/audio_trim.rb b/bin/audio_trim.rb | |
| @@ -0,0 +1,61 @@ | |
| +#!/usr/bin/env ruby | |
| +################### | |
| + | |
| +# | |
| +# 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' | |
| + | |
| +def usage | |
| + $stderr.puts "Usage: #{$0} [offset] [length] <input.raw> <output.raw>" | |
| + exit | |
| +end | |
| + | |
| +# | |
| +# Script | |
| +# | |
| + | |
| +off = ARGV.shift | |
| +len = ARGV.shift | |
| +inp = ARGV.shift | |
| +out = ARGV.shift | |
| + | |
| +if (off and off == "-h") or not off | |
| + usage() | |
| +end | |
| + | |
| +buf = '' | |
| +ifd = nil | |
| + | |
| +if inp | |
| + ifd = ::File.open(inp, "rb") | |
| +else | |
| + $stdin.binmode | |
| + ifd = $stdin | |
| +end | |
| + | |
| +ofd = nil | |
| + | |
| +if out | |
| + ofd = ::File.open(out, "wb") | |
| +else | |
| + $stdout.binmode | |
| + ofd = $stdout | |
| +end | |
| + | |
| + | |
| +buf = ifd.read | |
| +off = off.to_i * 16000 | |
| +len = (len.to_i > 0) ? len.to_i : (buf.length / 16000).to_i | |
| + | |
| +ofd.write( buf[off, len * 16000] ) | |
| +exit(0) | |
| + | |
| + | |
| + | |
| diff --git a/bin/export_audio.rb b/bin/export_audio.rb | |
| @@ -0,0 +1,69 @@ | |
| +#!/usr/bin/env ruby | |
| +################### | |
| + | |
| +# | |
| +# 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 'fileutils' | |
| + | |
| + | |
| +ENV['RAILS_ENV'] ||= 'production' | |
| + | |
| +$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'web')) | |
| +require 'config/boot' | |
| +require 'config/environment' | |
| + | |
| +def usage | |
| + $stderr.puts "Usage: #{$0} [Output Dir] [Job ID] <Type>" | |
| + exit | |
| +end | |
| + | |
| +# | |
| +# Script | |
| +# | |
| + | |
| +dir = ARGV.shift | |
| +job = ARGV.shift | |
| +typ = ARGV.shift | |
| + | |
| +if(job and job == "-h") | |
| + usage() | |
| +end | |
| + | |
| +if(not job) | |
| + $stderr.puts "Listing all available jobs" | |
| + $stderr.puts "==========================" | |
| + DialJob.find(:all).each do |j| | |
| + puts "#{j.id}\t#{j.started_at} --> #{j.completed_at}" | |
| + end | |
| + exit | |
| +end | |
| + | |
| + | |
| +::FileUtils.mkdir_p(dir) | |
| + | |
| +begin | |
| + cnt = 0 | |
| + job = DialJob.find(job.to_i) | |
| + job.dial_results.each do |r| | |
| + next if not r.number | |
| + next if r.audio.to_s.length == 0 | |
| + out = ::File.join(dir, "#{r.number}.raw") | |
| + ::File.open(out, "wb") do |fd| | |
| + fd.write( r.audio ) | |
| + end | |
| + cnt += 1 | |
| + end | |
| + $stderr.puts "Wrote #{cnt} audio files to #{dir}" | |
| +rescue ActiveRecord::RecordNotFound | |
| + $stderr.puts "Job not found" | |
| + exit | |
| +end | |
| + | |
| diff --git a/bin/identify_matches.rb b/bin/identify_matches.rb | |
| @@ -0,0 +1,79 @@ | |
| +#!/usr/bin/env ruby | |
| +################### | |
| + | |
| +# | |
| +# 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' | |
| + | |
| +ENV['RAILS_ENV'] ||= 'production' | |
| + | |
| +$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'web')) | |
| +require 'config/boot' | |
| +require 'config/environment' | |
| + | |
| +def usage | |
| + $stderr.puts "Usage: #{$0} [job|all] <fprint>" | |
| + exit | |
| +end | |
| + | |
| +# | |
| +# Script | |
| +# | |
| + | |
| +job = ARGV.shift | |
| +fp = ARGV.shift | |
| + | |
| +if(job and job == "-h") | |
| + usage() | |
| +end | |
| + | |
| +if(not job) | |
| + $stderr.puts "Listing all available jobs" | |
| + $stderr.puts "==========================" | |
| + DialJob.find(:all).each do |j| | |
| + puts "#{j.id}\t#{j.started_at} --> #{j.completed_at}" | |
| + end | |
| + exit | |
| +end | |
| + | |
| +fp = $stdin.read.strip if fp == "-" | |
| +job = nil if job.downcase == "all" | |
| + | |
| +if not fp | |
| + usage() | |
| +end | |
| + | |
| + | |
| +begin | |
| + res = nil | |
| + job = DialJob.find(job.to_i) if job | |
| + if job | |
| + res = DialResult.find_by_sql "SELECT dial_results.*, " + | |
| + " (( icount('#{fp}'::int[] & dial_results.fprint::int[… | |
| + "FROM dial_results " + | |
| + "WHERE " + | |
| + " icount(dial_results.fprint) > 0 AND " + | |
| + " dial_results.dial_job_id = '#{job.id}' " + | |
| + "ORDER BY matchscore DESC" | |
| + else | |
| + res = DialResult.find_by_sql "SELECT dial_results.*, " + | |
| + " (( icount('#{fp}'::int[] & dial_results.fprint::int[… | |
| + "FROM dial_results " + | |
| + "WHERE " + | |
| + " icount(dial_results.fprint) > 0 " + | |
| + "ORDER BY matchscore DESC" | |
| + end | |
| + res.each do |r| | |
| + $stdout.puts "#{"%.2f" % r.matchscore}\t#{r.dial_job_id}\t#{r.… | |
| + end | |
| +rescue ActiveRecord::RecordNotFound | |
| + $stderr.puts "Job not found" | |
| + exit | |
| +end |