Hello All:
Awhile back I was working on some wxPerl code to simulate an o-scope
display screen. While the original requirement that started me down that
path went away, I did get a proof of concept working that displayed several
waveforms and a four channel logic analyser(animated).
I have also been playing with the Gqrx software defined radio package and
developed a wxPerl based Gqrx scanner application plug-in. A request was
made on the Gqrx google group for a method to display the raw audio
waveform. It sounded like a good challenge. Gqrx outputs one channel of
16-bit, 48KHz audio to a UDP port. I have this working with a scrolling
audio waveform on the o-scope screen. I wonder, and it's hard to tell, if
the display is keeping up with the 48KHz data stream. Am I dropping packets?
Can I speed up the display process using a memory file rather than writing
to a disk file? Will Wx support this?
This is the current display and referesh code.
# Create the Display(bmp & sbm) and Drawing(image) Objects
# Uses GD calls to draw the screen background and waveform on the
image object
$self->{bmp} = Wx::Bitmap->new("rawaudio.png", wxBITMAP_TYPE_PNG);
$self->{sbm} = Wx::StaticBitmap->new($self, wxID_ANY, $self->{bmp},
wxDefaultPosition, [600,600]);
$oscope->{image} = GD::Image->new($oscope->{maxw}, $oscope->{maxh}) ||
die;
# Read the updated image and refresh the display
$self->{bmp} = Wx::Bitmap->new("rawaudio.png", wxBITMAP_TYPE_PNG); #
Reload the screen image
$self->{sbm}->SetBitmap($self->{bmp}); # Refresh screen
# Save the Drawing Object to a disk file
my $png_data = $oscope->{image}->png; # Write image to a
file
open OUTFILE, ">", "rawaudio.png" || die;
binmode OUTFILE;
print OUTFILE $png_data;
close OUTFILE;
Can this code be modified to use a memory file? Syntax?
I am also considering moving the socket code into it's own thread to
isolate the reading and decoding of the UDP packets from the updating of
the display.
Thanks in advance,
James