class Dictation::TTS

Public Class Methods

new(language, voice = nil) click to toggle source
# File lib/dictation/tts.rb, line 3
def initialize(language, voice = nil)
  set_language_and_voice(language, voice)
end

Public Instance Methods

speak(text) click to toggle source
# File lib/dictation/tts.rb, line 40
def speak(text)
  system("say -v #{@voice} #{text} > /dev/null 2>&1")
end

Private Instance Methods

get_available_language_and_voice_pairs() click to toggle source
# File lib/dictation/tts.rb, line 7
def get_available_language_and_voice_pairs
  list_of_available_voices = `say -v '?'`.split("\n")
  languages_and_voices = list_of_available_voices.inject({}) do |collection, record|
    matched_results = record.match(/^(.*[^\s])\s+([a-z]{2})_[A-Z]{2}\s+/)
    available_language = matched_results[2].downcase.intern
    available_voice = matched_results[1]
    if collection.has_key?(available_language)
      collection[available_language] << available_voice
    else
      collection[available_language] = [available_voice]
    end
    collection
  end
end
set_language_and_voice(language, voice) click to toggle source
# File lib/dictation/tts.rb, line 22
def set_language_and_voice(language, voice)
  system_languages_and_voices = get_available_language_and_voice_pairs
  @language = language
  if system_languages_and_voices.keys.include?(@language)
    if voice
      if system_languages_and_voices[@language].include?(voice)
        @voice = voice
      else
        raise("No available voice found, please check if you have downloaded voice [#{voice}] in System Preferences -> Speech")
      end
    else
      @voice = system_languages_and_voices[@language].first
    end
  else
    raise("No available language found, please check if you have any voice for [#{language}] in System Preferences -> Speech")
  end
end