Speech Server

From OLPC
Jump to navigation Jump to search

Screen Reader TTS Service

Objective

Develop a simple and scalable Screen Reader TTS Service for (Text to Speech) Plugin using eSpeak Speech synthesis for XO.

Description

The Screen reader will provide the users with the following capabilities :

  • A TTS Control Panel to control various parameters of ESpeak.
  • Ability to highlight text anywhere, and synthesize speech from it using a keyboard shortcut or through a button in Sugar UI.
  • A panel to modify the speech parameters like words/min, language, gender, pitch , volume etc.
  • Providing ability to user to save their preferences and retrieve them after system reboot.
  • Providing the user ability to load the default settings for the speech service.
  • Providing the user a play button which would play the highlighted text, and change to a stop button to asynchronously stop playback.
  • Providing a parallel activity using the underlying speech server. The activity will allow kids to type in a text box and use the speech server capabilities. Allowing the kid to experiment with the speech parameters can be an extremely interesting activity for them. For example increasing the rate of speaking wordw along with the pitch will yield a very interesting voice which the kids (may) find funny.

Target Audience

Students (taken from Book reader feature set)–

  1. A text to speech option can help kids learn to read.
  2. A text to speech option might help kids that do not like to read a lesson but would not mind listening to it at a speed they could understand it.

Existing Tools Present

Elements of Screen Reader Service

Modifiable Speech Parameters

Refer espeak Library API to understand usage.

espeakRATE        = 1
espeakVOLUME      = 2
espeakPITCH       = 3
espeakRANGE       = 4
espeakPUNCTUATION = 5
espeakCAPITALS    = 6

Modifiable Voice Parameters

Follow the espeak Voice Description

language   -> language(In standard notation)
name       -> a given name for this voice. By default it should be set NULL
identifier -> the filename for this voice within espeak-data/voices.
              Should be set NULL by default.
gender     -> voice gender( 1 = male, 2 = female, 0 = unknown)
age        -> By default age = 0. espeak automatically sets it.
variant    -> Used to modify the voice by different variant. Preferably 0.

A speech synthesis dbus daemon service

  • A dbus-glib based speech server written in C.
  • Speech server reuses the libespeak library.
  • Methods exposed via D-BUS for performing certain tasks globally to all xo activities.

Speech Server Dbus Methods

SayText()

This Dbus Method accepts an incoming UTF8 string, and plays it back.

SayText(string text)
  • Speaks the text pointed by string.
  • Must be a valid UTF 8 String

Example Python Code:

import dbus
bus = dbus.SessionBus()
espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech')
espeak_object.SayText("Hello world! Hey I can talk to you")
SetVoice()

This Dbus Method accepts parameters to set the voice parameters for espeak. Refer to the Modifiable Voice Parameters for more details. This methods can be used to configure the voice properties of espeak.

SetVoice(String name,
	 String languages,
	 String identifier,
	 int gender,
	 int age,
	 int variant,
	)

Python Example:

import dbus
bus = dbus.SessionBus()
espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech')
espeak_object.SetVoice("","fr", "", 2,0,0)
#Choose a female voice to speak french text
espeak_object.SayText("Je suis une etudiante!")
SetParameter()

This Dbus Method accepts parameters to set the speech parameters for espeak. Refer to the Modifiable Speech Parameters for more details.

SetParameter(int PARAMETER_NAME, int PARAMETER_VALUE)

Python Example:

import dbus
bus = dbus.SessionBus()
espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech')
espeak_object.SetParameter(1, 60)
#Modifies the espeakRATE parameter to speak 60 words per minute
espeak_object.SayText("I am a very lazy speaker!")
GetConfiguration()

This Dbus Method returns a dbus.Structure This is required for getting the current settings of the espeak service. It is required to display the present settings of espeak in the control panel that will be made available for tuning the espeak parameters.

GetConfiguration()

Python Example:

import dbus
bus = dbus.SessionBus()
espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech')
espeak_object.SetParameter(1, 60)
espeak_object.SetVoice("","en-uk", "", 2,0,0)
val = espeak_object.GetConfiguration()
print val
SaveConfiguration()

This Dbus Method allows the user to save the current espeak parameters.

SaveConfiguration()

Python Example:

import dbus
bus = dbus.SessionBus()
espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech')
espeak_object.SetParameter(1, 60)
espeak_object.SetVoice("","en-uk", "", 2,0,0)
espeak_object.SaveConfiguration()
#Will overwrite the existing user settings


LoadConfiguration() and LoadDefaultConfiguration()

This Dbus Method allows the user to set all espeak parameters to his/her preferences which they are required to save.

LoadConfiguration()
or 
LoadDefaultConfiguration()

Python Example:

import dbus
bus = dbus.SessionBus()
espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech')
espeak_object.LoadConfiguration()

Codebase

The code for the project can be accessed in the git repository at | Screen Reader GIT

Team

Core Team :

Mentor : Arjun Sarwal