




                        SmarTalk TECHNICAL SPECIFICATIONS
     
     Automated Functions, Inc.
     6424 North 28th St.
     Arlington, VA 22207
     703-536-7741
     FAX: 703-536-7920
     
     January 31, 1995
     
     SmarTalk is an external speech synthesizer which weighs 5 ounces and
     uses the SSI 263 speech chip.  It connects to the parallel port of a
     PC.  The SmarTalk package comes with a half size parallel card set to
     LPT2.  This card may be used in a desk top PC.  The unit may also be
     used on any notebook PC. 
     
     The SmarTalk text-to-speech software runs on the PC.  The software uses
     XMS to save memory space.  The internal buffer size for the XMS SmarTalk
     software is 10K.  It is 1200 bytes for the non-XMS version. 
     
     SmarTalk has three different programs. 
     
     st_init.exe Program which sets up XMS
     xs_talk.exe SmarTalk XMS text-to-speech program (about 20K)
     s_talk.exe  SmarTalk non-XMS text-to-speech software (about 36K)
     
     Making SmarTalk Speak
     
     SmarTalk must be attached to the parallel port.  Two different cables
     are supplied.  The short is for notebook use, and the long for desk
     top. 
     
     The install program should be run to place the SmarTalk programs on your
     disk.  Make sure you switch to the floppy drive before running the
     install program. 
     
     The program "findtalk" may be run to locate SmarTalk.  This utility
     program tries to find the unit and tells the port number and address.
     You should run findtalk before you run the SmarTalk software. 
     
     The batch file "SmarTalk" will run the text-to-speech program.  It first
     runs st_init.  This program tries to find XMS storage and places most of
     the text-to-speech tables in the XMS.  The program xs_talk then runs and
     uses these tables.  If XMS memory is not found, the larger s_talk is
     run.  SmarTalk speaks an introduction message once the text-to-speech
     program is run. 
     
     Communicating With SmarTalk
     
     SmarTalk links with the printer interrupt 17H.  The screen reader should
     use this interrupt to send data to SmarTalk.  The three printer commands
     are the same as the Accent.  The AH is 0 indicates a write call.  The
     value AH is 1 performs initialization of SmarTalk.  This is not
     required.  The value AH is 2 checks the status of SmarTalk.  This is
     helpful for checking the amount of data left in the buffer and for
     indexing. 


                                      - 1 -







     
     Example: Write the number '7' to SmarTalk. 
     
             mov   dx,0  ;port number 0 is LPT1, 1 is LPT2 etc.
             mov   ah,0  ;write data to SmarTalk
             mov   al,'7'   ;send the number 7
             int   017h  ;send the data
             mov   al,0dh   ;send carriage return to force speech
             mov   ah,0  ;write data command
             mov   dx,0  ;using lpt port 1
             int   017h  ;speak the 7
     
     SmarTalk uses two different emulations.  It tries to emulate the
     internal Accent commands.  It also has its own command sequences. 
     
     The following are the recommended sequences that a screen reader
     developer should use to implement SmarTalk. 
     
     The following may be changed at any time.  The numbers (0 - 9) are
     printable ASCII which have codes (030H - 039H).  They are represented by
     the symbol "#".  The number or letter after the ":" is the default
     setting.  Either the escape code (1BH) or a Control E (5H) may be used
     to start the command sequence.  Remember to use a number from 0 to 9 and
     not the "#" symbol.  A carriage return (0DH) makes SmarTalk speak its
     information.  The sequences may appear weird but they were chosen so not
     to conflict with the Accent commands.  There are no spaces in the
     command sequences.  They are listed to help increase readability. 
     
     Rate: 5
     
     ESC > #
     
     Pitch: 5
     
     ESC P #
     
     Volume: 4
     
     ESC < #
     
     Tone: I
     
     ESC { (A - Z)
     
     For example esc>5 will set the rate to speed 5.  Speed nine is very fast
     and speed 0 is slow.  The sequence esc{A will make the tone very low. 
     
     The pitch setting controls the overall inflection of the speech.  The
     tone is a much more varied setting.  It can be used to create a
     different sounding voice. 
     
     Control X is the shut up command.  It may be issued at any time.  The
     index marker count is set to 0 when the Control X is sent. 
     




                                      - 2 -







     SmarTalk SWITCHES
     
     The following may be changed by the application program.  The first one
     listed is always the default. 
     
     Punctuation: 
     
     ESC U #
     
     1 = Punctuation symbols not pronounced (default). 
     
     0 = Punctuation symbols pronounced. 
     
     2 = Some punctuation symbols are pronounced. 
     
     In "Some Punctuation" mode, the following punctuation is not
     pronounced: 
     
     ".!?:;'". 
     
     All other punctuation is pronounced.  This mode will pronounce the
     punctuation symbols if they have letters or numbers on both sides of the
     symbol.  For example, 1.2. is pronounced "1 point 2", but "1.  " is
     pronounced as "one". 
     
     Consonant Verbalization: 
     
     This switch controls if words that contain all consonants are to be
     spoken or spelled. 
     
     Esc C #
     
     0 = Words with all consonants are spelled (default). 
     
     1 = Words with all consonants are spoken. 
     
     Monotone or Regular Stress: 
     
     This switch controls if SmarTalk uses regular inflection or is
     monotone. 
     
     ESC M 0  Regular inflection (Default)
     
     ESC m 1   Monotone, use no inflection
     
     Pause Between Words
     
     This switch controls the amount of time between each word.  The value of
     '0' uses no extra time. 
     
     ESC S #
     
     # = 0 - 9, 0 is normal higher numbers are longer pauses. 
     
     Smart Skip Flag: 
     


                                      - 3 -







     The Smart Skip feature of SmarTalk allows the speech to turn off until a
     Control K is found in its internal memory.  This is invoked by pressing
     the Control Key down and up without pressing any other keys.  The use of
     the Control Key is verified by the following commands. 
     
     ESC Z 0     Tells SmarTalk not to use the Control Key (default)
     
     ESC Z 1     Tells SmarTalk to use the Control Key for Smart Skip
     
     It is recommended that the screen reader try to use the Smart Skip
     function.  It along with the rewind (Left Shift) and fast forward (Right
     Shift) create extra functions for the user. 
     
     SINGLE COMMANDS. 
     
     The following commands may be placed anywhere in the text.  They use
     only one ASCII character. 
     
     Pause Delay: 
     
     It is often nice to be able to insert a small pause delay in the
     speech.  For example, a delay after a punctuation symbol often makes the
     speech easier to comprehend.  Each pause delay is equal to one phoneme.
     This means that approximately 5 pause delays should be used to make a
     normal pause. 
     
     Control P - Create one pause unit. 
     
     Smart Skip: 
     
     SmarTalk has a feature which allows it to skip to the next Control K in
     its buffer.  The screen reader places the Control K in the text at
     points that make sense.  Most people will place them before the end of
     every screen line.  When the Control key is pressed down and released
     without any other key being pressed, SmarTalk will turn off the voice
     and turn it on again at the next Control K.  This appears to the user as
     if the pressing of the Control key made the system skip to the beginning
     of the next line. 
     
     All the screen reader designer need to do is to insert a Control K at
     the end of each line.  It is best to insert it before the carriage
     return.  The SmarTalk software will trigger the sequence by the user
     tapping the Control Key. 
     
     The screen reader must not send a Control X when the Control key is
     pressed.  If it does, this function will not work.  This occurs since
     the SmarTalk buffer will be silenced and all of the Control K codes will
     be erased. 
     
     Fast Forward and Rewind: 
     
     There are two ways to invoke the fast forward and rewind functions.  The
     screen reader may send an Escape then a Control U (0x15) to the printer
     port where smarTalk is located.  This will rewind the speech 10 words.
     Sending an Escape Control V (0x16) will fast forward the speech.
     Sending an Escape Control W (0x17) will perform the smart skip


                                      - 4 -







     function.  You must make sure the smart skip function is enabled by
     previously sending an Escape Z 1 sequence. 
     
     The Escape Control U, Escape Control V, and Escape Control W functions
     may be useful for Windows screen readers.  SmarTalk does not attempt to
     get the shift or cursor keys in Windows.  The screen reader may select
     which keys it wants to allocate for these functions. 
     
     SmarTalk uses the left and right shift keys to perform rewind and fast
     forward.  It is best if the screen reader does not silence speech when
     these keys are pressed. 
     
     The rewind key is invoked by tapping the left shift key.  Each time you
     tap it it rewinds back about 10 words.  If the unit is not talking, you
     must press the left shift key twice quickly.  This will start the unit
     in its rewind state.  It makes a short hissing sound when it rewinds.
     You must continue to tap the key to make it rewind.  Holding the left
     shift key down does not make it rewind. 
     
     The right shift key is fast forward.  When you press it, it skims ahead
     about 10 words.  It works like the rewind key and does not repeat when
     you hold the key down. 
     
     A different sound is created when you rewind to the beginning of the
     SmarTalk memory.  This may be a large amount of data if you are using
     the XMS version of SmarTalk (about 10K).  Pressing any key that silences
     the speech will end the rewind process. 
     
     Silence Speech (Shut Up): 
     
     Control X - Silence Speech. 
     
     If the application program sends a Control X to SmarTalk at anytime, the
     speech will silence. 
     
     Command Line Switches
     
     SmarTalk uses command line switches to indicate various options.  Each
     switch begins with a letter then a number.  The letters may be in upper
     or lower case.  The switches may be in any order. 
     
     Line Printer Port Switch:  L#
     
     An "L" followed by the line printer port number tells SmarTalk which
     parallel port to use.  The default is 1 and the options are 1, 2, or 3. 
     
     Interrupt Switch: I#
     
     This switch tells SmarTalk which interrupt to use.  The default is 7 and
     the options are 7 or 5. 
     
     Fake Port:  F#
     
     This switch is useful if the screen reader cannot address the current
     line printer port value.  For example, some screen readers can only
     write to parallel port 3.  This switch can be used as an alternative


                                      - 5 -







     input port. 
     
     Address Switch:   A#
     
     This switch is not needed very often.  It tells SmarTalk the absolute
     port address to use.  SmarTalk determines the address by looking in the
     BIOS printer data area.  If this information is not correct, this switch
     may be used to make SmarTalk work.  The settings are 1, 2, and 3.  The
     value of 1 is 378H, 2 is 278H and 3 is 3BCH. 
     
     Smart Skip Switch:   S#
     
     This switch is either 0 or 1.  If 1, it tells SmarTalk to insert a
     Control K before each carriage return.  This may enable the user to tap
     the control key and force the speech to the next Control K.  The setting
     of 0 tells SmarTalk not to insert a Control K.  Default setting is 0. 
     
     Data Flow Parameter: D#
     
     this switch controls the amount of data SmarTalk uses as a limit for
     signaling the screen reader.  When the screen reader uses the status
     call (Int 17H AH = 2) SmarTalk returns information in bits 1 and 2 of
     AH.  If bit 2 is a 1 and bit 1 is a 0 then the screen reader knows
     speech is almost finished.  This parameter controls the upper limit when
     SmarTalk tells the screen reader that it is near the end of speech. 
     
     The default value is 0 and the maximum is 9.  The value of 0 is
     approximately 10 phonemes or about one or two words.  The given number
     multiplies the default value by the parameter.  The maximum value of 9
     is 90 phonemes or about 10 to 15 words.  If the screen reader is using
     indexing on each word and the speech seems very slow, then increasing
     this number may help. 
     
     Voice Setting Parameter: V#
     
     This parameter alters the tone or voice of SmarTalk.  The default value
     is 3.  The setting of 3 is the same as the Accent <ESC>V5 voice
     command. 
     
     The user may increase this number if the screen reader has too low of
     tone.  The Accent <ESC>V0 - V9 commands map internally to the SmarTalk
     26 tone settings (A - Z).  The setting of 3 maps to the SmarTalk "I"
     setting.  Changing this parameter alters how SmarTalk maps the Accent
     voice commands. 
     
     Time Parameter:   T#
     
     This switch controls the amount of time SmarTalk waits during the
     writing of data to the parallel port.  This switch should only be used
     if SmarTalk does not work with your parallel port.  The value ranges
     from 0 to 9.  If SmarTalk does not talk, you may try the value of 3,
     then 6, then 9.  If SmarTalk works at one setting use the higher setting
     to assure good speech.  These time values are very short and should not
     be noticed by the listener. 
     
     Command Line Examples: 


                                      - 6 -







     
     SmarTalk L2
     
     Run SmarTalk on line printer port 2. 
     
     SmarTalk L1 F3
     
     The screen reader writes to port 3, but SmarTalk is connected to port
     1. 
     
     SmarTalk I5 L2
     
     Use interrupt 5 and write to port 2. 
     
     SmarTalk S1 L2
     
     Insert the smart skip code before each carriage return and write to port
     2. 
     
     Query Speech
     
     SmarTalk enables the application program to determine how much room is
     in the SmarTalk internal memory.  The sequence is the same as the
     Accent. 
     
     The INT 017H with Ah = 2 returns status. 
     
     the amount of room left is returned in bits 1 and 2 of AH.  If bit 2 and
     1 are both 0 then there is lots of room.  If bit 2 is a 1 and bit 1 is a
     0 then SmarTalk is almost finished speaking (near end of speech).  This
     level may be controlled by the user by the Data Flow parameter D#.  If
     bit 2 is 0 and bit 1 is 1 then the buffer is empty. 
     
     The screen reader may also send data to SmarTalk without checking its
     status.  It will keep the CPU if there is no room to store the text.  It
     will give the CPU back when the next word is spoken. 
     
     Index Marks
     
     the index mark for SmarTalk is a Control F.  The index count is returned
     in the DH register when a status request is issued.  The index count is
     then set to 0. 
     
     Example: Get index count and buffer info. 
     
     The following text is sent: 
     
     How <Control F>now <Control F>brown <Control F>cow. <Control F><return>
     
             mov   ah,2  ;status
             mov   dx,st_port  ;port number 0, 1, 2
             int   017h  ;ask for status
     
     Upon return dh is 4 if the above is finished speaking.  This indicates
     that 4 index marks were processed by SmarTalk.  The AH value is set to
     bit 2 = 0, and bit 1 = 1 to indicate SmarTalk is not speaking. 


                                      - 7 -







     
     Finding SmarTalk
     
     It may be useful to know if SmarTalk is currently running.  This way the
     user does not have to tell the screen reader which port SmarTalk is
     currently on.  The application program can determine if SmarTalk is
     running by making a call to INT 016H. 
     
     SmarTalk will return a magic number if 016H is called with aH set to
     1cH.  The following is returned. 
     
             dx = 0FBH
     
     the AH register has the parallel port number.  An AH value of 0 is LPT1,
     AH of 1 is LPT2 etc. 
     
     The following routine determines if SmarTalk is loaded in the system.
     The parallel port number is returned in AH. 
     
     ;SmarTalk DETECTION MODULE
     ;CALL INT 016H WITH AH = 01CH
     ;MAKE SURE DX IS 0 WHEN CALL
     ;IF SmarTalk IS THERE DX WILL BE EQUAL TO 0FBH
     ;AH RETURNS THE PARALLEL PORT NUMBER REFERENCED BY 0
     
     IS_SMART PROC  NEAR
             PUSH  AX
             PUSH  DX
             MOV   DX,0  ;0 DX FOR CALL
             MOV   AH,01CH  ;MAGIC SmarTalk VALUE -- ARE YOU THERE?
             INT   016H  ;CALL BIOS TO SEE IF SmarTalk IS THERE
             CMP   DX,0FBH  ;IF EQUAL THEN SmarTalk IS THERE
             JNE   NO_SMART ;SmarTalk NOT PRESENT
     ;COME HERE FOUND SmarTalk
             MOV   PORT,AH  ;WHICH PORT
             MOV   FOUND_SMART,1  ;SET FLAG, WE FOUND SmarTalk
     NO_SMART:
             POP   DX
             POP   AX
             RET
     IS_SMART ENDP
     
     Changing Batteries Or Disconnecting Cable
     
     SmarTalk tries to allow the user to change batteries without affecting
     the screen reader.  You can test this by disconnecting SmarTalk from AC
     power.  When connected again it should speak when any text is sent. 
     
     Summary Of SmarTalk Commands
     
     ESC>#    Rate default 5
     ESCp#    Pitch default 5
     ESC<#    Volume default 4
     ESC{#    Tone # is A through Z default I
     ESCc#    # is 0 words with all consonants are spelled, 1 is spoken
     ESCu#    Punctuation 1 is no punctuation spoken 0 is speak punctuation


                                      - 8 -







     ESCm#    # is 0 for normal inflection 1 is monotone
     ESCs#    Pause between words 0 is normal 1 - 9 creates longer pause
     
     Single Commands
     
     Control F   Index marker symbol
     Control K   Smart skip symbol
     Control P   Creates a short pause in the speech
     Control X   Silence speech
     Carriage return   Forces SmarTalk to speak
     Left Shift  Rewind, tap once if speaking twice quickly to start
     Right Shift Fast forward, tap once moves speech forward 10 words
     Control Key  Smart skip is invoked
     
     SmarTalk Command Line Switches
     
     A#    Address of port 1 = 378H 2 = 278H 3 = 3BCH
     F#    Fake parallel port 1,2,3
     I#    Interrupt setting 7 is default 5 is other option
     L#    Line printer port number 1,2,3
     S#    Smart skip flag if 1 SmarTalk puts a Control K before return
     




































                                      - 9 -


