Gif Posted May 2, 2007 Share Posted May 2, 2007 (edited) Case $msg = $btn_play $lbl_showsongfile = GUICtrlCreateLabel(GUICtrlRead($input_open), 160, 110, 270, 40) $sound = _SoundOpen(GUICtrlRead($input_open)) If @error = 2 Then MsgBox(0, "Error", "The file does not exist") ElseIf @error = 3 Then MsgBox(0, "Error", "The alias was invalid") ElseIf @extended <> 0 Then $extended = @extended $errorstring = DllCall("winmm.dll","int","mciGetErrorStringA","str",$extended,"str","","int",65534,"hwnd",0) MsgBox(0, "Error", "The open failed." & @CRLF & "Error Number: " & $extended & @CRLF & "Error Description: " & $errorstring[2] & @CRLF & "Please Note: The sound may still play correctly.") Else MsgBox(0, "Success", "The file opened successfully") EndIf If _SoundClose($sound) = 1 Then MsgBox(0, "Success", "The sound was closed successfully") Else MsgBox(0, "Error", "The file was not closed successfully") EndIf _SoundPlay($sound, 1)I use this script and it does not work... WHY? where is the mistakeIf I use only sound play instead of _soundopen and _soundplay (..) the sound works fine but i can't use othr functions like pause and stop, or maybe i can?can you assist me i am a bit confused, how do i combine _soundplay with other functions?Excuse me for my bad english but i am a foreigner Edited May 2, 2007 by c4nm7 Link to comment Share on other sites More sharing options...
BrettF Posted May 2, 2007 Share Posted May 2, 2007 I'm not really seeing where your problem is. Just to make sure, you have to use the parameters in the functions (_SoundPlay ($sound) .etc....) Where are you having trouble with it?? Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
Gif Posted May 2, 2007 Author Share Posted May 2, 2007 I'm not really seeing where your problem is. Just to make sure, you have to use the parameters in the functions (_SoundPlay ($sound) .etc....) Where are you having trouble with it??When the music statrts the programm somehow does not function (BASICLY IT Shows me the error Not Responding) and i do not have the ability to press other buttons or do anyhing in the program Link to comment Share on other sites More sharing options...
birdofprey Posted May 2, 2007 Share Posted May 2, 2007 (edited) To my knowledge there's no such thing as If _SoundClose($sound) = 1 Then, what are you trying to do there ? Yes, _SoundClose returns 1 if it closes the sound successfully but, I don't think that the above line would actually close the file... And I don't think you actually want to do that, cause you can't play, pause or resume a closed file... Keep that $sound handle alive, and try SoundPause($sound), _SoundResume($sound) -it, while that. When you want to play another file, point $sound to that... If you really need to know if the file is closed try: $error = _SoundClose($sound) If $error = 1 Then... Correct me if I'm wrong... Edited May 2, 2007 by birdofprey Link to comment Share on other sites More sharing options...
Gif Posted May 2, 2007 Author Share Posted May 2, 2007 To my knowledge there's no such thing as If _SoundClose($sound) = 1 Then, what are you trying to do there ? Yes, _SoundClose returns 1 if it closes the sound successfully but, I don't think that the above line would actually close the file... And I don't think you actually want to do that, cause you can't play, pause or resume a closed file... Keep that $sound handle alive, and try SoundPause($sound), _SoundResume($sound) -it, while that. When you want to play another file, point $sound to that... If you really need to know if the file is closed try: $error = _SoundClose($sound) If $error = 1 Then... Correct me if I'm wrong... sorry but i am a bit confused i don't know what to do , shall i use this order? _SoundOpen _SoundClose _soundplay What is the purpose of soundclose, can't understand y when the music starts there is no respnse from my programm ... Link to comment Share on other sites More sharing options...
birdofprey Posted May 2, 2007 Share Posted May 2, 2007 (edited) sorry but i am a bit confused i don't know what to do , shall i use this order? _SoundOpen _SoundClose _soundplay What is the purpose of soundclose, can't understand y when the music starts there is no respnse from my programm ... I don't know why your program stops responding. But I can answer your other questions. _SoundOpen returns a so called handle. That's the variable you work with. $sound = _SoundOpen($file)oÝ÷ ØÚ0¶¶´ß«(ºwoj¸nW¢±§-¹©eÊ"اÊ&{^쨹Ƨvax,Â+aÖ®¶seõ6÷VæEÆb33c·6÷VæB·Æ6÷Væ@¥6ÆVW#·vVâFRGvò6V6öæG2&R÷fW ¥õ6÷VæEW6Rb33c·6÷VæB²W6RFR6÷Væ@¥6ÆVW#²¶VWBW6VBf÷"æ÷FW""6V6öæG0¥õ6÷VæE&W7VÖRb33c·6÷VæB·&W7VÖRFR6÷Væ@ £¶æBb÷RƶS ¥õ6÷VæE7F÷b33c·6÷VæB·7F÷FB6÷VæBoÝ÷ ØÚ0¶Ê¬¶iyÛayø¥y©Ý÷hmÁ©í¶ek&«¢éÝÂ+a¶²§u©òÞjz-êì¢éÝ{h¶´ß«(ºwoj¸nWÉ«¢+ØÀÌØíͽչô}M½Õ¹=Á¸ ÀÌØí¹½Ñ¡É¥±¤°(í¹Á±äÁÕÍÉÍÕµÍѽÀÑ¡¥ÌÀÌØí¹½Ñ¡È¥±¸¸¸(í½È©ÕÍÐ)}M½Õ¹ ±½Í ÀÌØíͽչ¤¸( Edited May 2, 2007 by birdofprey Link to comment Share on other sites More sharing options...
birdofprey Posted May 2, 2007 Share Posted May 2, 2007 (edited) _SoundOpen _SoundClose _soundplayAlso notice that these are actually: _SoundOpen($something) _SoundClose($something) _soundplay($something) and while for _SoundOpen() that something is a file, for _SoundPlay that is the $sound ( as returned by _SoundOpen() ) Edited May 2, 2007 by birdofprey Link to comment Share on other sites More sharing options...
jennico Posted May 10, 2008 Share Posted May 10, 2008 (edited) hi, i would like to take part in this discussion. i found out that _soundplay() and _soundstop() work very fine without _soundopen() and _soundclose(). you can just use the filename instead of the handle, in any case it works. it also works with .mid files. you only have to take care that you use filegetshortname() because the function cannot handle whitespaces. but i would like to know: is it better to open and close a sound before playing ? is it necessary ? what is the difference ? i ask because i now encounter problems with my soundcard (does not react from time to time, though showing no error ). but maybe this has nothing to do with the sound functions, i hope ? cheers j. edit: another thing i found out: the _soundstop() udf consists of two functions: the first one is _soundseek() and the second one is _soundstop(). i altered the _soundstop() udf so it works without the _soundseek() call and it seems not to be necessary. _soundstop() with _soundseek() stops the sound perfectly. so what is the sense of _soundseek() ? the sound.au3 and i marked the _soundseek() within _soundstop() expandcollapse popup;=============================================================================== ; ; Function Name: _SoundOpen ; Description:: Opens a sound file for use with other _Sound functions ; Parameter(s): $hFile - The sound file, $sAlias[optianal] - a name such as sound1, ; if you do not specify one it is randomly generated ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): string(the sound id) - Success, 0 - Failure ; @extended <> 0 - open failed, @error = 2 - File doesn't exist, ; @error = 3 - alias contains whitespace ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundOpen($hFile, $sAlias = "") ;Declare variables Local $sSnd_id, $iCurrentPos, $iRet, $asAlias ;check for file If Not FileExists($hFile) Then Return SetError(2, 0, 0) ;search for whitespace by character $asAlias = StringSplit($sAlias, "") For $iCurrentPos = 1 To $asAlias[0] If StringIsSpace($asAlias[$iCurrentPos]) Then Return SetError(3, 0, 0) Next ;create random alias if one is not supplied If $sAlias = "" Then $sSnd_id = RandomStr(10) Else $sSnd_id = $sAlias EndIf ;open file $iRet = mciSendString("open " & FileGetShortName($hFile) & " alias " & FileGetShortName($sSnd_id)) Return SetError(0, $iRet, $sSnd_id) EndFunc ;==>_SoundOpen ;=============================================================================== ; ; Function Name: _SoundClose ; Description:: Closes a sound ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): 1 - Success, 0 and @error = 1 - Failure ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundClose($sSnd_id) If mciSendString("close " & FileGetShortName($sSnd_id)) = 0 Then Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_SoundClose ;=============================================================================== ; ; Function Name: _SoundPlay ; Description:: Plays a sound from the current position (beginning is the default) ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file ; $fWait - If set to 1 the script will wait for the sound to finish before continuing ; - If set to 0 the script will continue while the sound is playing ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): 1 - Success, 0 - Failure ; @error = 2 - $fWait is invalid, @error = 1 - play failed ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundPlay($sSnd_id, $fWait = 0) ;Declare variables Local $iRet ;validate $fWait If $fWait <> 0 And $fWait <> 1 Then Return SetError(2, 0, 0) ;if sound has finished, seek to start If _SoundPos($sSnd_id, 2) = _SoundLength($sSnd_id, 2) Then mciSendString("seek " & FileGetShortName($sSnd_id) & " to start") ;If $fWait = 1 then pass wait to mci If $fWait = 1 Then $iRet = mciSendString("play " & FileGetShortName($sSnd_id) & " wait") Else $iRet = mciSendString("play " & FileGetShortName($sSnd_id)) EndIf ;return If $iRet = 0 Then Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_SoundPlay ;=============================================================================== ; ; Function Name: _SoundStop ; Description:: Stops the sound ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): 1 - Success, 0 and @error = 1 - Failure, ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundStop($sSnd_id) ;Declare variables Local $iRet, $iRet2 ;seek to start [b][u]$iRet = mciSendString("seek " & FileGetShortName($sSnd_id) & " to start")[/u][/b] ;stop $iRet2 = mciSendString("stop " & FileGetShortName($sSnd_id)) ;return If $iRet = 0 And $iRet2 = 0 Then Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_SoundStop ;=============================================================================== ; ; Function Name: _SoundPause ; Description:: Pauses the sound ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): 1 - Success, 0 and @error = 1 - Failure, ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundPause($sSnd_id) ;Declare variables Local $iRet ;pause sound $iRet = mciSendString("pause " & FileGetShortName($sSnd_id)) ;return If $iRet = 0 Then Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_SoundPause ;=============================================================================== ; ; Function Name: _SoundResume ; Description:: Resumes the sound after being paused ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): 1 - Success, 0 and @error = 1 - Failure, ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundResume($sSnd_id) ;Declare variables Local $iRet ;resume sound $iRet = mciSendString("resume " & FileGetShortName($sSnd_id)) ;return If $iRet = 0 Then Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_SoundResume ;=============================================================================== ; ; Function Name: _SoundLength ; Description:: Returns the length of the sound in the format hh:mm:ss ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file, ; $iMode = 1 - hh:mm:ss, $iMode = 2 - milliseconds ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): Length of the sound - Success, 0 and @error = 1 - $iMode is invalid ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundLength($sSnd_id, $iMode = 1) ;Declare variables Local $iSnd_len_ms, $iSnd_len_min, $iSnd_len_hour, $iSnd_len_sec, $sSnd_len_format ;validate $iMode If $iMode <> 1 And $iMode <> 2 Then Return SetError(1, 0, 0) ;tell mci to use time in milliseconds mciSendString("set " & FileGetShortName($sSnd_id) & " time format miliseconds") ;recieve length of sound $iSnd_len_ms = mciSendString("status " & FileGetShortName($sSnd_id) & " length") ;assign modified data to variables $iSnd_len_min = Int($iSnd_len_ms / 60000) $iSnd_len_hour = Int($iSnd_len_min / 60) $iSnd_len_sec = Int(Int($iSnd_len_ms / 1000) - ($iSnd_len_min * 60)) ;assign formatted data to $sSnd_len_format $sSnd_len_format = StringFormat("%02i:%02i:%02i", $iSnd_len_hour, $iSnd_len_min, $iSnd_len_sec) ;return correct variable If $iMode = 1 Then Return $sSnd_len_format If $iMode = 2 Then Return $iSnd_len_ms EndFunc ;==>_SoundLength ;=============================================================================== ; ; Function Name: _SoundSeek ; Description:: Seeks the sound to a specified time ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen (must NOT be a file), $iHour, $iMin, $iSec ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): 1 - Success, 0 and @error = 1 - Failure, ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundSeek($sSnd_id, $iHour, $iMin, $iSec) ;Declare variables Local $iMs = 0 Local $iRet ;prepare mci to recieve time in milliseconds mciSendString("set " & FileGetShortName($sSnd_id) & " time format miliseconds") ;modify the $iHour, $iMin and $iSec parameters to be in milliseconds ;and add to $iMs $iMs += $iSec * 1000 $iMs += $iMin * 60 * 1000 $iMs += $iHour * 60 * 60 * 1000 ; seek sound to time ($iMs) $iRet = mciSendString("seek " & FileGetShortName($sSnd_id) & " to " & $iMs) ;return If $iRet = 0 Then Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_SoundSeek ;=============================================================================== ; ; Function Name: _SoundStatus ; Description:: All devices can return the "not ready", "paused", "playing", and "stopped" values. ; Some devices can return the additional "open", "parked", "recording", and "seeking" values.(MSDN) ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): Sound Status ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundStatus($sSnd_id) ;return status Return mciSendString("status " & FileGetShortName($sSnd_id) & " mode") EndFunc ;==>_SoundStatus ;=============================================================================== ; ; Function Name: _SoundPos ; Description:: Returns the current position of the song ; Parameter(s): $sSnd_id - Sound ID returned by _SoundOpen or sound file, ; $iMode = 1 - hh:mm:ss, $iMode = 2 - milliseconds ; Requirement(s): AutoIt 3.2 ++ ; Return Value(s): Current Position - Success, @error = 1 - $iMode is invalid ; Author(s): RazerM ; ;=============================================================================== ; Func _SoundPos($sSnd_id, $iMode = 1) ;Declare variables Local $iSnd_pos_ms, $iSnd_pos_min, $iSnd_pos_hour, $iSnd_pos_sec, $sSnd_pos_format ;validate $iMode If $iMode <> 1 And $iMode <> 2 Then Return SetError(1, 0, 0) ;tell mci to use time in milliseconds mciSendString("set " & FileGetShortName($sSnd_id) & " time format miliseconds") ;receive position of sound $iSnd_pos_ms = mciSendString("status " & FileGetShortName($sSnd_id) & " position") ;modify data and assign to variables $iSnd_pos_min = Int($iSnd_pos_ms / 60000) $iSnd_pos_hour = Int($iSnd_pos_min / 60) $iSnd_pos_sec = Int(Int($iSnd_pos_ms / 1000) - ($iSnd_pos_min * 60)) ;assign formatted data to $sSnd_pos_format $sSnd_pos_format = StringFormat("%02i:%02i:%02i", $iSnd_pos_hour, $iSnd_pos_min, $iSnd_pos_sec) ;return correct variable If $iMode = 1 Then Return $sSnd_pos_format If $iMode = 2 Then Return $iSnd_pos_ms EndFunc ;==>_SoundPos ;internal functions Func mciSendString($string) Local $iRet $iRet = DllCall("winmm.dll", "int", "mciSendStringA", "str", $string, "str", "", "int", 65534, "hwnd", 0) If Not @error Then Return $iRet[2] EndFunc ;==>mciSendString Func RandomStr($len) Local $string For $iCurrentPos = 1 To $len $string &= Chr(Random(97, 122, 1)) Next Return $string EndFunc ;==>RandomStr Edited May 10, 2008 by jennico Spoiler I actively support Wikileaks | Freedom for Julian Assange ! | Defend freedom of speech ! | Fight censorship ! | I will not silence.Don't forget this IP: 213.251.145.96 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now