URI: 
       audio_raw_to_speech.rb - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
  HTML git clone git://jay.scot/warvox
   DIR Log
   DIR Files
   DIR Refs
   DIR README
       ---
       audio_raw_to_speech.rb (1596B)
       ---
            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 
           15 require 'uri'
           16 require 'net/http'
           17 require 'json'
           18 
           19 def usage
           20   $stderr.puts "Usage: #{$0} <input.raw> <output.json>"
           21   exit
           22 end
           23 
           24 #
           25 # Script
           26 #
           27 
           28 inp = ARGV.shift
           29 out = ARGV.shift
           30 
           31 if (inp and inp == "-h") or not inp
           32   usage()
           33 end
           34 
           35 if out && File.exists?(out)
           36   $stderr.puts "Error: The output file already exists: #{out}"
           37   exit(0)
           38 end
           39 
           40 raw = WarVOX::Audio::Raw.from_file(inp)
           41 res = nil
           42 flac = raw.to_flac
           43 akey = WarVOX::Config.gcloud_key
           44 
           45 if ! akey
           46   $stderr.puts "Error: A gcloud API key needs to be configured"
           47   exit(1)
           48 end
           49 
           50 uri = URI('https://speech.googleapis.com/v1/speech:recognize?key=' + akey)
           51 req = Net::HTTP::Post.new(uri, initheader = {'Content-Type' =>'application/json'})
           52 
           53 loop do
           54   req.body =
           55   {
           56     "initialRequest" => {
           57       "encoding"     => "FLAC",
           58       "sampleRate"   => 16000,
           59     },
           60     "audioRequest" => {
           61       "content" => [flac].pack("m*").gsub(/\s+/, '')
           62     }
           63   }.to_json
           64 
           65 begin
           66   http = Net::HTTP.new(uri.hostname, uri.port)
           67   http.use_ssl = true
           68   res = http.request(req)
           69 
           70   break if res.code.to_s == "200"
           71   $stderr.puts "Retrying due to #{res.code} #{res.message}..."
           72 rescue ::Interrupt
           73   exit(0)
           74 rescue ::Exception
           75   $stderr.puts "Exception: #{$!} #{$!.backtrace}"
           76 end
           77   sleep(1)
           78 end
           79 
           80 if out
           81   ::File.open(out, "wb") do |fd|
           82     fd.write(res.body)
           83   end
           84 else
           85   $stdout.write(res.body)
           86 end