Hi,
thanks for that hint.
But sadly, the attached program doesn't work, though
i set stop_threshold to 0. I didn't find any functions
to set buffersize to 0, it doesn't seem to be in the
software parameters.
It would be great, if anybody had a hint.
Regards,
Torsten.
> Torsten Mohr wrote:
> > I want to write a program where some chunk of
> > data is sampled from time to time, with some delay
> > inbetween.
>
> Your program wants to ignore any buffer overruns. To do this, you
> have to change the sw_params: set the stop_threshold to either 0 or
> the buffer size in frames (I don't remember which).
>
>
> HTH
> Clemens
>
>
>
>
> -------------------------------------------------------
> The SF.Net email is sponsored by EclipseCon 2004
> Premiere Conference on Open Tools Development and Integration
> See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
> http://www.eclipsecon.org/osdn
> _______________________________________________
> Alsa-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/alsa-devel
#define _GNU_SOURCE
#include <stdio.h>
#include <malloc.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <alsa/asoundlib.h>
#include <sys/signal.h>
#include "sound.h"
#include "settings.h"
#define QWE fprintf(stderr, "File %s, Line %i\n", __FILE__, __LINE__)
int periodsize = 128;
int rate = 44100;
int i;
int err;
unsigned char* data;
snd_pcm_t *capture_handle;
snd_pcm_hw_params_t *hw_params;
snd_pcm_sw_params_t *sw_params;
unsigned char* sound_get_data(void) {
return data;
}
int sound_init2(void) {
if ((err = snd_pcm_open (&capture_handle, "plughw:0,0", SND_PCM_STREAM_CAPTURE, 0)) < 0) {
fprintf (stderr, "cannot open audio device plughw:0,0 (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) {
fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_any (capture_handle, hw_params)) < 0) {
fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_access (capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
fprintf (stderr, "cannot set access type (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_format (capture_handle, hw_params, SND_PCM_FORMAT_S16_LE)) < 0) {
fprintf (stderr, "cannot set sample format (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_rate_near (capture_handle, hw_params, &rate, 0)) < 0) {
fprintf (stderr, "cannot set sample rate (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params_set_channels (capture_handle, hw_params, 2)) < 0) {
fprintf (stderr, "cannot set channel count (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_hw_params (capture_handle, hw_params)) < 0) {
fprintf (stderr, "cannot set parameters (%s)\n",
snd_strerror (err));
exit (1);
}
snd_pcm_hw_params_free (hw_params);
if ((err = snd_pcm_sw_params_malloc (&sw_params)) < 0) {
fprintf (stderr, "cannot allocate software parameter structure (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_sw_params_current (capture_handle, sw_params)) < 0) {
fprintf (stderr, "cannot initialize software parameter structure (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_sw_params_set_stop_threshold (capture_handle, sw_params, 0)) < 0) {
fprintf (stderr, "cannot set access type (%s)\n",
snd_strerror (err));
exit (1);
}
if ((err = snd_pcm_sw_params (capture_handle, sw_params)) < 0) {
fprintf (stderr, "cannot set sw-parameters (%s)\n",
snd_strerror (err));
exit (1);
} // */
snd_pcm_sw_params_free (sw_params);
if ((err = snd_pcm_prepare (capture_handle)) < 0) {
fprintf (stderr, "cannot prepare audio interface for use (%s)\n",
snd_strerror (err));
exit (1);
}
}
int sound_init(void) {
data = (unsigned char *)calloc(SAMPLES*4, 0);
sound_init2();
}
void sound_capture(void) {
QWE;
if ((err = snd_pcm_readi (capture_handle, data, periodsize)) != periodsize) {
fprintf (stderr, "read from audio interface failed (%s)\n",
snd_strerror (err));
exit (1);
}
QWE;
}
int main(int argc, char** argv) {
sound_init();
sound_capture();
sound_capture();
sleep(1);
sound_capture();
snd_pcm_close(capture_handle);
QWE;
return 0;
}