Что нового

Создание регулятора громкости для программы AutoIt

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Доброго времени суток.

Затеялся создать мини-плеер для предпрослушивания музыки. Набор функций - минимален. Однако столкнулся с проблемой:
как реализовать в плеере(программе) управление собственной(не общей!) громкостью звука?
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот пример:
Код:
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <WindowsConstants.au3>

Global $oWMP = ObjCreate("WMPlayer.OCX.7")

$Form1 = GUICreate("Test", 345, 60, 297, 249)
$Input1 = GUICtrlCreateInput("", 8, 8, 281, 21)
$Open = GUICtrlCreateButton("...", 296, 7, 43, 23)
Global $Slider1 = GUICtrlCreateSlider(8, 32, 278, 22, $TBS_NOTICKS)
GUICtrlSetData(-1, $oWMP.Settings.Volume)
GUISetState()

GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Open
			$File = FileOpenDialog('', '', 'MP3 File (*.mp3)')
			If @error Then ContinueLoop
			GUICtrlSetData($Input1, $File)
			$oWMP.Url = $File
			$oWMP.Controls.Play
		Case $Slider1
			$oWMP.Settings.Volume = GUICtrlRead($Slider1)
	EndSwitch
WEnd

Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    If $LParam = GUICtrlGetHandle($Slider1) Then $oWMP.Settings.Volume = GUICtrlRead($Slider1)
EndFunc
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Zaramot
Код:
C:\Users\??????\Documents\AutoIt Projects\bred5.au3 (102) : ==> Variable must be of type "Object".:
GUICtrlSetData(-1, $oWMP.Settings.Volume)
GUICtrlSetData(-1, $oWMP^ ERROR]


Добавлено:
Сообщение автоматически объединено:

Это объектно-ориентирование программирование, насколько я понял?
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
У меня XP и все прекрасно работает. Попробуйте убрать эту строку.
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Zaramot
Убрал. После выбора файла есть еще одна ошибка:
Код:
C:\Users\??????\Documents\AutoIt Projects\bred5.au3 (116) : ==> Variable must be of type "Object".:
$oWMP.Url = $File
$oWMP^ ERROR


Добавлено:
Сообщение автоматически объединено:

Windows 7


Добавлено:
Сообщение автоматически объединено:

Пишу, кстати, примитивно. ООП не понимаю, к сожалению. Поэтому, наверное, лучше показывать пример на моем коде:
Код:
#include <Sound.au3>
Global $file=0, $sec=-1

If $CmdLine[0] Then $file=$CmdLine[1]

$open=_SoundOpen($file)

If @error Then
	MsgBox(0,'','Error!')
	Exit
EndIf

GuiCreate('sound',300,100)
GUISetFont(10)
$l=GUICtrlCreateLabel('leext',10,10,100,20)
GUISetState()

_SoundPlay($open)

Do
	$msg=GuiGetMsg()
	If $sec<>@SEC Then
		$sec=@SEC
		$pos=StringTrimLeft(_SoundPos($open),3)
		GUICtrlSetData($l,$pos)
	EndIf
Until $msg=-3
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Используйте SoundSetWaveVolume():
Код:
#include <GUIConstantsEx.au3>
#include <Sound.au3>
#include <SliderConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Test", 345, 60, 297, 249)
$Input1 = GUICtrlCreateInput("", 8, 8, 281, 21)
$Open = GUICtrlCreateButton("...", 296, 7, 43, 23)
Global $Slider1 = GUICtrlCreateSlider(8, 32, 278, 22, $TBS_NOTICKS)
GUICtrlSetData(-1, 50)
GUISetState()

GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Open
			$File = FileOpenDialog('', '', 'MP3 File (*.mp3)')
			If @error Then ContinueLoop
			GUICtrlSetData($Input1, $File)
			_SoundPlay($File)
		Case $Slider1
			SoundSetWaveVolume(GUICtrlRead($Slider1))
	EndSwitch
WEnd

Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    If $LParam = GUICtrlGetHandle($Slider1) Then SoundSetWaveVolume(GUICtrlRead($Slider1))
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот по вашему примеру:
Код:
#include <Sound.au3>
#include <SliderConstants.au3>
#include <WindowsConstants.au3>

Global $file=0, $sec=-1, $Slider1

If $CmdLine[0] Then $file=$CmdLine[1]

$open=_SoundOpen($file)

If @error Then
    MsgBox(0,'','Error!')
    Exit
EndIf

GuiCreate('sound',300,100)
GUISetFont(10)
$l=GUICtrlCreateLabel('leext',10,10,100,20)
$Slider1 = GUICtrlCreateSlider(20, 50, 200, 20, $TBS_NOTICKS)
GUICtrlSetData(-1, 50)
SoundSetWaveVolume(50)
GUISetState()

_SoundPlay($open)
GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")

Do
    $msg=GuiGetMsg()
    If $sec<>@SEC Then
        $sec=@SEC
        $pos=StringTrimLeft(_SoundPos($open),3)
        GUICtrlSetData($l,$pos)
    EndIf
Until $msg=-3


Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    If $LParam = GUICtrlGetHandle($Slider1) Then SoundSetWaveVolume(GUICtrlRead($Slider1))
EndFunc
 
Верх