export_audio.rb - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
 (HTM) git clone git://jay.scot/warvox
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
       export_audio.rb (2061B)
       ---
            1 #!/usr/bin/env ruby
            2 ###################
            3 
            4 #
            5 # Load the library path
            6 #
            7 base = __FILE__
            8 while File.symlink?(base)
            9   base = File.expand_path(File.readlink(base), File.dirname(base))
           10 end
           11 $:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
           12 
           13 require 'warvox'
           14 require 'fileutils'
           15 require 'yaml'
           16 
           17 ENV['RAILS_ENV'] ||= 'production'
           18 $:.unshift(File.join(File.expand_path(File.dirname(base)), '..'))
           19 
           20 def usage
           21   $stderr.puts "Usage: #{$0} [Output Dir] [Project ID] <Line Type>"
           22   exit
           23 end
           24 
           25 #
           26 # Script
           27 #
           28 
           29 output     = ARGV.shift
           30 project_id = ARGV.shift
           31 line_type  = ARGV.shift
           32 
           33 if(output and output == "-h") or (! output)
           34   usage()
           35 end
           36 
           37 require 'config/boot'
           38 require 'config/environment'
           39 
           40 if project_id.to_i == 0
           41   $stderr.puts "Listing all projects"
           42   $stderr.puts "===================="
           43   Project.all.each do |j|
           44     puts "#{j.id}\t#{j.name}\t#{j.created_at}"
           45   end
           46   exit
           47 end
           48 
           49 FileUtils.mkdir_p(output)
           50 
           51 begin
           52   cond = { project_id: project_id.to_i, answered: true, busy: false }
           53   if line_type
           54     cond[:line_type] = line_type.downcase
           55   end
           56 
           57   Call.where(cond).order(number: :asc).each do |r|
           58     m = r.media
           59     if m and m.audio
           60 
           61       ::File.open(File.join(output, "#{r.number}.wav"), "wb") do |fd|
           62         if m.audio[0,4].to_s == "RIFF"
           63           fd.write(m.audio)
           64         else
           65           # Add a WAV header to the sample
           66           raw = WarVOX::Audio::Raw.new(m.audio)
           67           fd.write(raw.to_wav)
           68         end
           69       end
           70 
           71       ::File.open(File.join(output, "#{r.number}.yml"), "wb") do |fd|
           72         fd.write(r.to_yaml)
           73       end
           74 
           75       if m.mp3
           76         ::File.open(File.join(output, "#{r.number}.mp3"), "wb") do |fd|
           77           fd.write(m.mp3)
           78         end
           79       end
           80 
           81       if m.png_big
           82         ::File.open(File.join(output, "#{r.number}_wave.png"), "wb") do |fd|
           83           fd.write(m.png_big)
           84         end
           85       end
           86 
           87       if m.png_big_freq
           88         ::File.open(File.join(output, "#{r.number}_freq.png"), "wb") do |fd|
           89           fd.write(m.png_big_freq)
           90         end
           91       end
           92 
           93       $stderr.puts "[*] Exported #{r.number}..."
           94 
           95     end
           96   end
           97 end