Skip to content

Commit

Permalink
Implement open_audio, pause_audio, close_audio, get_audio_status
Browse files Browse the repository at this point in the history
  • Loading branch information
acme committed Nov 16, 2009
1 parent b0a33ff commit 80a2e43
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 33 deletions.
7 changes: 7 additions & 0 deletions Build.PL
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,13 @@ my %subsystems =
},
libraries => [qw( SDL )],
},
Audio => {
file => {
from => 'src/Core/Audio.xs',
to => 'lib/SDL/Audio.xs',
},
libraries => [qw( SDL )],
},
Rect => {
file => {
from => 'src/Core/objects/Rect.xs',
Expand Down
9 changes: 9 additions & 0 deletions lib/SDL/Audio.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package SDL::Audio;
use strict;
use warnings;
require Exporter;
require DynaLoader;
our @ISA = qw(Exporter DynaLoader);
bootstrap SDL::Audio;

1;
39 changes: 39 additions & 0 deletions src/Core/Audio.xs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#ifndef aTHX_
#define aTHX_
#endif

#include <SDL.h>

MODULE = SDL::Audio PACKAGE = SDL::Audio PREFIX = audio_

int
audio_open_audio ( desired, obtained )
SDL_AudioSpec *desired
SDL_AudioSpec *obtained
CODE:
RETVAL = SDL_OpenAudio(desired, obtained);
OUTPUT:
RETVAL

void
audio_pause_audio ( pause_on )
int pause_on
CODE:
SDL_PauseAudio(pause_on);

Uint32
audio_get_audio_status ()
CODE:
RETVAL = SDL_GetAudioStatus ();
OUTPUT:
RETVAL

void
audio_close_audio ()
CODE:
SDL_CloseAudio();

29 changes: 0 additions & 29 deletions src/SDL.xs
Original file line number Diff line number Diff line change
Expand Up @@ -746,30 +746,6 @@ ConvertAudioData ( cvt, data, len )
RETVAL = SDL_ConvertAudio(cvt);
OUTPUT:
RETVAL

int
OpenAudio ( spec, callback )
SDL_AudioSpec *spec
SV* callback
CODE:
spec->userdata = (void*)callback;
spec->callback = sdl_perl_audio_callback;
RETVAL = SDL_OpenAudio(spec,NULL);
OUTPUT:
RETVAL

Uint32
GetAudioStatus ()
CODE:
RETVAL = SDL_GetAudioStatus ();
OUTPUT:
RETVAL

void
PauseAudio ( p_on )
int p_on
CODE:
SDL_PauseAudio(p_on);

void
LockAudio ()
Expand All @@ -781,11 +757,6 @@ UnlockAudio ()
CODE:
SDL_UnlockAudio();

void
CloseAudio ()
CODE:
SDL_CloseAudio();

void
FreeWAV ( buf )
Uint8 *buf
Expand Down
31 changes: 27 additions & 4 deletions t/core_audio.t
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
#!/usr/bin/perl -w
use strict;
use SDL;
use SDL::Constants;
use SDL::Audio;
use SDL::AudioSpec;
use Test::More;

my @done = qw/
audio_spec
open_audio
pause_audio
close_audio
get_audio_status
/;

my $desired = SDL::AudioSpec->new;
Expand All @@ -19,10 +25,28 @@ is( $desired->channels, 2, '[audiospec] can set channels' );
$desired->samples(4096);
is( $desired->samples, 4096, '[audiospec] can set samples' );

is( SDL::Audio::get_audio_status, SDL_AUDIO_STOPPED,
'[get_audio_status stopped]' );

my $obtained = SDL::AudioSpec->new;
is( SDL::Audio::open_audio( $desired, $obtained ),
0, '[open_audio returned success]' );
isa_ok( $obtained, 'SDL::AudioSpec' );

is( SDL::Audio::get_audio_status, SDL_AUDIO_PAUSED,
'[get_audio_status paused]' );

SDL::Audio::pause_audio(0);

is( SDL::Audio::get_audio_status, SDL_AUDIO_PLAYING,
'[get_audio_status playing]' );

SDL::Audio::close_audio();

is( SDL::Audio::get_audio_status, SDL_AUDIO_STOPPED,
'[get_audio_status stopped]' );

my @left = qw/
open_audio
pause_audio
get_audio_status
load_wav
free_wav
audio_cvt
Expand All @@ -31,7 +55,6 @@ my @left = qw/
mix_audio
lock_audio
unlock_audio
close_audio
/;

my $why
Expand Down

0 comments on commit 80a2e43

Please sign in to comment.