[g-a-devel]Re: New revision of GNOME Speech IDL



Marc:

Thanks for sending along the new IDL for gnome-speech. I've taken a look at and have made some comments, which are attached.


Paul

*** Comment (0) - Overall
    It would be nice to have the API behavior documented a bit better
    (e.g. what does the boolean return from 'stop' mean?)

*** Comment (1) - GNOME_Speech_SynthesizerDriver:voice_language

    Since voice_language is an enum:

      enum voice_language {
        language_english,
        language_german
      };

    Does this mean that a new version of gnome-speech needs to be
    generated to support a new language?    How does Gnome represent a
    locale? If Gnome doesn't have a standard way of representing a locale,
    then perhaps ISO country/language codes should be used.  This would
    allow for speech engines to support new languages without any changes
    to the gnome-speech API.

*** Comment (2) - GNOME_Speech_SynthesizerDriver:voice_info

    VoiceInfo should probably be expanded to include:
       * age - the age of the speaker.
       * style - the style of the voice. Allows for further 
                 distinguishing voices. For instance: 
                 "business", "casual" could be styles supported by a
                 particular engine.
       

*** Comment (3) - GNOME_Speech_SynthesizerDriver

    Is it possible for a system to have more than one vendor TTS engine
    installed? If it is possible, it is not clear to me how an application
    would chose one vendor TTS engine over another with this API.

    How does an application get an instance of a  SynthesisDriver?

*** Comment (4) - GNOME_Speech_SynthesizerDriver

    In a typical system, would there be a single running instance of a TTS
    engine that all speech applications would share, or would each
    application have its own instance?   How can speech applications
    coordinate their output with each other?   For instance, a book reader
    application may queue up an hours worth of text to be spoken.  If a
    speech-enabled calendar application needs to announce an appointment
    would it:

       a) Interrupt the book reader
       b) Speak over the book reader
       c) Wait until the book was finished.

    How is this coordination managed in the API?

*** Comment (5) - GNOME_Speech_Speaker

   - Speaker: Needs a 'pause' method
   - Speaker: Needs a 'resume' method
   - Speaker: Needs a 'getVoiceInfo' method.
   - Perhaps add a 'sayURL' that takes a URL pointing to marked-up
     text.
   - Perhaps add a 'sayPlainText' that speaks text with no markup.

   - Does 'say' return immediately after queueing up text?  I presume
     that since there is a 'wait' call, that indeed it does. If an
     application has queued up ten strings to be spoken, does 'stop'
     stop the speaking of the first string in the queue or all strings
     in the queue. Likewise, does 'wait' wait for the queue to be empty, or
     for the current (head of the queue) text to be spoken. Generally
     speaking, if there is a TTS output queue, an application will
     need some methods to allow fine grained manipulation the queue.


*** Comment (6) Vocabulary management
   - How does an application add new words/pronunciations to the TTS
     dictionary?


*** Comment (7) callbacks
    It is unclear from the API when callbacks are generated. There are
    a number of interesting speech events that an application may want
    to receive callbacks for:

       - utterance started
       - utterance ended
       - word started
       - word ended
       - phoneme started
       - marker reached
       - utterance cancelled
       - utterance paused
       - utterance resumed

    I suggest adding an event type to the SpeechCallback notify that
    can be used to indicate the type of event

    Some applications may want to see all of these events, while some
    won't want to see any.  Since some of the events can add some 
    overhead to the speech engine, it may be useful to allow an
    application to register callbacks for specific event types.

    The 'notify' method gets a 'text_id' as a long type. I presume
    this is the long value that is returned by 'say'.  I think this is
    a bit awkward for an application. If an application wants access
    to the text that is currently being output it will have to store
    all the text, associate the text with the id and remember to clean
    it all up afterwards. I would prefer to see the SpeechCallBack
    'notify' method get a struct that includes a reference to the
    current string being output.

*** Comment (8) Parameters -
    How does setting parameters interact with text that is queued to
    be spoken?  If an application queues ten strings to be spoken and
    then calls 'setParameterValue' to change a property such as the
    speaking volume, when does the change take place? Some options:
        a) Immediately (in the middle of speaking the current text)
        b) After the current utterance is finished
        c) After all the items currently in the queue have been
        spoken.

    Note that some engines will not be able to change some parameters
    in mid-utterance.

*** Comment (9) Parameters -
        What is the intended use of the 'enumerated' field of the
        Parameter struct?

        What does 'getParameterValue' return if a request is made for
        an unknown parameter?

        What does 'getParameterValueDescription' do?

        Does the 'setParameterValue' return value indicate the
        success/failure of the set?

        I'm not sure if the 'double' type is appropriate for all
        parameters. 


*** Comment (10) Global Parameters -

    If I have a number of speech applications do I need to set
    properties for each application, or is there a way that I can
    set parameters globally and have each application use these
    global settings.  For instance, I can imagine that a user may
    want to globally increase the speaking rate for all
    applications.  Perhaps a mechanism akin to the X resources
    would be appropriate.

*** Comment (11) Audio Redirection -
   Is there anyway for an application to redirect audio? 

*** Comment (12) releaseSpeaker? -

    When an application is done with a 'Speaker' that was created with
    SynthesisDriver::createSpeaker, how does the application release it?




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]