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