Maudio Delta 1010 capture problem

I have a Maudio Delta 1010 sound card with 8 input channels and I want to capture pcm data from each input simutanuously ,but I can only capture data from the first and second channel. I user Alsa apis to do this.
How could I capture from other channels
here is my code:

/*
 This example reads from the default PCM device
 and writes to standard output for 5 seconds of data.
 */

/* Use the newer ALSA API */

#define ALSA_PCM_NEW_HW_PARAMS_API

#include <alsa/asoundlib.h>

int main()
{

	long loops;
	int rc;
	int size;
	snd_pcm_t *handle;
	snd_pcm_hw_params_t *params;
	unsigned int val;
	int dir;
	snd_pcm_uframes_t frames;
	char *buffer;
	FILE * p;
	FILE * log_fp;
	int i;
	snd_pcm_uframes_t bufferreq;
	int count = 0;
	int channels = 2;
	i = 1;

	p = fopen("/home/test/out.pcm", "wb");
	log_fp = fopen("/tmp/pcm.log", "wb");
	/* Open PCM device for recording (capture). */
	rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0);
	if (rc < 0)
	{
		fprintf(stderr, "unable to open pcm device: %sn", snd_strerror(rc));
		exit(1);
	}

	printf(" open device rc = %dn", rc);

	/* Allocate a hardware parameters object. */
	snd_pcm_hw_params_alloca(&params);

	/* Fill it in with default values. */
	snd_pcm_hw_params_any(handle, params);

	/* Set the desired hardware parameters. */

	/* Interleaved mode */
	snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);

	/* Signed 16-bit little-endian format */
	snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);

	/* Two channels (stereo) */
	snd_pcm_hw_params_set_channels(handle, params, channels);

	/* 44100 bits/second sampling rate (CD quality) */
	val = 44100;
	snd_pcm_hw_params_set_rate_near(handle, params, &val, &dir);

	/* Set period size to 32 frames. */
	frames = 1024;
	snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir);

//	bufferreq = 1024 * 1024;
//	snd_pcm_hw_params_set_buffer_size_near(handle, params, &bufferreq);

	/* Write the parameters to the driver */
	rc = snd_pcm_hw_params(handle, params);
	if (rc < 0)
	{
		fprintf(stderr, "unable to set hw parameters: %sn", snd_strerror(rc));
		exit(1);
	}

	/* Use a buffer large enough to hold one period */
	snd_pcm_hw_params_get_period_size(params, &frames, &dir);

	size = frames * channels * 2; /* 2 bytes/sample, 2 channels */
	buffer = (char *) malloc(size);

	/* We want to loop for 5 seconds */
	snd_pcm_hw_params_get_period_time(params, &val, &dir);

	loops = 5000000 / val;

	while (loops > 0)
	{
		memset(buffer,0,size);
		loops--;
		rc = snd_pcm_readi(handle, buffer, frames);
		{
			//printf("snd_pcm_readin");
			if (rc == -EPIPE)
			{
				/* EPIPE means overrun */
				fprintf(stderr, "overrun occurredn");
				printf("overrun occurredn");
				snd_pcm_prepare(handle);
			}
			else if (rc < 0)
			{
				fprintf(stderr, "error from read: %sn", snd_strerror(rc));
				printf("error from read: %sn", snd_strerror(rc));
			}
			else if (rc != (int) frames)
			{
				fprintf(stderr, "short read, read %d framesn", rc);
				printf("short read, read %d framesn", rc);
			}
		}
		count = size + count;
		printf("read data %d, %d, %dn", size, i++, rc);
		fprintf(log_fp, "%d     %dn", size, count);
		fwrite(buffer, 1, size, p);
	}

	snd_pcm_drain(handle);

	//snd_pcm_close(handle);
	//free(buffer);

	return 0;
}

Does your 1010 work correctly (multi-channel) with other apps?
If not you may need to check the .asoundrc file. (a link that may help http://www.pogo.org.uk/~mark/linuxdj/ )

Sorry I can’t be more helpful. I assume that you’re aware of the ALSA Developer Zone information: http://www.alsa-project.org/main/index.php/Developer_Zone

Thanks a lot!
I have solved my problem by replacing the asound file from your link.