/t/core_audio.t
http://github.com/PerlGameDev/SDL · Perl · 141 lines · 118 code · 22 blank · 1 comment · 11 complexity · 1a6301036c59e9565796d45e0e3977b2 MD5 · raw file
- #!/usr/bin/perl -w
- BEGIN { # http://wiki.cpantesters.org/wiki/CPANAuthorNotes
- use Config;
- if ( !$Config{'useithreads'} ) {
- print("1..0 # Skip: Perl not compiled with 'useithreads'\n");
- exit(0);
- }
- }
- use strict;
- use warnings;
- use SDL;
- use SDL::Audio;
- use SDL::AudioSpec;
- use Test::More;
- use Devel::Peek;
- use lib 't/lib';
- use SDL::TestTool;
- my $audiodriver = $ENV{SDL_AUDIODRIVER};
- $ENV{SDL_AUDIODRIVER} = 'dummy' unless $ENV{SDL_RELEASE_TESTING};
- if ( !SDL::TestTool->init(SDL_INIT_AUDIO) ) {
- plan( skip_all => 'Failed to init sound' );
- } else {
- plan( tests => 45 );
- }
- my @done = qw/
- audio_spec
- open
- pause
- close
- get_status
- lock
- unlock
- /;
- is( AUDIO_S16, 32784, 'AUDIO_S16 should be imported' );
- is( AUDIO_S16(), 32784, 'AUDIO_S16() should also be available' );
- is( AUDIO_S16MSB, 36880, 'AUDIO_S16MSB should be imported' );
- is( AUDIO_S16MSB(), 36880, 'AUDIO_S16MSB() should also be available' );
- is( AUDIO_S16LSB, 0x8010, 'AUDIO_S16MSB should be imported' );
- is( AUDIO_S16LSB(), 0x8010, 'AUDIO_S16MSB() should also be available' );
- is( AUDIO_S8, 32776, 'AUDIO_S8 should be imported' );
- is( AUDIO_S8(), 32776, 'AUDIO_S8() should also be available' );
- is( AUDIO_U16, 16, 'AUDIO_U16 should be imported' );
- is( AUDIO_U16(), 16, 'AUDIO_U16() should also be available' );
- is( AUDIO_U16MSB, 4112, 'AUDIO_U16MSB should be imported' );
- is( AUDIO_U16MSB(), 4112, 'AUDIO_U16MSB() should also be available' );
- is( AUDIO_U16LSB, 0x0010, 'AUDIO_U16MSB should be imported' );
- is( AUDIO_U16LSB(), 0x0010, 'AUDIO_U16MSB() should also be available' );
- is( AUDIO_U8, 8, 'AUDIO_U8 should be imported' );
- is( AUDIO_U8(), 8, 'AUDIO_U8() should also be available' );
- ok( ( SDL::Audio::AUDIO_U16SYS == AUDIO_U16LSB ) || ( SDL::Audio::AUDIO_U16SYS == AUDIO_U16MSB ),
- 'AUDIO_U16SYS should be imported'
- );
- ok( ( SDL::Audio::AUDIO_U16SYS() == AUDIO_U16LSB() ) || ( SDL::Audio::AUDIO_U16SYS() == AUDIO_U16MSB() ),
- 'AUDIO_U16SYS() should also be available'
- );
- is( SDL_AUDIO_PAUSED, 2, 'SDL_AUDIO_PAUSED should be imported' );
- is( SDL_AUDIO_PAUSED(), 2, 'SDL_AUDIO_PAUSED() should also be available' );
- is( SDL_AUDIO_PLAYING, 1, 'SDL_AUDIO_PLAYING should be imported' );
- is( SDL_AUDIO_PLAYING(), 1, 'SDL_AUDIO_PLAYING() should also be available' );
- is( SDL_AUDIO_STOPPED, 0, 'SDL_AUDIO_STOPPED should be imported' );
- is( SDL_AUDIO_STOPPED(), 0, 'SDL_AUDIO_STOPPED() should also be available' );
- my $driver = SDL::Audio::audio_driver_name();
- pass "[audio_driver_name] using audio driver $driver";
- my $desired = SDL::AudioSpec->new;
- $desired->freq(44100);
- is( $desired->freq, 44100, '[audiospec] can set freq' );
- $desired->format(SDL::Audio::AUDIO_S16SYS);
- is( $desired->format, SDL::Audio::AUDIO_S16SYS, '[audiospec] can set format' );
- $desired->channels(2);
- is( $desired->channels, 2, '[audiospec] can set channels' );
- $desired->samples(4096);
- is( $desired->samples, 4096, '[audiospec] can set samples' );
- $desired->callback('main::audio_callback');
- is( SDL::Audio::get_status, SDL_AUDIO_STOPPED, '[get_status stopped]' );
- my $obtained = SDL::AudioSpec->new;
- is( SDL::Audio::open( $desired, $obtained ), 0, '[open returned success]' );
- isa_ok( $obtained, 'SDL::AudioSpec', 'Created a new AudioSpec' );
- my $wav_ref = SDL::Audio::load_wav( 'test/data/sample.wav', $obtained );
- isa_ok( $wav_ref, 'ARRAY', "Got and Array Out of load_wav. $wav_ref" );
- my ( $wav_spec, $audio_buf, $audio_len ) = @{$wav_ref};
- isa_ok( $wav_spec, 'SDL::AudioSpec', '[load_wav] got Audio::Spec back out ' );
- is( $audio_len, 481712, '[load_wav] length is correct' );
- SDL::Audio::free_wav($audio_buf);
- is( SDL::Audio::get_status, SDL_AUDIO_PAUSED, '[get_status paused]' );
- SDL::Audio::pause(0);
- is( SDL::Audio::get_status, SDL_AUDIO_PLAYING, '[get_status playing]' );
- SDL::Audio::lock();
- pass('Audio locked');
- SDL::Audio::unlock();
- pass('Audio unlocked');
- SDL::Audio::close();
- pass('Audio Closed');
- is( SDL::Audio::get_status, SDL_AUDIO_STOPPED, '[get_status stopped]' );
- my @left = qw/
- audio_cvt
- build_audio_cvt
- convert_audio
- mix_audio
- /;
- my $why =
- '[Percentage Completion] '
- . int( 100 * ( $#done + 1 ) / ( $#done + $#left + 2 ) )
- . "\% implementation. "
- . ( $#done + 1 ) . " / "
- . ( $#done + $#left + 2 );
- TODO:
- {
- local $TODO = $why;
- fail "Not Implmented $_" foreach (@left)
- }
- print "$why\n";
- if ($audiodriver) {
- $ENV{SDL_AUDIODRIVER} = $audiodriver;
- } else {
- delete $ENV{SDL_AUDIODRIVER};
- }
- sleep(1);
- sub audio_callback {
- }