File: voice.rb

package info (click to toggle)
ruby-espeak 1.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 92 kB
  • sloc: ruby: 112; makefile: 4
file content (31 lines) | stat: -rw-r--r-- 768 bytes parent folder | download
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