5 # Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
7 # ------------------------------------------------------------------------------
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.
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.
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
23 # ------------------------------------------------------------------------------
25 # Please feel free to send questions, suggestions or improvements to:
44 $SDL::Mixer::initialized = 0;
48 my $class = ref($proto) || $proto;
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 ) &&
57 croak SDL::GetError();
58 $SDL::Mixer::initialized = 1;
60 ++$SDL::Mixer::initialized;
68 --$SDL::Mixer::initialized;
69 unless ($SDL::Mixer::initialized) {
76 my ($status,$freq,$format,$channels) = SDL::MixQuerySpec();
77 my %hash = ( -status => $status, -frequency => $freq,
78 -format => $format, -channels => $channels );
82 sub reserve_channels ($$) {
83 my ($self,$channels) = @_;
84 return SDL::MixReserveChannels($channels);
87 sub allocate_channels ($$) {
88 my ($self,$channels) = @_;
89 return SDL::MixAllocateChannels($channels);
92 sub group_channel ($$$) {
93 my ($self,$channel,$group) = @_;
94 return SDL::MixGroupChannel($channel, $group);
97 sub group_channels ($$$$) {
98 my ($self,$from,$to,$group) = @_;
99 return SDL::MixGroupChannels($from,$to,$group);
102 sub group_available ($$) {
103 my ($self,$group) = @_;
104 return SDL::MixGroupAvailable($group);
107 sub group_count ($$) {
108 my ($self,$group) = @_;
109 return SDL::MixGroupCount($group);
112 sub group_oldest ($$) {
113 my ($self,$group) = @_;
114 return SDL::MixGroupOldest($group);
117 sub group_newer ($$) {
118 my ($self,$group) = @_;
119 return SDL::MixGroupNewer($group);
122 sub play_channel ($$$$;$) {
123 my ($self,$channel,$chunk,$loops,$ticks) = @_;
125 return SDL::MixPlayChannelTimed($channel,$$chunk,$loops,$ticks);
128 sub play_music ($$$) {
129 my ($self,$music,$loops) = @_;
130 return SDL::MixPlayMusic($$music,$loops);
133 sub fade_in_channel ($$$$$;$) {
134 my ($self,$channel,$chunk,$loops,$ms,$ticks) = @_;
136 return SDL::MixFadeInChannelTimed($channel,$$chunk,$loops,$ms,$ticks);
139 sub fade_in_music ($$$$) {
140 my ($self,$music,$loops,$ms) = @_;
141 return SDL::MixFadeInMusic($$music,$loops,$ms);
144 sub channel_volume ($$$) {
145 my ($self,$channel,$volume) = @_;
146 return SDL::MixVolume($channel,$volume);
149 sub music_volume ($$) {
150 my ($self,$volume) = @_;
151 return SDL::MixVolumeMusic($volume);
154 sub halt_channel ($$) {
155 my ($self,$channel) = @_;
156 return SDL::MixHaltChannel($channel);
159 sub halt_group ($$) {
160 my ($self,$group) = @_;
161 return SDL::MixHaltGroup($group);
165 return SDL::MixHaltMusic();
168 sub channel_expire ($$$) {
169 my ($self,$channel,$ticks) = @_;
170 return SDL::MixExpireChannel($channel,$ticks);
173 sub fade_out_channel ($$$) {
174 my ($self,$channel,$ms) = @_;
175 return SDL::MixFadeOutChannel($channel,$ms);
178 sub fade_out_group ($$$) {
179 my ($self,$group,$ms) = @_;
180 return SDL::MixFadeOutGroup($group,$ms);
183 sub fade_out_music ($$) {
185 return SDL::MixFadeOutMusic($ms);
188 sub fading_music () {
189 return SDL::MixFadingMusic();
192 sub fading_channel ($$) {
193 my ($self,$channel) = @_;
194 return SDL::MixFadingChannel($channel);
198 my ($self,$channel) = @_;
199 SDL::MixPause($channel);
203 my ($self,$channel) = @_;
204 SDL::MixResume($channel);
208 my ($self,$channel) = @_;
209 return SDL::MixPaused($channel);
213 SDL::MixPauseMusic();
216 sub resume_music () {
217 SDL::MixResumeMusic();
221 SDL::MixRewindMusic();
225 return SDL::MixPausedMusic();
229 my ($self,$channel) = @_;
230 return SDL::MixPlaying($channel);
233 sub playing_music () {
234 return SDL::MixPlayingMusic();
238 my($self, $channel, $left, $right) = @_;
239 return SDL::MixSetPanning($channel, $left, $right);