class ESpeak::Speech

Attributes

options[R]
text[R]

Public Class Methods

new(text, options={}) click to toggle source

filename - The file that will be generated options - Posible key, values

:voice     - use voice file of this name from espeak-data/voices. ie 'en', 'de', ...
:pitch     - pitch adjustment, 0 to 99
:speed     - speed in words per minute, 80 to 370
:capital   - increase emphasis of capitalized letters by raising pitch by this amount
             no range given in man but good range is 10-40 to start
:quiet     - remove printing to stdout. Affects only lame (default false)
# File lib/espeak/speech.rb, line 14
def initialize(text, options={})
  @text = text
  @options = options
end

Public Instance Methods

bytes() click to toggle source

Returns mp3 file bytes as a result of Text-To-Speech conversion.

# File lib/espeak/speech.rb, line 43
def bytes()
  speech = bytes_wav
  res = IO.popen(std_lame_command(command_options), 'r+') do |process|
    process.write(speech)
    process.close_write
    process.read
  end
  res.to_s
end
bytes_wav() click to toggle source

Returns wav file bytes as a result of Text-To-Speech conversion.

# File lib/espeak/speech.rb, line 56
def bytes_wav()
  IO.popen(espeak_command(command_options, "--stdout"), 'r') do |process|
    process.read
  end
end
save(filename) click to toggle source

Generates mp3 file as a result of Text-To-Speech conversion.

# File lib/espeak/speech.rb, line 30
def save(filename)
  speech = bytes_wav
  res = IO.popen(lame_command(filename, command_options), 'r+') do |process|
    process.write(speech)
    process.close_write
    process.read
  end
  res.to_s
end
speak() click to toggle source

Speaks text

# File lib/espeak/speech.rb, line 21
def speak
  IO.popen(espeak_command(command_options), 'r') do |process|
    process.read
  end
end

Private Instance Methods

command_options() click to toggle source
# File lib/espeak/speech.rb, line 64
def command_options
  default_options.merge(symbolize_keys(options))
end
default_options() click to toggle source

Although espeak itself has default options I'm defining them here for easier generating command (with simple hash.merge)

# File lib/espeak/speech.rb, line 72
def default_options
  { :voice => 'en',
    :pitch => 50,
    :speed => 170,
    :capital => 1,
    :quiet => true }
end
espeak_command(options, flags="") click to toggle source
# File lib/espeak/speech.rb, line 80
def espeak_command(options, flags="")
  ['espeak', "#{@text}", "#{flags}", "-v#{options[:voice]}", "-p#{options[:pitch]}", "-k#{options[:capital]}", "-s#{options[:speed]}"]
end
lame_command(filename, options) click to toggle source
# File lib/espeak/speech.rb, line 88
def lame_command(filename, options)
  ['lame', '-V2', '-', "#{filename}", "#{'--quiet' if options[:quiet] == true}"]
end
std_lame_command(options) click to toggle source
# File lib/espeak/speech.rb, line 84
def std_lame_command(options)
  lame_command("-", options)
end
symbolize_keys(hash) click to toggle source
# File lib/espeak/speech.rb, line 92
def symbolize_keys(hash)
  hash.inject({}) do |options, (key, value)|
    options[(key.to_sym rescue key) || key] = value
    options
  end
end