Commit | Line | Data |
8fde61e3 |
1 | #!/usr/bin/env perl |
2 | |
3 | use SDL; |
4 | |
5 | die "Could not initialize SDL: ", SDL::GetError() |
6 | if ( 0 > SDL::Init(SDL_INIT_AUDIO())); |
7 | |
8 | $ARGV[0] ||= 'data/sample.wav'; |
9 | |
10 | die "usage: $0 [wavefile]\n" |
11 | if ( in $ARGV[0], qw/ -h --help -? /); |
12 | |
13 | my ($wav_spec,$wav_buffer,$wav_len,$wav_pos) = (0,0,0,0); |
14 | |
15 | my $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 | |
50 | die "Could not load wav file $ARGV[0], ", SDL::GetError(), "\n" unless ( $wav_len ); |
51 | |
52 | die "Could not open audio ", SDL::GetError() |
53 | if (0 > SDL::OpenAudio($wav_spec,$fillerup)); |
54 | |
55 | SDL::PauseAudio(0); |
56 | |
57 | print "Using audio driver: ", SDL::AudioDriverName(), "\n"; |
58 | |
59 | while (! $done && ( SDL::GetAudioStatus() == SDL_AUDIO_PLAYING())) { |
60 | SDL::Delay(1000); |
61 | } |
62 | |
63 | |