1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
# frozen_string_literal: true
module ESpeak
# A voice that will be used for `Speech`
class Voice
attr_reader :language, :name, :gender, :file
def initialize(attributes)
@language = attributes[:language]
@name = attributes[:name]
@gender = attributes[:gender]
@file = attributes[:file]
end
def self.all
voices = []
result = IO.popen('espeak --voices', &:read)
result.each_line do |line|
next unless line.start_with?(' ') # header
row = line.split
voices << Voice.new(language: row[1], gender: row[2], name: row[3], file: row[4])
end
voices.freeze
end
def self.find_by_language(lang)
all.find { |v| v.language == lang.to_s }
end
end
end
|