Update of /project/pal/cvsroot/pal In directory clnet:/tmp/cvs-serv3945
Modified Files: ffi.lisp pal.lisp todo.txt Log Message: Bug fixes in ffi.lisp Added some sounds in examples/teddy.lisp
--- /project/pal/cvsroot/pal/ffi.lisp 2007/07/24 12:55:06 1.13 +++ /project/pal/cvsroot/pal/ffi.lisp 2007/07/27 20:12:13 1.14 @@ -472,8 +472,8 @@
(defmethod free-resource ((resource music)) (when (music-music resource) - (setf (music-music resource) nil) - (free-music (music-music resource)))) + (free-music (music-music resource)) + (setf (music-music resource) nil)))
(defmethod free-resource ((resource font)) (when (font-image resource) @@ -483,13 +483,13 @@
(defmethod free-resource ((resource image)) (when (> (image-texture resource) 0) - (setf (image-texture resource) 0) - (gl-delete-texture (image-texture resource)))) + (gl-delete-texture (image-texture resource)) + (setf (image-texture resource) 0)))
(defmethod free-resource ((resource sample)) (when (sample-chunk resource) - (setf (sample-chunk resource) nil) - (free-chunk (sample-chunk resource)))) + (free-chunk (sample-chunk resource)) + (setf (sample-chunk resource) nil)))
(defun free-all-resources () (dolist (r *resources*) @@ -497,22 +497,6 @@ (assert (null *resources*)))
- -(cffi:defctype new-music :pointer) -(defmethod cffi:translate-from-foreign (value (name (eql 'new-music))) - (assert (not (cffi:null-pointer-p value))) - (let ((music (make-music :music value))) - (register-resource music) - music)) - -(cffi:defctype new-sample :pointer) -(defmethod cffi:translate-from-foreign (value (name (eql 'new-sample))) - (assert (not (cffi:null-pointer-p value))) - (let ((sample (make-sample :chunk value))) - (register-resource sample) - sample)) - - ;; Main SDL
(cffi:defcfun ("SDL_Init" init) :int @@ -609,7 +593,7 @@ (cffi:defcfun ("Mix_FreeChunk" free-chunk) :void (chunk :pointer))
-(cffi:defcfun ("Mix_LoadWAV_RW" load-wav-rw) new-sample +(cffi:defcfun ("Mix_LoadWAV_RW" load-wav-rw) :pointer (io :pointer) (int :int))
(defun load-wav (file) @@ -621,7 +605,7 @@ (cffi:defcfun ("Mix_SetPosition" set-position) :int (channel :int) (angle :int16) (distance :uint8))
-(cffi:defcfun ("Mix_QuickLoad_RAW" quickload-raw) new-sample +(cffi:defcfun ("Mix_QuickLoad_RAW" quickload-raw) :pointer (uint8-ptr :pointer) (length :uint32))
(cffi:defcfun ("Mix_PlayChannelTimed" play-channel-timed) :int @@ -632,7 +616,7 @@
(cffi:defcfun ("Mix_HaltMusic" halt-music) :int)
-(cffi:defcfun ("Mix_LoadMUS" load-music) new-music +(cffi:defcfun ("Mix_LoadMUS" load-music) :pointer (file :string))
(cffi:defcfun ("Mix_PlayMusic" play-music) :int --- /project/pal/cvsroot/pal/pal.lisp 2007/07/24 12:55:06 1.19 +++ /project/pal/cvsroot/pal/pal.lisp 2007/07/27 20:12:14 1.20 @@ -4,7 +4,7 @@ ;; fix the fps ;; clean up the do-event ;; open quads and other optimisations -;; test with latest cffi and sdl libs +;; test with latest sdl libs
(declaim (optimize (speed 3) @@ -56,7 +56,7 @@ (when *pal-running* (close-pal)) (pal-ffi:init (logior pal-ffi:+init-video+ pal-ffi:+init-audio+)) - (pal-ffi:open-audio 22050 pal-ffi:+audio-s16+ 2 2048) + (pal-ffi:open-audio 22050 pal-ffi:+audio-s16+ 0 2048) (pal-ffi:gl-set-attribute pal-ffi:+gl-depth-size+ 0) (pal-ffi:gl-set-attribute pal-ffi:+gl-doublebuffer+ 1) (pal-ffi:gl-pixel-store pal-ffi:+gl-pack-alignment+ 1) @@ -699,15 +699,20 @@ (defun load-sample (file &optional (volume 255)) "Volume 0-255" (let ((sample (pal-ffi:load-wav (data-path file)))) - (pal-ffi:volume-chunk (pal-ffi:sample-chunk sample) (1+ (truncate volume 2))) - sample)) + (assert (not (cffi:null-pointer-p sample))) + (let ((sample (pal-ffi:register-resource (pal-ffi::make-sample :chunk sample)))) + (pal-ffi:volume-chunk (pal-ffi:sample-chunk sample) (1+ (truncate volume 2))) + sample)))
(declaim (inline play-sample)) (defun play-sample (sample &key (loops nil) (angle 0) (volume 255)) - "Angle is an integer between 0-360. Volume is an integer between 0-255." - (let ((channel (pal-ffi:play-channel -1 (pal-ffi:sample-chunk sample) (if (numberp loops) - loops - 0)))) + "Loops is: t = forever, nil = once, number = number of loops. Angle is an integer between 0-360. Volume is an integer between 0-255." + (let ((channel (pal-ffi:play-channel -1 (pal-ffi:sample-chunk sample) (cond + ((numberp loops) + loops) + ((eq t loops) + -1) + (t 0))))) (pal-ffi:set-position channel (truncate angle) (- 255 volume)) channel))
@@ -720,15 +725,17 @@ ;;; Music
(defun load-music (file) - (pal-ffi:load-music (data-path file))) + (let ((music (pal-ffi:load-music (data-path file)))) + (assert (not (cffi:null-pointer-p music))) + (let ((music (pal-ffi::make-music :music music))) + (pal-ffi:register-resource music))))
(defun play-music (music &key (loops t) (volume 255)) "Volume 0-255. Loops is: t = forever, nil = once, number = number of loops" - (let ((loops (truncate loops))) - (pal-ffi:volume-music (1+ (truncate volume 2))) - (pal-ffi:play-music (pal-ffi:music-music music) (cond ((eq loops t) -1) - ((null loops) 0) - (t loops))))) + (pal-ffi:volume-music (1+ (truncate volume 2))) + (pal-ffi:play-music (pal-ffi:music-music music) (cond ((eq loops t) -1) + ((null loops) 0) + (t (truncate loops)))))
(defun set-music-volume (volume) "Volume 0-255" --- /project/pal/cvsroot/pal/todo.txt 2007/07/21 16:34:16 1.13 +++ /project/pal/cvsroot/pal/todo.txt 2007/07/27 20:12:14 1.14 @@ -6,6 +6,9 @@
- Image tiles and animation.
+- Add more complex sound/music handling functions, channel set volume/dir, + fade/etc. music. + - Box/box/line/circle etc. overlap functions, faster v-dist.
- Improved texture handling.