-----Ursprüngliche Nachricht----- Von: Jan-Benedict Glaw [mailto:jbglaw@lug-owl.de] Gesendet: Sonntag, 27. Dezember 2009 15:05 An: Markus Vogl Cc: alsa-devel@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@gmx.net wrote:
Von: Jan-Benedict Glaw [mailto:jbglaw@lug-owl.de]:
On Sun, 2009-12-27 13:26:31 +0100, Markus Vogl
markus.vogl@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