source: project/release/4/sdl-mixer/tags/0.5/sdl-mixer.scm @ 27299

Last change on this file since 27299 was 27299, checked in by Christian Kellermann, 9 years ago

sdl-mixer: screw you svn

File size: 4.1 KB
Line 
1(module
2 sdl-mixer
3 (open-audio
4  close-audio
5  load-music
6  play-music
7  halt-music
8  pause-music
9  resume-music
10  rewind-music
11  music-finished
12  music-type
13  music-volume
14  music-playing?
15  load-sample
16  play-sample
17  pause-channel
18  resume-channel
19  halt-channel
20  channel-finished
21  channel-playing?
22  channel-paused?)
23
24 (import chicken scheme foreign)
25 (use sdl-mixer-lolevel sdl)
26
27 (define audio-opened #f)
28 (define initialized #f)
29
30 (define (sdl-mixer-condition #!optional reason)
31   (signal (make-composite-condition
32            (make-property-condition 'exn  'message (or reason (mix-get-error)))
33            (make-property-condition 'sdl)
34            (make-property-condition 'mixer))))
35
36 (define (open-audio #!key
37                     (sampling-rate 44100)
38                     (sample-format AUDIO_S16SYS)
39                     (channels 2)
40                     (chunk-size 1024))
41   (when audio-opened
42         (mix-close-audio))
43   (unless initialized
44           (sdl-init SDL_INIT_AUDIO)
45           (mix-init (bitwise-ior MIX_INIT_MP3 MIX_INIT_OGG MIX_INIT_FLAC))
46           (set! initialized #t))
47   (mix-open-audio sampling-rate sample-format channels chunk-size))
48
49 (define (close-audio)
50   (when (and initialized audio-opened)
51         (set! audio-opened #f)
52         (mix-close-audio)))
53
54 (define (load-music filename)
55   (let ((m (mix-load-mus filename)))
56     (unless m (sdl-mixer-condition))
57     (set-finalizer! m mix-free-music)
58     m))
59
60 (define (play-music music #!key
61                     (repeat 0)
62                     (fadein #f)
63                     (volume #f))
64   (let ((m (if (string? music)
65                (load-music music)
66                music))
67         (r (if (eq? repeat #:forever) -1 repeat)))
68     (when volume (mix-volume-music volume))
69     (if (= -1
70            (cond (fadein (mix-fadein-music m r fadein))
71                  (else (mix-play-music m r))))
72         (sdl-mixer-condition)
73         m)))
74
75 (define (halt-music #!key fadeout)
76   (if fadeout
77       (mix-fadeout-music fadeout)
78       (mix-halt-music)))
79
80 (define pause-music mix-pause-music)
81 (define resume-music mix-resume-music)
82 (define rewind-music mix-rewind-music)
83
84 (define (music-finished handler)
85   (unless (procedure? handler)
86           (error "music-finished: Not a procedure " handler))
87   (set-music-finished-cb handler))
88
89 (define (music-type m)
90   (let ((t (mix-get-music-type m)))
91     (cond
92      ((equal? t MUS_CMD) 'user-specific)
93      ((equal? t MUS_WAV) 'wav)
94      ((equal? t MUS_MP3) 'mp3)
95      ((equal? t MUS_MOD) 'mod)
96      ((equal? t MUS_MID) 'midi)
97      ((equal? t MUS_OGG) 'ogg)
98      (else 'unkown))))
99
100 (define (music-volume #!optional new)
101   (mix-volume-music (or new -1)))
102
103 (define music-playing? mix-playing-music)
104
105 (define (load-sample filename)
106   (let ((s (mix-loadWAV filename)))
107     (unless (mix-chunk-pointer s) (sdl-mixer-condition))
108     (set-finalizer! s mix-free-chunk)
109     s))
110
111 (define (play-sample sample
112                      #!key
113                      (channel -1)
114                      (repeat #f)
115                      (fadein #f)
116                      (duration #f))
117   (let* ((r (or repeat 0))
118          (c (cond ((and duration fadein)
119                    (mix-fadein-channel-timed channel sample r fadein duration))
120                   (duration
121                    (mix-play-channel-timed channel sample r duration))
122                   (fadein
123                    (mix-fadein-channel channel sample r fadein))
124                   (else
125                    (mix-play-channel channel sample r)))))
126     (if (= -1 c) (sdl-mixer-condition) c)))
127
128 (define (pause-channel #!optional (channel -1))
129   (mix-pause channel))
130
131 (define (resume-channel #!optional (chan -1))
132   (mix-resume chan))
133
134 (define (halt-channel #!optional (channel -1) #!key fadeout)
135   (if fadeout
136       (mix-fadeout-channel channel fadeout)
137       (mix-halt-channel channel)))
138
139 (define (channel-finished handler)
140   (unless (procedure? handler)
141           (error "channel-finished: Not a procedure: " handler))
142   (set-mix-channel-finished-cb handler))
143
144 (define channel-playing? mix-playing)
145 (define channel-paused? mix-paused) )
Note: See TracBrowser for help on using the repository browser.