| |
The DSP.pm module,
which reads and writes MP3 data.
0 package DSP;
1 use strict;
2 use IO::File;
3 use Carp 'croak';
4 use vars '%sizeof', '@ISA';
5 @ISA = 'IO::Handle';
6 BEGIN {
7 use Config;
8 %sizeof= ( int => $Config{intsize} );
9 require "sys/soundcard.ph";
10 }
11 use constant DSP => '/dev/dsp';
12 use constant COMPRESS => $Config{byteorder} eq '1234'
13 ? "lame -r -x -m m -b32 -s16 - - |"
14 : "lame -r -m m -b32 -s16 - - |";
15 use constant UNCOMPRESS => "| mpg123 -s -m -";
16 sub new {
17 my $class = shift;
18 my $dsp = IO::File->new('/dev/dsp', 'r+')
or croak "Can't open /dev/dsp: $!";
19 croak "can't set samplesize: $!"
unless ioctl $dsp, SNDCTL_DSP_SAMPLESIZE, pack("I", 16);
20 croak "can't set speed: $!"
unless ioctl $dsp, SNDCTL_DSP_SPEED, pack("I", 16000);
21 croak "can't set mono: $!"
unless ioctl $dsp, SNDCTL_DSP_STEREO, pack("I", 0);
22 return bless $dsp, $class;
23 }
24 # read from encode to get MP3 from microphone
25 sub compress {
26 my $self = shift;
27 open(S, "<&STDIN");
28 STDIN->fdopen($self, "r") or die "Can't reopen STDIN on DSP: $!";
29 my $encode = IO::File->new(COMPRESS) or croak "Can't open lame: $!";
30 open(STDIN, "<&S");
31 return $encode;
32 }
33 # write to decode to get sound from MP3
34 sub uncompress {
35 my $self = shift;
36 open(S, ">&STDOUT");
37 STDOUT->fdopen($self, "w") or die "Can't reopen STDOUT on DSP: $!";
38 my $uncompress = IO::File->new(UNCOMPRESS)
or die "Can't open mpg123: $!";
39 $uncompress->autoflush(1);
40 open(STDOUT, ">&S");
41 return $uncompress;
42 }
43 1;
|