Code : Tout sélectionner
; MCITest.au3
;
; An attempt to do some MCI stuff in AutoIT
;
; It's 00:41 AM now. Needs still a lot of rework!
;
;
; 2005-01-09 Sven Pechler
;
; Source: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_recording.asp
#Include <string.au3> ; for _StringRepeat function
#Include <GUIConstants.au3> ; GUI !
Dim $lpszDevice ; Identifier of an MCI device or device driver.
Dim $lpszDeviceID ; Identifier of an MCI device.
; This identifier or alias is assigned when the device is opened.
Dim $lpszOpenFlags ; Flag that identifies what to initialize.
Dim $lpszRequest ; Flag for requesting status information. See table on the web page mentioned above.
; Source: http://msdn.microsoft.com/library/en-us/multimed/htm/_win32_the_wait_notify_and_test_flags.asp
Dim $lpszFlags ; Can be "wait", "notify", or both.
; For digital-video and VCR devices, "test" can also be specified.
Dim $lpszCommand ; mciCommand string to send.
Dim $lpszReturnString ; information will be returned into this string. Reserve enough space!
Dim $cchReturn ; Length of returnstring
Dim $mciError ; mci error code
; STEP 1: Open the device we want to monitor
; Source: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_open.asp
;$lpszDevice = "waveaudio"
$lpszDevice = "new type waveaudio"
$lpszOpenFlags = "alias mywave" ; For all possible flags, see table on web page mentioned above.
$lpszFlags = ""
$lpszCommand = StringFormat( "open %s %s %s", $lpszDevice, $lpszOpenFlags, $lpszFlags );
$lpszReturnString = _StringRepeat( " ", 100 ) ; Information will return in this string
$cchReturn = StringLen($lpszReturnString)
; Size, in characters, of the return buffer specified
; by the lpszReturnString parameter.
$mciError = _mciSendString( $lpszCommand, $lpszReturnString, $cchReturn, 0);
if $mciError[0] <> 0 then _mciShowError($mcierror[0])
; STEP 2: Obtain the audio levels
; Source: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_status_mm.asp
$lpszDeviceID = "mywave"
$lpszRequest = "level" ; Returns the current PCM audio sample value.
; See table on web page mentioned above.
$lpszFlags = ""
$lpszCommand= StringFormat( "status %s %s %s", $lpszDeviceID, $lpszRequest, $lpszFlags );
; Before we collect the information, first create a nice GUI.
GUICreate("MCI wave level test",200,130) ; This will create a centered dialog box
$VolumeLabel=GUICtrlCreateLabel ("Initializing..." , 14, 8, 200, 20)
$ProgressBar = GUICtrlCreateProgress (14,25,180,20)
$ExitButton =GUICtrlCreateButton (" Exit ",80,60)
GUISetState () ; Display the dialog
; Run the GUI until the dialog is closed
While 1
$mciError = _mciSendString( $lpszCommand, $lpszReturnString, $cchReturn, 0);
if $mciError[0] <> 0 then _mciShowError($mcierror[0])
; The average input signal level is returned.
; The left-channel value is in the high-order word and the right-
; or mono-channel value is in the low-order word.
; The input level is represented as an unsigned value.
; For 8-bit samples, this value is in the range 0 through 127 (0x7F).
; For 16-bit samples, it is in the range 0 through 32,767 (0x7FFF).
GUICtrlSetData ($VolumeLabel, "Current wave level is: " & $mcierror[2])
GUICtrlSetData ($ProgressBar,$mcierror[2])
$msg = GUIGetMsg()
Select
case $msg = $Exitbutton
Exit
case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
Wend
GUIDelete()
exit
; USER DEFINED FUNCTIONS
Func _mciSendString( $lpszCommand, $lpszReturnString, $cchReturn, $hwndCallback)
;VB-style declaration:
;
;Declare Function mciSendString
; Lib "winmm.dll"
; Alias "mciSendStringA"
; (ByVal lpstrCommand As String,
; ByVal lpstrReturnString As String,
; ByVal uReturnLength As Long,
; ByVal hwndCallback As Long)
; As Long
; mciSendString returns information in the lpszReturnString parameter of mciSendString.
; The information is dependent on the request type.
Return DllCall("winmm.dll", "long", "mciSendStringA", "str", $lpszCommand, "str", $lpszReturnString, "long", $cchReturn, "long", 0)
EndFunc
Func _mciShowError($mcierror)
; To show a "readable" mci error.
;
;VB-style declaration:
;
;Declare Function mciGetErrorString
; Lib "winmm.dll"
; Alias "mciGetErrorStringA"
; (ByVal dwError As Long,
; ByVal lpstrBuffer As String,
; ByVal uLength As Long)
; As Long
Dim $errStr ; Error message
$errStr=_StringRepeat( " ", 100 ) ; Reserve some space for the error message
$Result=DllCall("winmm.dll","long", "mciGetErrorStringA", "long", $mcierror, "string", $errStr, "long", StringLen($errStr))
MsgBox (0,"MCI test", "MCI Error Number " & $mcierror & ":" & $Result[2] )
EndFunc