]> git.jsancho.org Git - gacela.git/blobdiff - gacela_sound.lisp
(no commit message)
[gacela.git] / gacela_sound.lisp
index ae9b72ba57c164dac08de9de1fc32200b91c4f72..e1a4c9b2db3de4973c5890d3822aa6615d8e176a 100644 (file)
           (in-package 'gacela :nicknames '(gg) :use '(lisp)))
 
 
+(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)))
+
+(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 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)))))