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;
}

Reply via email to