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