Added CreateRGBSurfaceFrom as an new constructor of SDL::Surface. Need to test it
[sdlgit/SDL_perl.git] / test / loopwave.pl
1 #!/usr/bin/env perl
2
3 use SDL;
4 use SDL::Event;
5 use Carp;
6
7 croak "Could not initialize SDL: ", SDL::GetError()
8         if ( 0 > SDL::Init(SDL_INIT_AUDIO));
9
10 $ARGV[0] ||= 'data/sample.wav';
11
12 croak "usage: $0 [wavefile]\n"
13         if ( in $ARGV[0], qw/ -h --help -? /);
14
15 my ($wav_spec,$wav_buffer,$wav_len,$wav_pos) = (0,0,0,0);
16
17 my $done = 0;
18
19 $fillerup  = sub {
20         my ($data,$len) = @_;
21
22         $wav_ptr = $wav_buffer + $wav_pos;
23         $wav_remainder = $wav_len - $wav_pos;
24
25         while ( $wav_remainder <= $len ) {
26                 SDL::MixAudio($data,$wav_ptr,$wav_remainder,SDL_MIX_MAXVOLUME);
27                 $data += $wav_remainder;
28                 $len -= $wav_remainder;
29                 $wav_ptr = $wav_buffer; 
30                 $wav_remainder = $wav_len;
31                 $wav_pos = 0;
32         }
33         SDL::MixAudio($data,$wav_ptr,$len,SDL_MIX_MAXVOLUME);
34         $wav_pos += $len;
35 };
36
37 $poked = sub {
38         $done = 1;
39 };
40
41 $SIG{HUP} = $poked;
42 $SIG{INT} = $poked;
43 $SIG{QUIT} = $poked;
44 $SIG{TERM} = $poked;
45
46 $spec = SDL::NewAudioSpec(44100,AUDIO_S16,2,4096);
47
48 $wave = SDL::LoadWAV($ARGV[0],$spec);
49
50 ($wav_spec,$wav_buffer,$wav_len) = @$wave;
51
52 croak "Could not load wav file $ARGV[0], ", SDL::GetError(), "\n" unless ( $wav_len );
53
54 croak "Could not open audio ", SDL::GetError()
55         if (0 > SDL::OpenAudio($wav_spec,$fillerup));
56
57 SDL::PauseAudio(0);
58
59 print "Using audio driver: ", SDL::AudioDriverName(), "\n";
60         
61 while (! $done && ( SDL::GetAudioStatus() == SDL_AUDIO_PLAYING)) {
62         SDL::Delay(1000);
63 }
64
65