X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela_sound.lisp;h=e1b2a1e8a157b33a81740e6d08f1428471049285;hb=6a3d1ffb69036e6d4f1c239fd7d52f9bfc48d50c;hp=ae9b72ba57c164dac08de9de1fc32200b91c4f72;hpb=fd0956a0072b3db8808880bd3d4dbf17d941265d;p=gacela.git diff --git a/gacela_sound.lisp b/gacela_sound.lisp index ae9b72b..e1b2a1e 100644 --- a/gacela_sound.lisp +++ b/gacela_sound.lisp @@ -20,3 +20,71 @@ (in-package 'gacela :nicknames '(gg) :use '(lisp))) +;;; Sound + +(defun load-sound (filename &key static) + (let ((key (make-resource-sound :filename filename))) + (cond ((get-resource key) key) + (t (true-load-sound filename static))))) + +(defun true-load-sound (filename static) + (init-audio) + (let ((key (make-resource-sound :filename filename)) + (sound (Mix_LoadWAV filename))) + (cond ((/= sound 0) + (set-resource key + `(:id-sound ,sound) + (lambda () (true-load-sound filename static)) + (lambda () (Mix_FreeChunk sound)) + :static static) + key)))) + +(defun play-sound (sound &optional (loops 0)) + (let ((id-sound (getf (get-resource sound) :id-sound))) + (/= (Mix_PlayChannel -1 id-sound loops) -1))) + + +;;; Music + +(defun load-music (filename &key static) + (let ((key (make-resource-music :filename filename))) + (cond ((get-resource key) key) + (t (true-load-music filename static))))) + +(defun true-load-music (filename static) + (init-audio) + (let ((key (make-resource-music :filename filename)) + (music (Mix_LoadMUS filename))) + (cond ((/= music 0) + (set-resource key + `(:id-music ,music) + (lambda () (true-load-music filename static)) + (lambda () (Mix_FreeMusic music)) + :static static) + key)))) + +(defun playing-music? () + (/= (Mix_PlayingMusic) 0)) + +(defun paused-music? () + (/= (Mix_PausedMusic) 0)) + +(defun play-music (music &optional (loops -1)) + (cond ((not (playing-music?)) + (let ((id-music (getf (get-resource music) :id-music))) + (/= (Mix_PlayMusic id-music loops) -1))))) + +(defun pause-music () + (cond ((and (playing-music?) (not (paused-music?))) + (Mix_PauseMusic) + t))) + +(defun resume-music () + (cond ((and (playing-music?) (paused-music?)) + (Mix_ResumeMusic) + t))) + +(defun halt-music () + (cond ((playing-music?) + (Mix_HaltMusic) + t)))