Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Easy to get the audio out of sync with the graphics (Repost)
Replies: 14   Last Post: Apr 26, 2013 11:08 PM

 Messages: [ Previous | Next ]
 David Park Posts: 1,560 Registered: 5/19/07
Re: Easy to get the audio out of sync with the graphics (Repost)
Posted: Apr 19, 2013 1:15 AM

Clif,

I think your question is an important one for incorporating spoken phrases
into a dynamic presentation. But I wouldn't go straight for a Manipulate
statements but would prefer to do a simpler model.

But first I have complaints about the Speak function. It seems very
unreliable just with simple strings and one can waste a lot of time just to
get something intelligible. How do these two commands work on your computer?

Speak["two"]

Speak["You have chosen two as the number to be used."]

On my computer the first sounds great and the second awful. The "two" is
completely eliminated and the last word is clipped. It's another case of
WRI providing a facility that only works well on a few carefully selected
examples. Of course, there is all the facility for speaking Mathematica
expressions, but for custom dynamic presentations I would just be happy if
it would do a good job at annunciating simple sentences.

Here is a toy example. The user can choose 1 of three integers. Once a
choice has been made the SetterBar is disabled until a calculation is
performed. Then when the Calculate button is used a result is generated and
the SetterBar is again enabled. The Dynamic statement in the SetterBar uses
the extended form of the second argument of Dynamic. First a routine to
generate the spoken phrase:

spokenPhrase[n : (1 | 2 | 3)] :=
Module[
{basePhrase1 = "You have chosen ",
basePhrase2 = " as the number to be used."},
Speak[basePhrase1]; Speak[n]; Speak[basePhrase2]
]

Then the dynamic presentation:

DynamicModule[{n = None, choiceEnabled = True, actionDone = False},
Column[{
Dynamic@
SetterBar[
Dynamic[n, {None, (n = #) &,
Function[n, spokenPhrase[n]; choiceEnabled = False;
actionDone = False; Pause[3]]}], {1, 2, 3},
Enabled -> choiceEnabled],
Dynamic@
Row[{Button["Calculate", choiceEnabled = True;
actionDone = True;], Spacer[10],
If[actionDone, StringForm["The square of `` is ``", n, n^2]]}]
}](* Column *)
]

David Park
djmpark@comcast.net
http://home.comcast.net/~djmpark/index.html

From: Clif McInnis [mailto:c_mcinnis@hotmail.com]

This is an attempt to help Pre-Kindergarten and Kindergarten children learn
about the numerals and numbers from one to 9. The problem is that this age
group would be prone to just pressing buttons and it is easy to get the
audio out of sync with the graphics. I have played around with
Pause[different values] and Enabled->False/Enabled->True as well as
SynchronousUpdating -> False. I was hoping that someone might be able to
tell me whether I was on the right track; if there is a different function I
should look at; or (most important) if what I am trying to do is not doable.
I would also appreciate if someone could tell me a way to follow the flow of
the way the code is read by the computer, that would give me an idea of
where to best place Pauses, etc. (I want to thank John Fultz for
contributions previously made to this manipulate.) Thank You, Clif McInnis

Manipulate[
Pane[Column[{Text[
Row[If[n < 2, {Spacer[160],
Style[nnames[[n]], Bold, Large, Hue[RandomReal[]]],
Style[" Ball", Bold, Large, Green]}, {Spacer[160],
Style[nnames[[n]], Bold, Large, Hue[RandomReal[]]],
Style[" Balls", Bold, Large, Green]}]]],
Row[Table[Graphics[{
Darker[Green], Disk[],
Text[Style[numerals[[ r]], Orange, "Label", 48], {0,
0}]}], {r, 1, n}]
]}, BaseStyle -> {LinebreakAdjustments -> {1., 10, 0, 0,
10}}], {525, 300}],
Row[{Button[
" Start \n ", {n = 1,
Speak["lets count the numbers 1 to 9 out loud. One"]}],
Spacer[55],
Button[
"\[FilledLeftTriangle]\[FilledLeftTriangle] Start Over", {n = 1,
Speak["one"]}],
Button[
"\[FilledLeftTriangle] Less", {If[
n < 2, {n = 1,
Speak["Today we are just working on the numbers from one to \
nine."]}, {n -= 1, Speak[n]}]}], Spacer[10],
Button[
"More \[FilledRightTriangle]", {If[
n > 8, {n = 9,
Speak["Lets learn the numbers from one to nine before we go \ on."]},
{n += 1, Speak[n]}]}],
Button[
"All \[FilledRightTriangle]\[FilledRightTriangle]", {n = 9,
Speak["nine"]}]
}],
{{n, 9, " "}, ControlType -> None},
Initialization :> (
numerals = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
nnames = {"One", "Two", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine"};

Date Subject Author
4/19/13 David Park
4/20/13 Richard Fateman
4/22/13 mathboy@hushmail.com
4/20/13 Clif McInnis
4/21/13 Clif McInnis
4/22/13 Richard Fateman
4/24/13 Murray Eisenberg
4/25/13 Richard Fateman
4/25/13 debguy
4/26/13 Richard Fateman
4/26/13 debguy
4/26/13 Louis Talman
4/26/13 Clif McInnis