mirror of
https://github.com/beatriceo/polyglot.git
synced 2025-10-27 19:22:11 +00:00
ruby implementation
This commit is contained in:
61
app/models/speech.rb
Normal file
61
app/models/speech.rb
Normal file
@@ -0,0 +1,61 @@
|
||||
require 'google/cloud/translate'
|
||||
require 'pry-byebug'
|
||||
class Speech
|
||||
def initialize(params = {})
|
||||
@speech = Google::Cloud::Speech.new
|
||||
@credentials = params[:creds]
|
||||
keyfile = ENV["TRANSLATION_CREDENTIALS"]
|
||||
creds = Google::Cloud::Translate::Credentials.new(keyfile)
|
||||
|
||||
|
||||
@translate = Google::Cloud::Translate.new(
|
||||
project_id: ENV["PROJECT_ID"],
|
||||
credentials: creds
|
||||
)
|
||||
|
||||
@streaming_config =
|
||||
{ config:
|
||||
{
|
||||
encoding: :LINEAR16,
|
||||
sample_rate_hertz: 16000,
|
||||
language_code: params[:language]
|
||||
},
|
||||
interim_results: true
|
||||
}
|
||||
|
||||
@host_lang = params[:host_lang] || "en"
|
||||
@recieve_lang = params[:recieve_lang] || "en"
|
||||
|
||||
@stream = @speech.streaming_recognize(@streaming_config)
|
||||
@audio = ""
|
||||
end
|
||||
|
||||
|
||||
def write_to_stream(audio)
|
||||
@stream.send(audio.split(",").map { |str| str.to_i }.pack("s<*"))
|
||||
end
|
||||
|
||||
def stream
|
||||
while true
|
||||
break if @stream.stopped?
|
||||
results = @stream.results
|
||||
|
||||
unless results.first.nil?
|
||||
alt = results.first.alternatives
|
||||
alt.each do |result|
|
||||
puts "Original: #{result.transcript}"
|
||||
puts "Translated: #{translate(result.transcript)}"
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
@stream.stop
|
||||
@stream.wait_until_complete!
|
||||
end
|
||||
|
||||
def translate(text)
|
||||
trans = @translate.translate(text, from: @host_lang, to: @recieve_lang)
|
||||
translation.text.gsub("'", "'")
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user