Что нового

Звук на заднем плане

AnyMak

Новичок
Вообщем нужно сделать так, что бы помимо показа GUI, еще играла музыка, но не просто играла, а играла постоянно, как в KeyGen'ах (то есть как только кончается, заного включается "autoplay"), при этом
 

madmasles

Модератор
Глобальный модератор
AnyMak,
Попробуйте так.
Код:
#include <File.au3>
#include <Sound.au3>

Opt('MustDeclareVars', 1)

Global $hSound, $iTime, $sFilePlay = _TempFile(@TempDir, '~', '.mp3')

HotKeySet('{Esc}', '_Exit')
;file.mp3 при компиляции или при запуске из SciTE должен быть в одной папке со скриптом.
If Not FileInstall('file.mp3', $sFilePlay, 1) Then
	MsgBox(16, 'Error', 'FileInstall')
	Exit
EndIf
$hSound = _SoundOpen($sFilePlay)
If @error Then _Exit()
$iTime = _SoundLength($hSound, 2)
If @error Then _Exit()
AdlibRegister('_Play', $iTime)
_SoundPlay($hSound, 0)

While 1
	;тут делайте то, что Вам надо.
	Sleep(100)
WEnd

Func _Play()
	_SoundPlay($hSound, 0)
EndFunc   ;==>_Play

Func _Exit()
	_SoundClose($hSound)
	FileDelete($sFilePlay)
	Exit
EndFunc   ;==>_Exit
 
Автор
A

AnyMak

Новичок
Спасибо, хоть у меня это и не работает, но кое чем помогло, вообщем нашла исходник Music Player на AutoIt и переделала, теперь можно задать имя файла, не теряя при этом цикл Вообщем вот-
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <Sound.au3>

GUICreate("Background Music", Default, Default) ;Создаем окно
GUISetState() ;Показываем

Global $S_SongPosCheck = "", $S_Name = "", $S_SongPos = "",$S_SongFile = "" ;Обнуляем переменные
$S_Song = "C:\Users\zBlock\Desktop\bg.mp3" ;Задаем путь файла, который будем играть
$S_SongNameSplit = StringSplit($S_Song, "\") ;Получаем имя файла
$S_SongNameGetSplit = $S_SongNameSplit[0] ;Записываем в новую переменную
If @error Then ;Если ошибка, то
	_SoundStop($S_SongFile) ;Останавливаем
	_SoundClose($S_SongFile) ;Закрываем
	MsgBox(16,"Ошибка","Невозможно открыть файл") ;Выводим сообщение
	Exit ;Выходим
EndIf ;Конец
If $S_SongNameSplit <> "" Then ;Если получили имя файла, то
	_SoundStop($S_SongFile) ;Останавливаем
	_SoundClose($S_SongFile) ;Закрываем
	$S_Name = $S_SongNameSplit[$S_SongNameGetSplit] ;Обновляем имя
	$S_SongFile = _SoundOpen($S_Song) ;Открываем
	$S_SongPos = _SoundPos($S_Song) & " / " & _SoundLength($S_SongFile) ;Обновляем позицию
Else ;Если не получили имя файла, то
	MsgBox(16,"Ошибка","Невозможно получить имя") ;Выводим сообщение
	Exit ;Выходим
EndIf ;Конец
_SoundPlay($S_SongFile) ;Проигрываем файл

While 1 ;Беск. Цикл
    sleep(10) ;Спим 10 м.секунд
    $S_FilePos = _SoundPos($S_SongFile) ;Получаем максимальную позицию файла
    If $S_SongPosCheck <> $S_FilePos Then ;Если позиция файла не равна максимальной позиции файла, то
        $S_SongPos = _SoundPos($S_SongFile) & " / " & _SoundLength($S_SongFile) ;Обновляем позицию файла
        $S_SongPosCheck = $S_FilePos ;Обновляем проверку позицию файла
    EndIf ;Конец
    If $S_FilePos = _SoundLength($S_SongFile) Then ;Если песня уже кончилась, то
		_SoundStop($S_SongFile) ;Останавливаем
		_SoundPlay($S_SongFile) ;Запускаем заного
    EndIf ;Конец
    $msg = GUIGetMsg() ;
    Select ;
    Case $msg = $GUI_EVENT_CLOSE ;
        Exit ;
    EndSelect ;
WEnd ;Конец беск. цикла
 

madmasles

Модератор
Глобальный модератор
AnyMak [?]
хоть у меня это и не работает
Что здесь не работает?
Код:
#include <Sound.au3>
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Global $hSound, $iTime, $sFilePlay = @ScriptDir & '\file.mp3'

GUICreate('Test')
GUISetState()
$hSound = _SoundOpen($sFilePlay)
If @error Then _Exit()
$iTime = _SoundLength($hSound, 2)
If @error Then _Exit()
_Play()
AdlibRegister('_Play', $iTime)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			_Exit()
	EndSwitch
WEnd

Func _Play()
	_SoundPlay($hSound, 0)
EndFunc   ;==>_Play

Func _Exit()
	_SoundClose($hSound)
	Exit
EndFunc   ;==>_Exit
 
Автор
A

AnyMak

Новичок
Может я что-то не так делаю, но у меня музыка только играет, а цикл не работает...
 

madmasles

Модератор
Глобальный модератор
AnyMak [?]
В вашем скрипте...
В моем скрипте все работает, если Вы его не правили.
Вот Вам с временем, с процентами и с прогрессом.
Код:
#include <Sound.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>

Opt('MustDeclareVars', 1)

Global $hSound, $iTime, $sFilePlay = @ScriptDir & '\file.mp3', _
		$nLabel_All, $nLabel_Time, $iStart, $nProgress, $iStartUpdate

GUICreate('Test', 300, 120)
$nLabel_All = GUICtrlCreateLabel('', 10, 10, 100, 20)
$nLabel_Time = GUICtrlCreateLabel('', 10, 40, 280, 20)
$nProgress = GUICtrlCreateProgress(10, 80, 280, 20)
GUISetState()
$hSound = _SoundOpen($sFilePlay)
If @error Then _Exit()
$iTime = _SoundLength($hSound, 2)
If @error Then _Exit()
GUICtrlSetData($nLabel_All, StringFormat('All time %.1f sec', $iTime / 1000))
_Play()
AdlibRegister('_Play', $iTime)
AdlibRegister('_Time', 500)
ToolTip(StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC), 0, 0)
$iStartUpdate = TimerInit()
While 1
	If TimerDiff($iStartUpdate) >= 1000 Then
		ToolTip(StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC), 0, 0)
		$iStartUpdate = TimerInit()
	EndIf
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			_Exit()
	EndSwitch
WEnd

Func _Play()
	GUICtrlSetData($nProgress, 0)
	$iStart = TimerInit()
	_SoundPlay($hSound, 0)
EndFunc   ;==>_Play

Func _Time()
	Local $i_Timer = TimerDiff($iStart), $i_Persent = 100 * $i_Timer / $iTime
	If $i_Persent > 100 Then $i_Persent = 100
	GUICtrlSetData($nProgress, Int($i_Persent))
	GUICtrlSetData($nLabel_Time, StringFormat('Time play: %.1f sec,  time left: %.1f sec, play: %.1f%', _
			$i_Timer / 1000, ($iTime - $i_Timer) / 1000, $i_Persent))
EndFunc   ;==>_Time

Func _Exit()
	_SoundClose($hSound)
	Exit
EndFunc   ;==>_Exit
 
Автор
A

AnyMak

Новичок
Спасибо, работает, в любом случае тема решена :IL_AutoIt_1:
 
Верх