fixed blit with new rect
[sdlgit/SDL_perl.git] / lib / SDL / Mixer.pm
CommitLineData
7b6a53a1 1#!/usr/bin/env perl
2#
3# Mixer.pm
4#
5# Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
6#
7# ------------------------------------------------------------------------------
8#
9# This library is free software; you can redistribute it and/or
10# modify it under the terms of the GNU Lesser General Public
11# License as published by the Free Software Foundation; either
12# version 2.1 of the License, or (at your option) any later version.
13#
14# This library is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17# Lesser General Public License for more details.
18#
19# You should have received a copy of the GNU Lesser General Public
20# License along with this library; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22#
23# ------------------------------------------------------------------------------
24#
25# Please feel free to send questions, suggestions or improvements to:
26#
27# David J. Goehrig
28# dgoehrig@cpan.org
8fde61e3 29#
8fde61e3 30
31package SDL::Mixer;
7b6a53a1 32
8fde61e3 33use strict;
084b921f 34use warnings;
35use Carp;
36
8fde61e3 37use SDL;
38use SDL::Sound;
39use SDL::Music;
40
41BEGIN {
42}
43
44$SDL::Mixer::initialized = 0;
45
46sub new {
47 my $proto = shift;
48 my $class = ref($proto) || $proto;
49 my $self = {};
50 my %options = @_;
51 my $frequency = $options{-frequency} || $options{-rate} || SDL::MIX_DEFAULT_FREQUENCY();
52 my $format = $options{-format} || SDL::MIX_DEFAULT_FORMAT();
53 my $channels = $options{-channels} || SDL::MIX_DEFAULT_CHANNELS();
54 my $size = $options{-size} || 4096;
55 unless ( $SDL::Mixer::initialized ) {
56 SDL::MixOpenAudio($frequency,$format,$channels,$size ) &&
084b921f 57 croak SDL::GetError();
8fde61e3 58 $SDL::Mixer::initialized = 1;
59 } else {
60 ++$SDL::Mixer::initialized;
61 }
62 bless $self,$class;
63 return $self;
64}
65
66sub DESTROY {
67 my $self = shift;
68 --$SDL::Mixer::initialized;
69 unless ($SDL::Mixer::initialized) {
70 SDL::MixCloseAudio();
71 }
72}
73
74
75sub query_spec () {
76 my ($status,$freq,$format,$channels) = SDL::MixQuerySpec();
77 my %hash = ( -status => $status, -frequency => $freq,
78 -format => $format, -channels => $channels );
79 return \%hash;
80}
81
82sub reserve_channels ($$) {
83 my ($self,$channels) = @_;
84 return SDL::MixReserveChannels($channels);
85}
86
87sub allocate_channels ($$) {
88 my ($self,$channels) = @_;
89 return SDL::MixAllocateChannels($channels);
90}
91
92sub group_channel ($$$) {
93 my ($self,$channel,$group) = @_;
94 return SDL::MixGroupChannel($channel, $group);
95}
96
97sub group_channels ($$$$) {
98 my ($self,$from,$to,$group) = @_;
99 return SDL::MixGroupChannels($from,$to,$group);
100}
101
102sub group_available ($$) {
103 my ($self,$group) = @_;
104 return SDL::MixGroupAvailable($group);
105}
106
107sub group_count ($$) {
108 my ($self,$group) = @_;
109 return SDL::MixGroupCount($group);
110}
111
112sub group_oldest ($$) {
113 my ($self,$group) = @_;
114 return SDL::MixGroupOldest($group);
115}
116
117sub group_newer ($$) {
118 my ($self,$group) = @_;
119 return SDL::MixGroupNewer($group);
120}
121
122sub play_channel ($$$$;$) {
123 my ($self,$channel,$chunk,$loops,$ticks) = @_;
124 $ticks ||= -1;
125 return SDL::MixPlayChannelTimed($channel,$$chunk,$loops,$ticks);
126}
127
128sub play_music ($$$) {
129 my ($self,$music,$loops) = @_;
130 return SDL::MixPlayMusic($$music,$loops);
131}
132
133sub fade_in_channel ($$$$$;$) {
134 my ($self,$channel,$chunk,$loops,$ms,$ticks) = @_;
135 $ticks ||= -1;
136 return SDL::MixFadeInChannelTimed($channel,$$chunk,$loops,$ms,$ticks);
137}
138
139sub fade_in_music ($$$$) {
140 my ($self,$music,$loops,$ms) = @_;
141 return SDL::MixFadeInMusic($$music,$loops,$ms);
142}
143
144sub channel_volume ($$$) {
145 my ($self,$channel,$volume) = @_;
146 return SDL::MixVolume($channel,$volume);
147}
148
149sub music_volume ($$) {
150 my ($self,$volume) = @_;
151 return SDL::MixVolumeMusic($volume);
152}
153
154sub halt_channel ($$) {
155 my ($self,$channel) = @_;
156 return SDL::MixHaltChannel($channel);
157}
158
159sub halt_group ($$) {
160 my ($self,$group) = @_;
161 return SDL::MixHaltGroup($group);
162}
163
164sub halt_music (){
165 return SDL::MixHaltMusic();
166}
167
168sub channel_expire ($$$) {
169 my ($self,$channel,$ticks) = @_;
170 return SDL::MixExpireChannel($channel,$ticks);
171}
172
173sub fade_out_channel ($$$) {
174 my ($self,$channel,$ms) = @_;
175 return SDL::MixFadeOutChannel($channel,$ms);
176}
177
178sub fade_out_group ($$$) {
179 my ($self,$group,$ms) = @_;
180 return SDL::MixFadeOutGroup($group,$ms);
181}
182
183sub fade_out_music ($$) {
184 my ($self,$ms) = @_;
185 return SDL::MixFadeOutMusic($ms);
186}
187
188sub fading_music () {
189 return SDL::MixFadingMusic();
190}
191
192sub fading_channel ($$) {
193 my ($self,$channel) = @_;
194 return SDL::MixFadingChannel($channel);
195}
196
197sub pause ($$) {
198 my ($self,$channel) = @_;
199 SDL::MixPause($channel);
200}
201
202sub resume ($$) {
203 my ($self,$channel) = @_;
204 SDL::MixResume($channel);
205}
206
207sub paused ($$) {
208 my ($self,$channel) = @_;
209 return SDL::MixPaused($channel);
210}
211
212sub pause_music () {
213 SDL::MixPauseMusic();
214}
215
216sub resume_music () {
217 SDL::MixResumeMusic();
218}
219
220sub rewind_music (){
221 SDL::MixRewindMusic();
222}
223
224sub music_paused (){
225 return SDL::MixPausedMusic();
226}
227
228sub playing ($$) {
229 my ($self,$channel) = @_;
230 return SDL::MixPlaying($channel);
231}
232
233sub playing_music () {
234 return SDL::MixPlayingMusic();
235}
236
2371;
238
239__END__;
240
241=pod
242
243=head1 NAME
244
245SDL::Mixer - a SDL perl extension
246
247=head1 SYNOPSIS
248
249 $mixer = new SDL::Mixer -frequency => MIX_DEFAULT_FREQUENCY,
250 -format => MIX_DEFAULT_FORMAT,
251 -channels => MIX_DEFAULT_CHANNELS,
252 -size => 4096;
253
254=head1 DESCRIPTION
255
256SDL::Mixer allows you access to the SDL mixer library, enablig sound and
257music volume setting, playing, pausing and resuming, as well as fading
258the sound and music in and out.
259
260=head1 METHODS
261
262=head2 new()
263
264 $mixer = SDL::Mixer->new( -frequency => MIX_DEFAULT_FREQUENCY,
265 -format => MIX_DEFAULT_FORMAT,
266 -channels => MIX_DEFAULT_CHANNELS,
267 -size => 4096);
268
269Creates a new SDL::Mixer object. C<$size> is the buffer size in bytes.
270
271=head2 query_spec()
272
273 my $specs = SDL::Mixer::query_spec();
274
275Returns a hash reference, containing the following keys and their respective
276values:
277
278 -status
279 -frequency
280 -channels
281 -format
282
283=head2 reserve_channels
284
285 $mixer->reserve_channels(4);
286
287Reserve so many channels.
288
289=head2 allocate_channels()
290
291 $mixer->reserve_channels(2);
292
293Allocate so many channels.
294
295=head2 group_channel(channel,group)
296
297Group the channel number C<$channel> into group C<$group>.
298
299=head2 group_channels(from,to,group)
300
301Groups a range of channels
302
303=head2 group_available(group)
304
305Return true when the group is available.
306
307=head2 group_count(group)
308
309Returns the number of channels in the group
310
311=head2 group_oldest()
312
313
314=head2 group_newer()
315
316
317=head2 play_channel()
318
319
320=head2 play_music()
321
322Play C<$music> C<$loop> times.
323
324=head2 fade_in_channel(channel,chunk,loops,ms,ticks)
325
326Fades a channel in
327
328=head2 fade_in_music(music,loops,ms)
329
330Fades the music in over a number of ms, looping as it does
331
332=head2 channel_volume(channel,volume)
333
334Sets the volume for a single channel
335
336=head2 mucis_volume(volume)
337
338Set the volume for the music.
339
340=head2 halt_channel(channel)
341
342Stops a specific channel
343
344=head2 halt_group(group)
345
346Stops a group of channels
347
348=head2 halt_music()
349
350Stops the music
351
352=head2 channel_expire(channel,ticks)
353
354Ignores the channel after C<ticks> has expired
355
356=head2 fade_out_channel(channel,ms)
357
358Fade the channel number C<$channel> in C<$ms> ms out.
359
360=head2 fade_out_group(group,ms)
361
362Fade the channel group C<$group> in C<$ms> ms out.
363
364=head2 fade_out_music(ms)
365
366Fade the music in C<$ms> ms out.
367
368=head2 fading_music()
369
370Return true when the music is currently fading in or out.
371
372=head2 fading_channel()
373
374Return true when the channel number C<$channel> is currently fading in or out.
375
376=head2 pause( channel )
377
378Pause the channel C<$channel>.
379
380=head2 resume(channel)
381
382Resume the channel C<$channel>.
383
384=head2 paused()
385
386Return true when the channel is currently paused.
387
388=head2 pause_music()
389
390Pause the music play.
391
392=head2 resume_music()
393
394Resume the music play.
395
396=head2 rewind_music()
397
398Resets the music file to the beginning
399
400=head2 music_paused()
401
402Return true when the music is currently paused.
403
404=head2 playing()
405
406Return true when the channel is currently playing.
407
408=head2 playing_music ()
409
410Return true when the music is currently playing.
411
412=head1 AUTHORS
413
414David J. Goehrig, basic doc added by Tels <http://bloodgate.com>.
415
416=head1 SEE ALSO
417
418L<perl>, L<SDL::Music> and L<SDL::Sound>.
419
420=cut