/t/core_audiospec.t

http://github.com/PerlGameDev/SDL · Perl · 79 lines · 60 code · 18 blank · 1 comment · 9 complexity · a9e06e82d280bcb3474ea900805b6c60 MD5 · raw file

  1. #!/usr/bin/perl -w
  2. BEGIN { # http://wiki.cpantesters.org/wiki/CPANAuthorNotes
  3. use Config;
  4. if ( !$Config{'useithreads'} ) {
  5. print("1..0 # Skip: Perl not compiled with 'useithreads'\n");
  6. exit(0);
  7. }
  8. }
  9. use strict;
  10. use warnings;
  11. use threads;
  12. use threads::shared;
  13. use SDL;
  14. use SDL::Audio;
  15. use SDL::AudioSpec;
  16. use Test::More;
  17. use Devel::Peek;
  18. use Config;
  19. use lib 't/lib';
  20. use SDL::TestTool;
  21. plan( skip_all => "author tests not required for installation" )
  22. unless ( $ENV{AUTOMATED_TESTING} or $ENV{SDL_RELEASE_TESTING} );
  23. my $audiodriver = $ENV{SDL_AUDIODRIVER};
  24. $ENV{SDL_AUDIODRIVER} = 'dummy'; # unless $ENV{SDL_RELEASE_TESTING};
  25. plan( skip_all => 'Failed to init sound' )
  26. unless SDL::TestTool->init(SDL_INIT_AUDIO);
  27. my $obtained = SDL::AudioSpec->new;
  28. my $p : shared = 0;
  29. my $f : shared = 0;
  30. my $desired = SDL::AudioSpec->new;
  31. $desired->freq(44100);
  32. $desired->format(AUDIO_S8);
  33. $desired->channels(1);
  34. $desired->samples(4096);
  35. $desired->callback('main::callback');
  36. sub callback {
  37. my ( $int_size, $len, $streamref ) = @_;
  38. my $chr = chr(0);
  39. $chr = chr($p) if $p; #Windows is delaying the thread update for some reason
  40. for ( my $i = 0; $i < $len; $i++ ) {
  41. use bytes;
  42. substr( $$streamref, $i, 1, $chr );
  43. if ( $f && $p++ > 200 ) {
  44. $f = 0;
  45. } elsif ( !$f && $p-- < 0 ) {
  46. $f = 1;
  47. }
  48. }
  49. isnt $p, 0, '[callback] tested $p = ' . $p;
  50. }
  51. die 'AudioMixer, Unable to open audio: ' . SDL::get_error()
  52. if ( SDL::Audio::open( $desired, $obtained ) < 0 );
  53. SDL::Audio::pause(0);
  54. sleep(1);
  55. SDL::Audio::close();
  56. if ($audiodriver) {
  57. $ENV{SDL_AUDIODRIVER} = $audiodriver;
  58. } else {
  59. delete $ENV{SDL_AUDIODRIVER};
  60. }
  61. done_testing();