diff options
Diffstat (limited to 'chickadee/audio.scm')
-rw-r--r-- | chickadee/audio.scm | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/chickadee/audio.scm b/chickadee/audio.scm deleted file mode 100644 index c92eb44..0000000 --- a/chickadee/audio.scm +++ /dev/null @@ -1,147 +0,0 @@ -;;; Chickadee Game Toolkit -;;; Copyright © 2017 David Thompson <davet@gnu.org> -;;; -;;; Chickadee is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published -;;; by the Free Software Foundation, either version 3 of the License, -;;; or (at your option) any later version. -;;; -;;; Chickadee is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;; General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see -;;; <http://www.gnu.org/licenses/>. - -;;; Commentary: -;; -;; Sound effects and music. -;; -;;; Code: - -(define-module (chickadee audio) - #:use-module (ice-9 format) - #:use-module (srfi srfi-9) - #:use-module (srfi srfi-9 gnu) - #:use-module ((sdl2 mixer) #:prefix sdl2:) - #:export (load-sample - sample? - sample-audio - set-sample-volume! - play-sample - load-music - music? - music-audio - music-volume - play-music - set-music-volume! - pause-music - resume-music - rewind-music - stop-music - music-paused? - music-playing?)) - -(define (enable-audio) - ;; The SDL mixer will throw an exception if it cannot initialize a - ;; particular audio format. We don't want this to be fatal, so we - ;; ignore it. - (false-if-exception (sdl2:mixer-init)) - (sdl2:open-audio)) - -;; Used to wrap SDL audio functions whose return values should be -;; ignored. -(define-syntax-rule (ignore-value body ...) - (begin - body ... - *unspecified*)) - -;; Wrapper over SDL audio objects. -(define-record-type <sample> - (make-sample audio) - sample? - (audio sample-audio)) - -(define (display-sample sample port) - (format port "#<sample ~x>" (object-address sample))) - -(set-record-type-printer! <sample> display-sample) - -(define (load-sample file) - "Load audio sample from FILE." - (let ((audio (sdl2:load-chunk file))) - (if audio - (make-sample audio) - (error "cannot load audio sample:" file)))) - -(define (set-sample-volume! volume) - "Set the volume that all samples are played at to VOLUME, a floating -point value between 0 and 1." - (ignore-value - (sdl2:set-channel-volume! #f (inexact->exact (round (* volume 128.0)))))) - -(define (play-sample sample) - "Play SAMPLE." - (ignore-value - ;; An exception will be thrown if too many samples are being played - ;; at once, but it can be safely ignored. - (false-if-exception - (sdl2:play-chunk! (sample-audio sample))))) - -;; Wrapper over SDL music objects. -(define-record-type <music> - (make-music audio) - music? - (audio music-audio)) - -(define (display-music music port) - (format port "#<music ~x>" (object-address music))) - -(set-record-type-printer! <music> display-music) - -(define (load-music file) - "Load music from FILE." - (make-music (sdl2:load-music file))) - -(define (music-volume) - "Return the volume level for music, a floating point value between -0 and 1." - (/ (sdl2:music-volume) 128.0)) - -(define (set-music-volume! volume) - "Set the volume that music is played at to VOLUME, a floating point -value between 0 and 1." - (ignore-value - (sdl2:set-music-volume! - (inexact->exact (round (* volume 128.0)))))) - -(define* (play-music music #:key loop?) - "Play MUSIC. If LOOP?, play it over and over and over and over -and..." - (sdl2:play-music! (music-audio music) (if loop? #f 1))) - -(define (pause-music) - "Pause the current music track." - (sdl2:pause-music!)) - -(define (resume-music) - "Resume the current music track." - (sdl2:resume-music!)) - -(define (rewind-music) - "Restart the current music track from the beginning." - (sdl2:rewind-music!)) - -(define (stop-music) - "Stop playing the current music track." - (sdl2:stop-music!)) - -(define (music-playing?) - "Return #t if music is currently playing." - (sdl2:music-playing?)) - -(define (music-paused?) - "Return #t if music is currently paused." - (sdl2:music-paused?)) |