Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Для тех кто хочет использовать трекерную музыку в проектах AutoIt.
Трекерная музыка фактически не загружает CPU и из-за её малых размеров, пользуется популярностью программистов при написании кейгенов, кряков, трайнеров, а также инсталяторов.
Для проигрывания трекерных модулей в AutoIt я использую библиотеку BASSMOD.dll.
BASSMOD.dll (не путать с bass.dll) можно скачать c оф. сайта http://www.un4seen.com весит 33,5 КБ
Много трекерной музыки можно найти на сайте http://www.keygenmusic.net а также на http://www.websound.ru

Размещаем в папку \AutoIt3\Include\ скрипт(bassmod.au3) следующего содержания:
Код: Выделить весь код
#include-once
; Поддерживает: .mod .xm .it .s3m .mtm
; P.S. Глобальные константы добавлены исключительно для удобства...
;---------------------------------
; Music flags:
Global Const $BASS_MUSIC_RAMP = 1 ; normal ramping
Global Const $BASS_MUSIC_RAMPS = 2 ; sensitive ramping
Global Const $BASS_MUSIC_LOOP = 4 ; loop music
Global Const $BASS_MUSIC_FT2MOD = 16 ; play .MOD as FastTracker 2 does
Global Const $BASS_MUSIC_PT1MOD = 32 ; play .MOD as ProTracker 1 does
;Global Const $BASS_MUSIC_POSRESET = 256 ; stop all notes when moving position
Global Const $BASS_MUSIC_SURROUND = 512 ;surround sound
Global Const $BASS_MUSIC_SURROUND2 = 1024 ;surround sound (mode 2)
Global Const $BASS_MUSIC_STOPBACK = 2048 ;stop the music on a backwards jump effect
;Global Const $BASS_MUSIC_CALCLEN	= 8192 ;calculate playback length
Global Const $BASS_MUSIC_NONINTER = 16384 ; non-interpolated mixing
;---------------------------------
Func BassMod($dllPath,$sPath,$flag)
	If $dllPath="" Or $dllPath="-1" Then
		$dllPath="BASSMOD.dll"
	EndIf
	If Not FileExists($dllPath) Then
		If Not SysFileExist($dllPath) Then
			MsgBox(16,"Error","Не найден BASSMOD.dll")
			Exit
		EndIf
	EndIf
	Global $music_handle = -1
	Global $BassModDll = DllOpen($dllPath)
	$init = DllCall($BassModDll, "int", "BASSMOD_Init", "int", -1, _  ;device
							"int", 44100, _  ;freq Hz
							"int", 0)       ;flag
	$fName = DllStructCreate("char[255]")
	DllStructSetData($fName, 1, $sPath)
	$load = DllCall($BassModDll, "int", "BASSMOD_MusicLoad", "int", False, _  ;loading from memory
							"ptr", DllStructGetPtr($fName), _ ;file
							"int", 0, _   ;offset
							"int", 0, _   ;length
							"int", $flag) ;flag
	$music_handle = $load[0]
	$fName = 0
	DllCall($BassModDll, "int:cdecl", "BASSMOD_MusicPlay", "int", $music_handle)
EndFunc
Func BassModClose()
	If IsDeclared("BassModDll") Then
		DllCall($BassModDll, "int:cdecl", "BASSMOD_Free", "int", $music_handle) ;clear resource
		DllClose($BassModDll)
	EndIf
EndFunc
; Проверка наличия указанного файла в путях переменной %Path%
Func SysFileExist($sFile)
	$old=@WorkingDir
	$array = StringSplit(EnvGet("PATH"),";")
	For $i=1 To $array[0]
		FileChangeDir($array[$i])
		$get=FileExists($sFile)
		If $get=1 Then ExitLoop
	Next
	FileChangeDir($old)
	Return $get
EndFunc
Синтаксис:
BassMod($dllPath,$sPath,$flag)
$dllPath - Путь к BASSMOD.dll (Если в качестве пути указать (-1 или "") функция поищет BASSMOD.dll в текущем директории а также в путях определённых для системной переменной %path% )
$sPath - Путь к трекерному модулю
$flag - Метод обработки (см. предыдущий код: Music flags)
BassModClose() - закрывает BASSMOD.dll и выгружает музыку из памяти (Эту функцию следует вызывать при выходе из GUI)
Пример использования:
Код: Выделить весь код
#include <GUIConstants.au3> 
#include <bassmod.au3>
Opt("GUIOnEventMode", 1)
$title="BASSMOD_TEST"
$test=GUICreate($title,320,240)
GUISetOnEvent($GUI_EVENT_CLOSE,"ExitGui")
GUISetState()

BassMod(-1,"Music.xm",512+4)

While 1
Sleep(1000)
WEnd

Func ExitGui()
	BassModClose()
	Exit(0)
EndFunc

Последний раз редактировалось Diamond, 17-05-2007 в 12:32. Причина: Поправил кое где тип вызова "cdecl" для autoit-v3.2.4.2

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:26, 09-01-2007 | #114