diff options
author | David Thompson <dthompson2@worcester.edu> | 2014-06-28 18:46:16 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2014-06-28 18:46:16 -0400 |
commit | f47eb69a354188154731846dde8b384c2c2f39f6 (patch) | |
tree | 6aa1ccb9212836b7c941e771475eb995fa6df9f9 /sly/audio.scm | |
parent | df0f2a5f3f09394f1953abbc7e33e9a98204680e (diff) |
Rename guile-2d to Sly!
Massive find/replace job.
Diffstat (limited to 'sly/audio.scm')
-rw-r--r-- | sly/audio.scm | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/sly/audio.scm b/sly/audio.scm new file mode 100644 index 0000000..715df11 --- /dev/null +++ b/sly/audio.scm @@ -0,0 +1,128 @@ +;;; Sly +;;; Copyright (C) 2013, 2014 David Thompson <dthompson2@worcester.edu> +;;; +;;; This program 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. +;;; +;;; This program 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: +;; +;; Wrappers over SDL mixer. +;; +;;; Code: + +(define-module (sly audio) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-2) + #:use-module ((sdl mixer) #:prefix SDL:) + #:export (enable-audio + load-sample + sample? + sample-audio + sample-volume + 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) + (SDL: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 (load-sample filename) + "Load audio sample from FILENAME or return #f if the file cannot be +loaded" + (let ((audio (SDL:load-wave filename))) + (if audio (make-sample audio) #f))) + +(define (sample-volume) + "Return the volume that all samples are played at." + (SDL:volume)) + +(define (set-sample-volume volume) + "Set the volume that all samples are played at to VOLUME." + (ignore-value (SDL:volume volume))) + +(define (play-sample sample) + "Play the given audio SAMPLE." + (ignore-value (SDL:play-channel (sample-audio sample)))) + +;; Wrapper over SDL music objects. +(define-record-type <music> + (make-music audio) + music? + (audio music-audio)) + +(define (load-music filename) + "Load music from FILENAME or return #f if the file cannot be +loaded." + (let ((audio (SDL:load-music filename))) + (if audio (make-music audio) #f))) + +(define (music-volume) + "Return the volume that music is played at." + (SDL:music-volume)) + +(define (set-music-volume volume) + "Set the volume that music is played at to VOLUME." + (ignore-value (SDL:volume volume))) + +(define (play-music music) + "Play the given MUSIC." + (ignore-value (SDL:play-music (music-audio music)))) + +(define (pause-music) + "Pause the current music track." + (ignore-value (SDL:pause-music))) + +(define (resume-music) + "Resume the current music track." + (ignore-value (SDL:resume-music))) + +(define (rewind-music) + "Restart the current music track." + (ignore-value (SDL:rewind-music))) + +(define (stop-music) + "Stop playing the current music track." + (ignore-value (SDL:halt-music))) + +(define (music-playing?) + "Return #t if music is currently playing, otherwise return #f." + (SDL:playing-music?)) + +(define (music-paused?) + "Return #t if music is currently paused, otherwise return #f." + (SDL:paused-music?)) |