[alsa-devel] frequency analysis with alsa and fftw
Markus Vogl
markus.vogl at gmx.net
Mon Dec 28 13:16:13 CET 2009
> -----Ursprüngliche Nachricht-----
> Von: Jan-Benedict Glaw [mailto:jbglaw at lug-owl.de]
> Gesendet: Sonntag, 27. Dezember 2009 15:05
> An: Markus Vogl
> Cc: alsa-devel at alsa-project.org
> Betreff: Re: [alsa-devel] frequency analysis with alsa and fftw
>
> On Sun, 2009-12-27 14:50:20 +0100, Markus Vogl
> <markus.vogl at gmx.net> wrote:
> > Von: Jan-Benedict Glaw [mailto:jbglaw at lug-owl.de]:
> > > On Sun, 2009-12-27 13:26:31 +0100, Markus Vogl
> <markus.vogl at gmx.net> wrote:
> > > > my project is to analyse the mic input frequency from
> my asus eepc
> > > > 1008ha with ubuntu 9.10 and show it in a terminal window.
> > > > i would use my acoustic 6 string guitar to play in front of my
> > > > netbook.
> > > >
> > > > i´ve testet the howto from linuxjornal.com ..
> > > > http://www.linuxjournal.com/article/6735
> > > >
> > > > ...but i´ve no plan to use the mic input and then
> analyse it with
> > > > fftw.
> > >
> > > Why do you need to do ALSA programming in the first
> place? Isn't it
> > > enough to use any given ALSA-capable audio recorder (eg.
> > > arecord) to record some sound, convert it to raw PCM data
> (eg. cut
> > > off the WAV header) and then shift all the data into the FFT lib?
> >
> > i have to do this in realtime (like a guitartuner) and with my
> > "project" i have to see the frequency shift in realtime in
> a terminal
> > window.
>
> Sure. Just let eg. arecord write to stdout or to a FIFO and
> read the data from there. You can directly request raw
> output, all you need to do is to shouvle the data through the
> FTT lib...
Who can me explain how i can transfer the frame/buffer to the
fftw3.lib? This is from the howto example at linuxjournal
and in the "while loop" is the frame that i can use for DFT
...or i´m wrong?
while (loops > 0) {
loops--;
rc = snd_pcm_readi(handle, buffer, frames);
if (rc == -EPIPE) {
/* EPIPE means overrun */
fprintf(stderr, "overrun occurred\n");
snd_pcm_prepare(handle);
} else if (rc < 0) {
fprintf(stderr,
"error from read: %s\n",
snd_strerror(rc));
} else if (rc != (int)frames) {
fprintf(stderr, "short read, read %d frames\n", rc);
}
rc = write(1, buffer, size);
if (rc != size)
fprintf(stderr,
"short write: wrote %d bytes\n", rc);
}
regards
markus
More information about the Alsa-devel
mailing list