[jawsscripts] Re: jawsscripts Digest V7 #46

  • From: Paul Bonarrigo <pjbonarrigo@xxxxxxxxx>
  • To: "jawsscripts@xxxxxxxxxxxxx" <jawsscripts@xxxxxxxxxxxxx>
  • Date: Mon, 25 Feb 2013 15:16:11 -0800 (PST)

Question for Doug Lee or anyone else willing to answer.
Java Access Bridge, J A B 2.x.x must be enabled via the Windows Accessibility 
Control Panel or executing the java app called JABswitch.
Below is an SSB Bart Group link that talks about this.
https://www.ssbbartgroup.com/blog/2012/08/30/jre-7-update-6-now-comes-bundled-with-the-java-access-bridge/
I don't recall Java Access Bridge 1.x.x requiring that it be enabled.
Is Java Access Bridge enabling new to 2.x.x?
From: FreeLists Mailing List Manager <ecartis@xxxxxxxxxxxxx>
To: jawsscripts digest users <ecartis@xxxxxxxxxxxxx> 
Sent: Sunday, February 24, 2013 11:12 PM
Subject: jawsscripts Digest V7 #46

jawsscripts Digest    Sun, 24 Feb 2013    Volume: 07  Issue: 046

In This Issue:
        [jawsscripts] How to use SayUsingVoice  function
        [jawsscripts] Re: Schedule events
        [jawsscripts] Re: How to use SayUsingVoice  function
        [jawsscripts] Timing rules for JAWS scripts
        [jawsscripts] Re: How to use SayUsingVoice  function
        [jawsscripts] Re: Timing rules for JAWS scripts
        [jawsscripts] Re: Timing rules for JAWS scripts
        [jawsscripts] Re: Timing rules for JAWS scripts
        [jawsscripts] Share data between scripts
        [jawsscripts] How to know a key is pressed
        [jawsscripts] Re: Schedule events
        [jawsscripts] Re: Timing rules for JAWS scripts
        [jawsscripts] Re: Schedule events

----------------------------------------------------------------------

From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
Subject: [jawsscripts] How to use SayUsingVoice  function
Date: Sun, 24 Feb 2013 16:52:55 +0700

Hello all
I need to say a message with a specific synthesizer and voice. Actually now I 
am having to switch to my synthesizer and voice manually before saying my 
message and switch back to default voice but I do not like this way.
I found a function: SayUsingVoice
According to fsdn book, I can use that function but I do not find any parameter 
for my synthesizer and voice, so I do not know how to use it.
Does anyone know to use it?
Thank all.
Regards,
Dung Nguyen.

-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx 
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Jackie McBride
Sent: Sunday, February 24, 2013 11:30 AM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Re: Schedule events

On 2/23/13, Jim Snowbarger <Snowman@xxxxxxxxxxxxxxxx> wrote:
> Trivia Question, in the folowing snippet of code, which message do you think
> will get spoken first?  Hello?  or Goodbye.
> The winner will recieve an all expenses paid trip to nowhere, and a cracked
> version of NVDA.
> Script Test ()
>
> ; start this from the keyboard
>
> ScheduleFunction ("HelpTest", 1)
>
> delay(50)
>
> SayString ("goodbye")
>
> EndScript
>
>
>
> Function helpTest ()
>
> SayString ("hello")
>
> EndFunction
>
>
>
> The answer?  Are you sure you want to know? You're not going to like this.
>
>
>
> Wrong.  Good bye is spoken first, because the jaws script engine is busy
> processing the delay statement when the scheduled function comes due.  So,
> the scheduled event must wait for the main script to finish, even though it
> is due sooner.
>
>
>
>
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
>


-- 
Blame the computer--why not? It can't defend itself & occasionally
might even be the culprit
Jackie McBride
Ask Me Computer Questions at: www.pcinquirer.com
Jaws Scripting training materials: www.screenreaderscripting.com
homePage: www.brighter-vision.com
__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts


------------------------------

From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
Subject: [jawsscripts] Re: Schedule events
Date: Sun, 24 Feb 2013 17:11:57 +0700

Hi
I have a same problem related to delay  event. Could you please take a look
it at and give me any idea?
My context is: I need to say 2 message and have a delay between them, so I
created a snip of code as below:
-------
Say(message1, OT_STRING)
DELAY(10)
Say(message1, OT_STRING)
-----
It seems to delay function starts counting time after message1 is started
spoken, not after message 1 is spoken completely. So if the message 1 is
long, then delay function does not take any effective.
I need  a delay period between finishing saying message 1 and starting
saying message 2.
Do you have any idea for my case?
Thank so much.
Regards,
Dung Nguyen.

-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Jim Snowbarger
Sent: Sunday, February 24, 2013 11:22 AM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Schedule events

Trivia Question, in the folowing snippet of code, which message do you think
will get spoken first?  Hello?  or Goodbye.
The winner will recieve an all expenses paid trip to nowhere, and a cracked
version of NVDA.
Script Test ()

; start this from the keyboard

ScheduleFunction ("HelpTest", 1)

delay(50)

SayString ("goodbye")

EndScript



Function helpTest ()

SayString ("hello")

EndFunction



The answer?  Are you sure you want to know? You're not going to like this.



Wrong.  Good bye is spoken first, because the jaws script engine is busy
processing the delay statement when the scheduled function comes due.  So,
the scheduled event must wait for the main script to finish, even though it
is due sooner.





__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts


------------------------------

From: "Paul Magill" <magills@xxxxxxxxxxx>
Subject: [jawsscripts] Re: How to use SayUsingVoice  function
Date: Sun, 24 Feb 2013 22:41:06 +1100

Hi Dung,

Sorry, but I think that function is not intended for what you are looking 
for...

The choice of voices that it can use, are only from the currently running 
synthesiser, and are the global , keyboard, message & Jaws cursor voices as 
listed below.

See the extract from the Freedom Scientific FSDN below...

The constants referred to are in the HJConst.jsh file, which is in the 
allUsers folder of Jaws.

FSDN extract:
Function: SayUsingVoice
Description
Speak a string of text using a specific synthisizer voice.

Returns
Type: Void


Parameters
Param 1:
Type: String
Description: Type in the constant representing the voice to be used. These 
constants are defined in the file hjconst.jsh and are listed below: 
VCTX_GLOBAL, VCTX_MESSAGE, VCTX_KEYBOARD, VCTX_SCREEN, VCTX_PCCURSOR, 
VCTX_JAWSCURSOR
Include: Required


----- Original Message ----- 
From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>


Hello all
I need to say a message with a specific synthesizer and voice. Actually now 
I am having to switch to my synthesizer and voice manually before saying my 
message and switch back to default voice but I do not like this way.
I found a function: SayUsingVoice
According to fsdn book, I can use that function but I do not find any 
parameter for my synthesizer and voice, so I do not know how to use it.
Does anyone know to use it?
Thank all.
Regards,
Dung Nguyen.


------------------------------

Date: Sun, 24 Feb 2013 06:54:20 -0500
From: Doug Lee <doug.lee@xxxxxxxxxxxxxxxx>
Subject: [jawsscripts] Timing rules for JAWS scripts

Prompted by a few messages about scheduleFunction and delay()
surprises last night, I offer the following set of perhaps interesting
facts about timing in JAWS scripts:

1. ScheduleFunction() functions do not make one function interrupt
another as far as I can tell:

script test()
sayString("alpha")
scheduleFunction("test1", 0)
sayString("beta")
delay(50)
sayString("gamma")
endScript
function test1()
sayString("delta")
endFunction

will say "delta" after all the other sayStrings, because the scheduled
call will not occur until after the test() script is finished.

2. The exception (isn't there always an exception?) is for events: If
you have a delay() in a script or function, an event like
FocusChangedEvent can fire during that call. This is why delay() now
has the second parameter that you can use to prevent this.

3. Delay() can be cut short, but pause() cannot. If you press a key
while a delay() is running, it can return instantly. Not only that,
but tests I ran years ago showed that one key press will make all
further delay() calls effectively do nothing, i.e., not delay at all,
until the key buffer is cleared. Pause(), on the other hand, is always
going to cause a momentary suspension of script processing.

4. There is no function in JAWS scripting that lets you know when
something has finished speaking:

script test()
sayString("A dozen, a gross, and a score, "
+"Plus three times the square root of four, "
+"divided by seven, "
+"plus five times eleven, "
+"Equals nine squared plus zero, no more.")
scheduleFunction("test1", 20)
endScript
function test1()
sayString("Wait wait wait, um, I can't do math that fast!")
endFunction

Unless your synth is speaking fast enough to set off the kitchen smoke
detector, two seconds will be up a ways before "no more" is spoken.
test1() will be called while speech is in progress, and its message
will be queued for speaking and will speak immediately after the long
script sayString is finished. I know of no safe way to cause a
two-second delay between the end of the long sayString's speaking and
the start of another message.

By the way, I never knew who first penned that limerick, but I love
it, and it does work out mathematically. It is not my invention.


-- 
Doug Lee, Senior Accessibility Programmer
SSB BART Group - Accessibility-on-Demand
mailto:doug.lee@xxxxxxxxxxxxxxxx  http://www.ssbbartgroup.com/
"While they were saying among themselves it cannot be done,
it was done." --Helen Keller

------------------------------

From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
Subject: [jawsscripts] Re: How to use SayUsingVoice  function
Date: Sun, 24 Feb 2013 20:44:45 +0700

Hi Paul
Thank you for your information.

Regards,
Dung Nguyen.
-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx 
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Paul Magill
Sent: Sunday, February 24, 2013 6:41 PM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Re: How to use SayUsingVoice function

Hi Dung,

Sorry, but I think that function is not intended for what you are looking 
for...

The choice of voices that it can use, are only from the currently running 
synthesiser, and are the global , keyboard, message & Jaws cursor voices as 
listed below.

See the extract from the Freedom Scientific FSDN below...

The constants referred to are in the HJConst.jsh file, which is in the 
allUsers folder of Jaws.

FSDN extract:
Function: SayUsingVoice
Description
Speak a string of text using a specific synthisizer voice.

Returns
Type: Void


Parameters
Param 1:
Type: String
Description: Type in the constant representing the voice to be used. These 
constants are defined in the file hjconst.jsh and are listed below: 
VCTX_GLOBAL, VCTX_MESSAGE, VCTX_KEYBOARD, VCTX_SCREEN, VCTX_PCCURSOR, 
VCTX_JAWSCURSOR
Include: Required


----- Original Message ----- 
From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>


Hello all
I need to say a message with a specific synthesizer and voice. Actually now 
I am having to switch to my synthesizer and voice manually before saying my 
message and switch back to default voice but I do not like this way.
I found a function: SayUsingVoice
According to fsdn book, I can use that function but I do not find any 
parameter for my synthesizer and voice, so I do not know how to use it.
Does anyone know to use it?
Thank all.
Regards,
Dung Nguyen.

__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts


------------------------------

Date: Sun, 24 Feb 2013 08:48:35 -0500
From: Jamal Mazrui <empower@xxxxxxxxx>
Subject: [jawsscripts] Re: Timing rules for JAWS scripts

This is a workaround/hack, but what about the following approach for 
knowing when speech has stopped?

Instead of using SayString() or similar, define a function named 
something like SayStringAll(), which is passed the string and puts it in 
a user buffer that is then spoken with SayAll().  Have a global 
true/false variable that indicates whether speech is in progress.  Set 
the variable to true just before the SayAll(). Define a 
SayAllStoppedEvent() function that clears the user buffer and sets the 
variable to false.

Can that global variable then be tested within scripts to determine 
whether speech is in progress?  If a specific delay is desired after a 
string is spoken, might a global variable be set by the SayStringAll() 
function before executing the SayAll(), and then that delay be executed 
by SayAllStoppedEvent() before it returns?

Jamal

On 2/24/2013 6:54 AM, Doug Lee wrote:
> Prompted by a few messages about scheduleFunction and delay()
> surprises last night, I offer the following set of perhaps interesting
> facts about timing in JAWS scripts:
>
> 1. ScheduleFunction() functions do not make one function interrupt
> another as far as I can tell:
>
> script test()
> sayString("alpha")
> scheduleFunction("test1", 0)
> sayString("beta")
> delay(50)
> sayString("gamma")
> endScript
> function test1()
> sayString("delta")
> endFunction
>
> will say "delta" after all the other sayStrings, because the scheduled
> call will not occur until after the test() script is finished.
>
> 2. The exception (isn't there always an exception?) is for events: If
> you have a delay() in a script or function, an event like
> FocusChangedEvent can fire during that call. This is why delay() now
> has the second parameter that you can use to prevent this.
>
> 3. Delay() can be cut short, but pause() cannot. If you press a key
> while a delay() is running, it can return instantly. Not only that,
> but tests I ran years ago showed that one key press will make all
> further delay() calls effectively do nothing, i.e., not delay at all,
> until the key buffer is cleared. Pause(), on the other hand, is always
> going to cause a momentary suspension of script processing.
>
> 4. There is no function in JAWS scripting that lets you know when
> something has finished speaking:
>
> script test()
> sayString("A dozen, a gross, and a score, "
> +"Plus three times the square root of four, "
> +"divided by seven, "
> +"plus five times eleven, "
> +"Equals nine squared plus zero, no more.")
> scheduleFunction("test1", 20)
> endScript
> function test1()
> sayString("Wait wait wait, um, I can't do math that fast!")
> endFunction
>
> Unless your synth is speaking fast enough to set off the kitchen smoke
> detector, two seconds will be up a ways before "no more" is spoken.
> test1() will be called while speech is in progress, and its message
> will be queued for speaking and will speak immediately after the long
> script sayString is finished. I know of no safe way to cause a
> two-second delay between the end of the long sayString's speaking and
> the start of another message.
>
> By the way, I never knew who first penned that limerick, but I love
> it, and it does work out mathematically. It is not my invention.
>
>


------------------------------

From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
Subject: [jawsscripts] Re: Timing rules for JAWS scripts
Date: Sun, 24 Feb 2013 20:50:12 +0700

Hi Doug
Thank you very much for your detailed explanation.

Regards,
Dung Nguyen.

-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Doug Lee
Sent: Sunday, February 24, 2013 6:54 PM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Timing rules for JAWS scripts

Prompted by a few messages about scheduleFunction and delay()
surprises last night, I offer the following set of perhaps interesting
facts about timing in JAWS scripts:

1. ScheduleFunction() functions do not make one function interrupt
another as far as I can tell:

script test()
sayString("alpha")
scheduleFunction("test1", 0)
sayString("beta")
delay(50)
sayString("gamma")
endScript
function test1()
sayString("delta")
endFunction

will say "delta" after all the other sayStrings, because the scheduled
call will not occur until after the test() script is finished.

2. The exception (isn't there always an exception?) is for events: If
you have a delay() in a script or function, an event like
FocusChangedEvent can fire during that call. This is why delay() now
has the second parameter that you can use to prevent this.

3. Delay() can be cut short, but pause() cannot. If you press a key
while a delay() is running, it can return instantly. Not only that,
but tests I ran years ago showed that one key press will make all
further delay() calls effectively do nothing, i.e., not delay at all,
until the key buffer is cleared. Pause(), on the other hand, is always
going to cause a momentary suspension of script processing.

4. There is no function in JAWS scripting that lets you know when
something has finished speaking:

script test()
sayString("A dozen, a gross, and a score, "
+"Plus three times the square root of four, "
+"divided by seven, "
+"plus five times eleven, "
+"Equals nine squared plus zero, no more.")
scheduleFunction("test1", 20)
endScript
function test1()
sayString("Wait wait wait, um, I can't do math that fast!")
endFunction

Unless your synth is speaking fast enough to set off the kitchen smoke
detector, two seconds will be up a ways before "no more" is spoken.
test1() will be called while speech is in progress, and its message
will be queued for speaking and will speak immediately after the long
script sayString is finished. I know of no safe way to cause a
two-second delay between the end of the long sayString's speaking and
the start of another message.

By the way, I never knew who first penned that limerick, but I love
it, and it does work out mathematically. It is not my invention.


-- 
Doug Lee, Senior Accessibility Programmer
SSB BART Group - Accessibility-on-Demand
mailto:doug.lee@xxxxxxxxxxxxxxxx  http://www.ssbbartgroup.com/
"While they were saying among themselves it cannot be done,
it was done." --Helen Keller
__________o?
View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts


------------------------------

Date: Sun, 24 Feb 2013 09:21:24 -0500
From: Doug Lee <doug.lee@xxxxxxxxxxxxxxxx>
Subject: [jawsscripts] Re: Timing rules for JAWS scripts

Way to think outside the box there!

That might work, if one is willing to put up with a few side effects
of using a user buffer. I don't actually know how precise the
SayAllStoppedEvent's call time is relative to actual speech cessation
though.

The user buffer side effects are these: Possible multi-second delay if
visual display of user buffers is active, the very visual display
itself, and pseudo focus change activity caused by the buffer's
display. Interruption of speech should be fine, but in all cases of
course, you have to worry about closing the buffer on completion as
well. I recommend temporary disabling of user buffer display during
this process. You could probably re-enable display right after
userBufferActivate() safely, but I haven't tested that theory.

Fascinating approach though.

On Sun, Feb 24, 2013 at 08:48:35AM -0500, Jamal Mazrui wrote:
This is a workaround/hack, but what about the following approach for
knowing when speech has stopped?

Instead of using SayString() or similar, define a function named
something like SayStringAll(), which is passed the string and puts it
in a user buffer that is then spoken with SayAll().  Have a global
true/false variable that indicates whether speech is in progress.  Set
the variable to true just before the SayAll(). Define a
SayAllStoppedEvent() function that clears the user buffer and sets the
variable to false.

Can that global variable then be tested within scripts to determine
whether speech is in progress?  If a specific delay is desired after a
string is spoken, might a global variable be set by the SayStringAll()
function before executing the SayAll(), and then that delay be
executed by SayAllStoppedEvent() before it returns?

Jamal

On 2/24/2013 6:54 AM, Doug Lee wrote:
>Prompted by a few messages about scheduleFunction and delay()
>surprises last night, I offer the following set of perhaps interesting
>facts about timing in JAWS scripts:
>
>1. ScheduleFunction() functions do not make one function interrupt
>another as far as I can tell:
>
>script test()
>sayString("alpha")
>scheduleFunction("test1", 0)
>sayString("beta")
>delay(50)
>sayString("gamma")
>endScript
>function test1()
>sayString("delta")
>endFunction
>
>will say "delta" after all the other sayStrings, because the scheduled
>call will not occur until after the test() script is finished.
>
>2. The exception (isn't there always an exception?) is for events: If
>you have a delay() in a script or function, an event like
>FocusChangedEvent can fire during that call. This is why delay() now
>has the second parameter that you can use to prevent this.
>
>3. Delay() can be cut short, but pause() cannot. If you press a key
>while a delay() is running, it can return instantly. Not only that,
>but tests I ran years ago showed that one key press will make all
>further delay() calls effectively do nothing, i.e., not delay at all,
>until the key buffer is cleared. Pause(), on the other hand, is always
>going to cause a momentary suspension of script processing.
>
>4. There is no function in JAWS scripting that lets you know when
>something has finished speaking:
>
>script test()
>sayString("A dozen, a gross, and a score, "
>+"Plus three times the square root of four, "
>+"divided by seven, "
>+"plus five times eleven, "
>+"Equals nine squared plus zero, no more.")
>scheduleFunction("test1", 20)
>endScript
>function test1()
>sayString("Wait wait wait, um, I can't do math that fast!")
>endFunction
>
>Unless your synth is speaking fast enough to set off the kitchen smoke
>detector, two seconds will be up a ways before "no more" is spoken.
>test1() will be called while speech is in progress, and its message
>will be queued for speaking and will speak immediately after the long
>script sayString is finished. I know of no safe way to cause a
>two-second delay between the end of the long sayString's speaking and
>the start of another message.
>
>By the way, I never knew who first penned that limerick, but I love
>it, and it does work out mathematically. It is not my invention.
>
>

-- 
Doug Lee, Senior Accessibility Programmer
SSB BART Group - Accessibility-on-Demand
mailto:doug.lee@xxxxxxxxxxxxxxxx  http://www.ssbbartgroup.com/
"While they were saying among themselves it cannot be done,
it was done." --Helen Keller

------------------------------

From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
Subject: [jawsscripts] Share data between scripts
Date: Mon, 25 Feb 2013 03:25:52 +0700

Hi all
I have some scripts and combine  them with some different eksykeys. These
scripts need to use a same data (the next script uses output of previous
script).
At the moment, I am concerring to use file to store sharee data.
Does anyone know if we can store  the shared data in the memory for my
scripts?
Thank all.
Regards,
Dung Nguyen.
-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Doug Lee
Sent: Sunday, February 24, 2013 6:54 PM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Timing rules for JAWS scripts

Prompted by a few messages about scheduleFunction and delay()
surprises last night, I offer the following set of perhaps interesting
facts about timing in JAWS scripts:

1. ScheduleFunction() functions do not make one function interrupt
another as far as I can tell:

script test()
sayString("alpha")
scheduleFunction("test1", 0)
sayString("beta")
delay(50)
sayString("gamma")
endScript
function test1()
sayString("delta")
endFunction

will say "delta" after all the other sayStrings, because the scheduled
call will not occur until after the test() script is finished.

2. The exception (isn't there always an exception?) is for events: If
you have a delay() in a script or function, an event like
FocusChangedEvent can fire during that call. This is why delay() now
has the second parameter that you can use to prevent this.

3. Delay() can be cut short, but pause() cannot. If you press a key
while a delay() is running, it can return instantly. Not only that,
but tests I ran years ago showed that one key press will make all
further delay() calls effectively do nothing, i.e., not delay at all,
until the key buffer is cleared. Pause(), on the other hand, is always
going to cause a momentary suspension of script processing.

4. There is no function in JAWS scripting that lets you know when
something has finished speaking:

script test()
sayString("A dozen, a gross, and a score, "
+"Plus three times the square root of four, "
+"divided by seven, "
+"plus five times eleven, "
+"Equals nine squared plus zero, no more.")
scheduleFunction("test1", 20)
endScript
function test1()
sayString("Wait wait wait, um, I can't do math that fast!")
endFunction

Unless your synth is speaking fast enough to set off the kitchen smoke
detector, two seconds will be up a ways before "no more" is spoken.
test1() will be called while speech is in progress, and its message
will be queued for speaking and will speak immediately after the long
script sayString is finished. I know of no safe way to cause a
two-second delay between the end of the long sayString's speaking and
the start of another message.

By the way, I never knew who first penned that limerick, but I love
it, and it does work out mathematically. It is not my invention.


-- 
Doug Lee, Senior Accessibility Programmer
SSB BART Group - Accessibility-on-Demand
mailto:doug.lee@xxxxxxxxxxxxxxxx  http://www.ssbbartgroup.com/
"While they were saying among themselves it cannot be done,
it was done." --Helen Keller
__________o?
View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts


------------------------------

From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
Subject: [jawsscripts] How to know a key is pressed
Date: Mon, 25 Feb 2013 03:52:44 +0700

Hi all
I have a script which user can only operate it by Up and Down keys.
If user presses any key, the script should be abortted. Then I will have
call a function to clean up data of script.
Does any one know how to get a key event except for Up and Down keys?


Regards,
Dung Nguyen.


------------------------------

From: "Jim Snowbarger" <Snowman@xxxxxxxxxxxxxxxx>
Subject: [jawsscripts] Re: Schedule events
Date: Sun, 24 Feb 2013 19:47:33 -0600

No, in fact, this is what has been discussed before on this list.  WE don't 
have a convenient way to determine when the synthesizer has finished 
speaking.
The signal is certainly there, somewhere, but we don't seem to have a good 
way at getting to it.
The method I have used in the past to try to get around this involved 
analyzing the message to be spoken, and calculating a delay time based on 
that message.
Somewhere, I have a piece of code that follows the pronunciation rules of 
the English language, and analyzes a piece of text to generate a syllable 
count.  I wrote that for a different purpose, but found it useful here.  I 
then used the syllable count, in conjunction with speech rate,  to create a 
delay interval time.
The more syllables, the longer the delay.
That technique works, sort of, but you would have to write a different 
analyzer for each language, and all of that.
Maybe somebody here will notice some clever hook in a sapi5 dll or something 
that will let us query the synthesizer to see if it has finished.


----- Original Message ----- 
From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Sunday, February 24, 2013 4:11 AM
Subject: [jawsscripts] Re: Schedule events


Hi
I have a same problem related to delay  event. Could you please take a look
it at and give me any idea?
My context is: I need to say 2 message and have a delay between them, so I
created a snip of code as below:
-------
Say(message1, OT_STRING)
DELAY(10)
Say(message1, OT_STRING)
-----
It seems to delay function starts counting time after message1 is started
spoken, not after message 1 is spoken completely. So if the message 1 is
long, then delay function does not take any effective.
I need  a delay period between finishing saying message 1 and starting
saying message 2.
Do you have any idea for my case?
Thank so much.
Regards,
Dung Nguyen.

-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Jim Snowbarger
Sent: Sunday, February 24, 2013 11:22 AM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Schedule events

Trivia Question, in the folowing snippet of code, which message do you think
will get spoken first?  Hello?  or Goodbye.
The winner will recieve an all expenses paid trip to nowhere, and a cracked
version of NVDA.
Script Test ()

; start this from the keyboard

ScheduleFunction ("HelpTest", 1)

delay(50)

SayString ("goodbye")

EndScript



Function helpTest ()

SayString ("hello")

EndFunction



The answer?  Are you sure you want to know? You're not going to like this.



Wrong.  Good bye is spoken first, because the jaws script engine is busy
processing the delay statement when the scheduled function comes due.  So,
the scheduled event must wait for the main script to finish, even though it
is due sooner.





__________�

View the list's information and change your settings at
//www.freelists.org/list/jawsscripts

__________�

View the list's information and change your settings at
//www.freelists.org/list/jawsscripts




------------------------------

From: "Jim Snowbarger" <Snowman@xxxxxxxxxxxxxxxx>
Subject: [jawsscripts] Re: Timing rules for JAWS scripts
Date: Sun, 24 Feb 2013 19:59:01 -0600

Good information,, and exactly what I have seen as well.
I have always been curious about the difference between pause(), and 
delay(1).
The FSDN seems to suggest that pause returns control back to the OS for 
scheduling, to let other apps run, where delay does not.
I have never determined if that is the case or not.  But, it seems like an 
important distinction.
But, I certainly have seen the keyboard cancellation of delay that you 
mentioned.  Kind of handy, actually, and occasionally amusing.

So, if you really want to wait 2 seconds, and you don't want the keyboard to 
cut it short. put Pause() inside a "for" loop and run it 20 times.

----- Original Message ----- 
From: "Doug Lee" <doug.lee@xxxxxxxxxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Sunday, February 24, 2013 5:54 AM
Subject: [jawsscripts] Timing rules for JAWS scripts


Prompted by a few messages about scheduleFunction and delay()
surprises last night, I offer the following set of perhaps interesting
facts about timing in JAWS scripts:

1. ScheduleFunction() functions do not make one function interrupt
another as far as I can tell:

script test()
sayString("alpha")
scheduleFunction("test1", 0)
sayString("beta")
delay(50)
sayString("gamma")
endScript
function test1()
sayString("delta")
endFunction

will say "delta" after all the other sayStrings, because the scheduled
call will not occur until after the test() script is finished.

2. The exception (isn't there always an exception?) is for events: If
you have a delay() in a script or function, an event like
FocusChangedEvent can fire during that call. This is why delay() now
has the second parameter that you can use to prevent this.

3. Delay() can be cut short, but pause() cannot. If you press a key
while a delay() is running, it can return instantly. Not only that,
but tests I ran years ago showed that one key press will make all
further delay() calls effectively do nothing, i.e., not delay at all,
until the key buffer is cleared. Pause(), on the other hand, is always
going to cause a momentary suspension of script processing.

4. There is no function in JAWS scripting that lets you know when
something has finished speaking:

script test()
sayString("A dozen, a gross, and a score, "
+"Plus three times the square root of four, "
+"divided by seven, "
+"plus five times eleven, "
+"Equals nine squared plus zero, no more.")
scheduleFunction("test1", 20)
endScript
function test1()
sayString("Wait wait wait, um, I can't do math that fast!")
endFunction

Unless your synth is speaking fast enough to set off the kitchen smoke
detector, two seconds will be up a ways before "no more" is spoken.
test1() will be called while speech is in progress, and its message
will be queued for speaking and will speak immediately after the long
script sayString is finished. I know of no safe way to cause a
two-second delay between the end of the long sayString's speaking and
the start of another message.

By the way, I never knew who first penned that limerick, but I love
it, and it does work out mathematically. It is not my invention.


-- 
Doug Lee, Senior Accessibility Programmer
SSB BART Group - Accessibility-on-Demand
mailto:doug.lee@xxxxxxxxxxxxxxxx  http://www.ssbbartgroup.com/
"While they were saying among themselves it cannot be done,
it was done." --Helen Keller
__________�

View the list's information and change your settings at
//www.freelists.org/list/jawsscripts




------------------------------

Date: Sun, 24 Feb 2013 18:49:59 -0900
Subject: [jawsscripts] Re: Schedule events
From: Soronel Haetir <soronel.haetir@xxxxxxxxx>

SAPI5 is certainly capable of telling you this sort of thing, but I am
pretty sure you have to have a reference to the voice instance that is
speaking (meaning you would have to get it from jaws, rather than by
just crating a SAPI voice instance yourself).

And even then that would only work if the preferred voice is SAPI, it
would do nothing for those using eloquence or realspeak direct or
vocalizer voices (which I am certain all have means to signal this
information, but again jaws does not make it available).

On 2/24/13, Jim Snowbarger <Snowman@xxxxxxxxxxxxxxxx> wrote:
> No, in fact, this is what has been discussed before on this list.  WE don't
>
> have a convenient way to determine when the synthesizer has finished
> speaking.
> The signal is certainly there, somewhere, but we don't seem to have a good
> way at getting to it.
> The method I have used in the past to try to get around this involved
> analyzing the message to be spoken, and calculating a delay time based on
> that message.
> Somewhere, I have a piece of code that follows the pronunciation rules of
> the English language, and analyzes a piece of text to generate a syllable
> count.  I wrote that for a different purpose, but found it useful here.  I
> then used the syllable count, in conjunction with speech rate,  to create a
>
> delay interval time.
> The more syllables, the longer the delay.
> That technique works, sort of, but you would have to write a different
> analyzer for each language, and all of that.
> Maybe somebody here will notice some clever hook in a sapi5 dll or something
>
> that will let us query the synthesizer to see if it has finished.
>
>
> ----- Original Message -----
> From: "Nguyen Van Dung" <dungnv1984@xxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Sunday, February 24, 2013 4:11 AM
> Subject: [jawsscripts] Re: Schedule events
>
>
> Hi
> I have a same problem related to delay  event. Could you please take a look
> it at and give me any idea?
> My context is: I need to say 2 message and have a delay between them, so I
> created a snip of code as below:
> -------
> Say(message1, OT_STRING)
> DELAY(10)
> Say(message1, OT_STRING)
> -----
> It seems to delay function starts counting time after message1 is started
> spoken, not after message 1 is spoken completely. So if the message 1 is
> long, then delay function does not take any effective.
> I need  a delay period between finishing saying message 1 and starting
> saying message 2.
> Do you have any idea for my case?
> Thank so much.
> Regards,
> Dung Nguyen.
>
> -----Original Message-----
> From: jawsscripts-bounce@xxxxxxxxxxxxx
> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Jim Snowbarger
> Sent: Sunday, February 24, 2013 11:22 AM
> To: jawsscripts@xxxxxxxxxxxxx
> Subject: [jawsscripts] Schedule events
>
> Trivia Question, in the folowing snippet of code, which message do you
> think
> will get spoken first?  Hello?  or Goodbye.
> The winner will recieve an all expenses paid trip to nowhere, and a cracked
> version of NVDA.
> Script Test ()
>
> ; start this from the keyboard
>
> ScheduleFunction ("HelpTest", 1)
>
> delay(50)
>
> SayString ("goodbye")
>
> EndScript
>
>
>
> Function helpTest ()
>
> SayString ("hello")
>
> EndFunction
>
>
>
> The answer?  Are you sure you want to know? You're not going to like this.
>
>
>
> Wrong.  Good bye is spoken first, because the jaws script engine is busy
> processing the delay statement when the scheduled function comes due.  So,
> the scheduled event must wait for the main script to finish, even though it
> is due sooner.
>
>
>
>
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
>
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
>


-- 
Soronel Haetir
soronel.haetir@xxxxxxxxx

------------------------------

End of jawsscripts Digest V7 #46
********************************
__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: