Skip to content

Commit

Permalink
Implement MixMusic
Browse files Browse the repository at this point in the history
  • Loading branch information
acme committed Nov 6, 2009
1 parent bfededf commit 47cda86
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 4 deletions.
9 changes: 8 additions & 1 deletion Build.PL
Expand Up @@ -180,7 +180,14 @@ my %subsystems =
from => 'src/Core/objects/MixChunk.xs',
to => 'lib/SDL/MixChunk.xs',
},
libraries => [qw( SDL )],
libraries => [qw( SDL SDL_mixer )],
},
MixMusic => {
file => {
from => 'src/Core/objects/MixMusic.xs',
to => 'lib/SDL/MixMusic.xs',
},
libraries => [qw( SDL SDL_mixer )],
},
Palette => {
file => {
Expand Down
9 changes: 9 additions & 0 deletions lib/SDL/MixMusic.pm
@@ -0,0 +1,9 @@
package SDL::MixMusic;
use strict;
use warnings;
require Exporter;
require DynaLoader;
our @ISA = qw(Exporter DynaLoader);
bootstrap SDL::MixMusic;

1;
26 changes: 26 additions & 0 deletions src/Core/objects/MixMusic.xs
@@ -0,0 +1,26 @@
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#ifndef aTHX_
#define aTHX_
#endif

#include <SDL.h>
#include <SDL_mixer.h>

MODULE = SDL::MixMusic PACKAGE = SDL::MixMusic PREFIX = mixmusic_

=for documentation

SDL_mixmusic - This is an opaque data type used for Music data

typedef struct _Mix_Music Mix_Music;

=cut

void
mixmusic_DESTROY(mixmusic)
Mix_Chunk *mixmusic
CODE:
Mix_FreeMusic(mixmusic);
11 changes: 9 additions & 2 deletions src/SDL.xs
Expand Up @@ -1202,10 +1202,17 @@ MixLoadWAV ( filename )
RETVAL

Mix_Music *
MixLoadMusic ( filename )
MixLoadMUS ( filename )
char *filename
PREINIT:
char * CLASS = "SDL::MixMusic";
CODE:
RETVAL = Mix_LoadMUS(filename);
Mix_Music * mixmusic;
mixmusic = Mix_LoadMUS(filename);
if (mixmusic == NULL) {
fprintf(stderr, "Could not load %s\n", filename);
}
RETVAL = mixmusic;
OUTPUT:
RETVAL

Expand Down
28 changes: 28 additions & 0 deletions t/core_mixmusic.t
@@ -0,0 +1,28 @@
#!perl
use strict;
use warnings;
use SDL;
use SDL::MixMusic;
use Test::More tests => 4;

is( SDL::init(SDL_INIT_AUDIO), 0, '[init] returns 0 on success' );

is( SDL::MixOpenAudio( 44100, SDL::Constants::AUDIO_S16, 2, 4096 ),
0, 'MixOpenAudio passed' );

my $mix_music = SDL::MixLoadMUS('test/data/sample.wav');

{
local $TODO = 1;

# I'm not sure why this fails
isa_ok( $mix_music, 'SDL::MixMusic' );
};

SDL::MixPlayMusic( $mix_music, 0 );

# we close straight away so no audio is actually played

SDL::MixCloseAudio;

ok( 1, 'Got to the end' );
2 changes: 1 addition & 1 deletion typemap
Expand Up @@ -45,7 +45,7 @@ SDL_AudioSpec * T_PTR
SDL_AudioCVT * T_PTR
Mix_Fading T_UV
Mix_Chunk * O_OBJECT
Mix_Music * T_PTR
Mix_Music * O_OBJECT
SDL_GLattr T_IV
int * T_PTR
void * T_PTR
Expand Down

0 comments on commit 47cda86

Please sign in to comment.