Re: Win32Lib: playing .wav usurps normal program flow?

new topic     » goto parent     » topic index » view thread      » older message » newer message

On Thu, 28 Oct 1999 07:25:16 -0400, Dan Moyer <DanMoyer at PRODIGY.NET> wrote:

Hi Dan,

Your example was set to synchronous playback. You want async playback
using the SND_ASYNC flag.

Instead of:

procedure playsound(sequence wave)
  atom file
  file = allocate_string(wave)
  c_proc(xPlaySound, {file, 1, 0})
  free(file)
end procedure

Try:

procedure playsound(sequence wave)
  atom file
  file = allocate_string(wave)
  c_proc(xPlaySound, {file, 0, 1})
  free(file)
end procedure

(Coded on the fly.. should work :)

Regards,

Greg Harris

>David,
>
>I have three problems finishing my first Euphoria windows program (first
>two problems previously mentioned here earlier):
>
>1. MODAL WINDOWS : if open modal, then minimize it, then REOPEN (not
>restore) it, close it, &  click anywhere in main, HANGS UP;
>
>2. SETTEXT IN A LABEL: if I concatenate quoted "text" & a sequence variable
>it puts BOTH in label, but if I concatenate sequence variable &  quoted
>"text", it only puts sequence variable there;
>
>3.  PLAYING WAVE FILE USURPS "setVisible" in program flow:
>
>I added some sound to a program, & "setVisible" seems to be relating
>weirdly with the sound playing; my program flow first sets some controls
>visible, & then plays a .wav file, but what actually happens is that the
>sound plays first, & then the controls become visible when the sound is
>finished playing.  This results in a very dorky look, because significant
>expanses of the screen disappear for an unpalatable length of time (while
>the .wav is playing), before something finally shows back there.  I hope
>there's some way to make this not work like this?
>
>In case the specific method I chose to use to play the wave file is
>responsible, & someone could suggest a better way, here's what I did,
>lifted from Hecnor's multiplication exercise in the archive:
>
>-- TO PLAY A .WAV FILE:
>procedure playsound(sequence wave)
>atom file
>  file = allocate_string(wave)
>  c_proc(xPlaySound, {file, 1, 0})
>  free(file)
>end procedure
>
>In case there isn't a better way to play a wave, here's a demo I made of
>the problem (using your IDE, which works real nice!):
>
>(NOTE THAT YOU HAVE TO NAME SOME (short) .WAV FILE TO 'test.wav' FIRST)
>
>-- demo of problem with .wav sound happening before setVisible,
>-- even though setVisible is commanded before playsound.
>
>include Win32Lib.ew
>without warning
>
>global constant
>TheWindow = create( Window, "Sound/setVisible Problem", 0, 100, 100, 684,
>388,0),
>LText2 = create( LText, "LText2", TheWindow, 132, 96, 444, 76, 0 ),
>Restart = create( PushButton, "RESTART", TheWindow, 248, 264, 132, 36, 0 ),
>DoTest = create( PushButton, "CLICK HERE", TheWindow, 248, 192, 132, 40, 0
>),
>LText5 = create( LText, "LText5", TheWindow, 136, 8, 408, 80, 0 )
>---------------------------------------
>-- TO PLAY A .WAV FILE:
>procedure playsound(sequence wave)
>atom file
>  file = allocate_string(wave)
>  c_proc(xPlaySound, {file, 1, 0})
>  free(file)
>end procedure
>------------------------------------
>procedure TheWindow_onOpen ()
>
>-- TEST INSTRUCTIONS:
>  setText(LText5,"Before you perform this test, name some .wav file
>'test.wav' and put it into the programs directory. Click the button; some
>text SHOULD show BEFORE test.wav plays; it doesn't.")
>
>--TEXT TO SHOW WHEN BUTTON CLICKED ; MAKE IT INVISIBLE FOR NOW:
>  setFont(LText2,"Arial", 15,Bold)
>  setText(LText2,"This text should have shown BEFORE anything was spoken!")
>  setVisible(LText2,False)
>end procedure
>
>onOpen[TheWindow] = routine_id("TheWindow_onOpen")
>-----------------------------------
>--DO THE TEST:
>procedure DoTest_onClick ()
>  setVisible(LText2,True)-- TEXT should become VISIBLE;
>  playsound("test.wav") -- THEN sound should happen.
>end procedure
>
>onClick[DoTest] = routine_id("DoTest_onClick")
>------------------------------------
>-- RESET TO DO TEST AGAIN:
>procedure Restart_onClick ()
>  setVisible(LText2,False)
>end procedure
>
>onClick[Restart] = routine_id("Restart_onClick")
>----------------------------------------------------------------------
>WinMain( TheWindow, Normal )
>
>
>Hope you can help,
>Dan Moyer

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu