On Thu, 2010-06-17 at 00:29 -0400, Jeremy wrote:
Hi,
When I'm programming, I find it immensely helpful to be able to plot
audio data at different points in its processing, for debugging, and
to test new ideas.
Essentially I want an oscilloscope, which plots each chunk of 1024
samples.
I've tried using libplot, but it seems too slow. It's causing
constant xruns, even when I only plot every 5th sample.
I thought that maybe libplot was too abstract, and that I needed to
draw the pixels on the screen directly. I tried using SDL, but it
caused excessive xruns also. Simply setting 48000 pixels per second
was enough to cause the flow of xruns. This is *not* erasing the
screen, just drawing the points. I'd expect that erasing the screen
is the slow part, but apparently not.
At this point I'm not sure if it's even possible to plot the audio
data in realtime. I did a rough calculation, that on my 2 Ghz cpu, it
should have roughly 40,000 cycles to process each sample. It seems to
me that considering running the whole plugin only uses 1/4 of my cpu,
the other 30000 cycles should be plenty to put a pixel on the screen.
So I would guess that something else is the bottleneck, like my video
chip, or maybe the libraries I'm using.
So basically my question is: Has anyone else had any luck with
plotting audio data in real time, and if so, how? Is it not possible
to plot every sample, but only a certain percentage of them? Is there
a fundamental restriction on doing so, or is my problem in software?
I'm going to assume you're plotting directly within the realtime process
thread, which will never work. Push the audio data in a ring buffer,
then do the plotting in your main thread.
How about taking a look at some of the sound editors, snd, mhwaveedit,
etc? Or perhaps Freqtweak?
I seem to recall seeing a reference somewhere recently, to
oscilloscope type software, which also might be useful to read the
code of, but can't remember where.
James