class Txt2Speech::Speech
Constants
- GOOGLE_TRANSLATE_URL
Attributes
lang[RW]
text[RW]
Public Class Methods
load(file_path, lang = 'en')
click to toggle source
# File lib/txt2speech/speech.rb, line 14 def self.load(file_path, lang = 'en') f = File.open(file_path) new f.read.encode('UTF-16be', invalid: :replace, replace: '?').encode('UTF-8'), lang end
new(text, lang = 'en')
click to toggle source
# File lib/txt2speech/speech.rb, line 9 def initialize(text, lang = 'en') @text = text @lang = lang end
Public Instance Methods
save(file_path)
click to toggle source
# File lib/txt2speech/speech.rb, line 19 def save(file_path) uri = URI(GOOGLE_TRANSLATE_URL) response = [] sentences = text.split(/[,.\r\n]/i) sentences.reject!(&:empty?) sentences.map! { |t| divide(t.strip) }.flatten! sentences.each_with_index do |q, _idx| uri.query = URI.encode_www_form( ie: 'UTF-8', q: q, tl: lang, total: sentences.length, idx: 0, textlen: q.length, client: 'tw-ob', prev: 'input' ) res = Net::HTTP.get_response(uri) next unless res.is_a?(Net::HTTPSuccess) response << res.body.force_encoding(Encoding::UTF_8) end File.open(file_path, 'wb') do |f| f.write response.join return f.path end end
Private Instance Methods
divide(text)
click to toggle source
# File lib/txt2speech/speech.rb, line 55 def divide(text) return text if text.length < 150 attempts = text.length / 150.0 starts = 0 arr = [] attempts.ceil.times do ends = starts + 150 arr << text[starts...ends] starts = ends end arr end