The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Games::Zumbis::Audio;
BEGIN {
  $Games::Zumbis::Audio::VERSION = '0.05';
}

use strict;
use warnings;

use Carp ();
use SDL;
use SDL::Audio;
use SDL::Mixer;
use SDL::Mixer::Music;
use SDL::Mixer::Channels;
use SDL::Mixer::Samples;
use SDL::Mixer::MixChunk;

my $audio_ok = undef;

sub init {
    SDL::Mixer::open_audio( 44100, AUDIO_S16SYS, 2, 4096 );

    my ($status, $freq, $format, $channels) = @{ SDL::Mixer::query_spec() };

    Carp::carp ' Asked for freq, format, channels ' . join( ' ', ( 44100, AUDIO_S16SYS, 2,) );
    Carp::carp  ' Got back status,  freq, format, channels ' . join( ' ', ( $status, $freq, $format, $channels ) );

    $audio_ok = 1 if $status == 1;
}

sub play {
    my (undef, $chunk) = @_;
    return unless $chunk and $audio_ok;

    my $channel_number = SDL::Mixer::Channels::play_channel(-1, $chunk, 0 )
        or return;

    SDL::Mixer::Channels::volume( $channel_number, 10)
        if $channel_number >= 0;
}

sub pause {

}

sub inc_volume {

}

sub dec_volume {

}


sub load_sound {
    return unless $audio_ok;
    my (undef, $filename) = @_;
    return SDL::Mixer::Samples::load_WAV($filename);
}

sub start_music {
    return unless $audio_ok;
    my (undef, $filename) = @_;
    my $music = SDL::Mixer::Music::load_MUS($filename)
        or Carp::croak 'Music not found: ' . SDL::get_error();

    # play that funky music!
    SDL::Mixer::Music::play_music( $music, -1 );

    SDL::Mixer::Music::volume_music(85);
}

# close our audio on program ending.
# Note that this does *NOT* catch signals
# but then again, neither did our previous
# attempt :)
END {
    SDL::Mixer::close_audio();
}

42;