#include #include #include #define BUF_BYTES 128 int main (/*int argc, char *argv[]*/) { int err; unsigned char buf_right[BUF_BYTES]; unsigned char buf_left[BUF_BYTES]; //char *buf; int size; snd_pcm_t *playback_handle_right; snd_pcm_t *capture_handle_right; snd_pcm_t *playback_handle_left; snd_pcm_t *capture_handle_left; #if 0 char* device = "default"; if (argc > 1) device = argv[1]; #endif char* crdevice = "VINR"; char* prdevice = "VOUTR"; char* cldevice = "VINL"; char* pldevice = "VOUTL"; unsigned int rate = 48000; unsigned int nchannels = 1; snd_pcm_format_t format = SND_PCM_FORMAT_S16_LE; unsigned int buf_frames_right = BUF_BYTES / nchannels / 2; unsigned int buf_frames_left = BUF_BYTES / nchannels / 2; ///// RIGHT CHANNEL if ((err = snd_pcm_open (&playback_handle_right, prdevice, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { fprintf (stderr, "cannot open playback right audio device %s (%s)\n", prdevice, snd_strerror (err)); exit (1); } else { printf("Opened Playback right audio device successfully %s \n", prdevice); } if ((err = snd_pcm_set_params(playback_handle_right, format, SND_PCM_ACCESS_RW_INTERLEAVED, nchannels, rate, 1, 500000)) < 0) { /* 0.5sec */ fprintf(stderr, "Playback right open error: %s\n", snd_strerror(err)); exit(1); } if ((err = snd_pcm_open (&capture_handle_right, crdevice, SND_PCM_STREAM_CAPTURE, 0)) < 0) { fprintf (stderr, "cannot open capture right audio device %s (%s)\n", crdevice, snd_strerror (err)); exit (1); } else { printf("Opened Capture right audio device successfully %s \n", crdevice); } if ((err = snd_pcm_set_params(capture_handle_right, format, SND_PCM_ACCESS_RW_INTERLEAVED, nchannels, rate, 1, 500000)) < 0) { /* 0.5sec */ fprintf(stderr, "capture right open error: %s\n", snd_strerror(err)); exit(1); } ////LEFT CHANNEL if ((err = snd_pcm_open (&playback_handle_left, pldevice, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { fprintf (stderr, "cannot open playback left audio device %s (%s)\n", pldevice, snd_strerror (err)); exit (1); } else { printf("Opened Playback left audio device successfully %s \n", pldevice); } if ((err = snd_pcm_set_params(playback_handle_left, format, SND_PCM_ACCESS_RW_INTERLEAVED, nchannels, rate, 1, 500000)) < 0) { /* 0.5sec */ fprintf(stderr, "Playback left open error: %s\n", snd_strerror(err)); exit(1); } if ((err = snd_pcm_open (&capture_handle_left, cldevice, SND_PCM_STREAM_CAPTURE, 0)) < 0) { fprintf (stderr, "cannot open capture left audio device %s (%s)\n", cldevice, snd_strerror (err)); exit (1); } else { printf("Opened Capture left audio device successfully %s \n", crdevice); } if ((err = snd_pcm_set_params(capture_handle_left, format, SND_PCM_ACCESS_RW_INTERLEAVED, nchannels, rate, 1, 500000)) < 0) { /* 0.5sec */ fprintf(stderr, "capture left open error: %s\n", snd_strerror(err)); exit(1); } while(1) { ///// RIGHT CHANNEL if ((err = snd_pcm_readi (capture_handle_right, buf_right, buf_frames_right)) != buf_frames_right) { fprintf (stderr, "read from audio interface right failed (%s)\n", snd_strerror (err)); exit (1); } if ((err = snd_pcm_writei (playback_handle_right, buf_right, buf_frames_right)) != buf_frames_right) { fprintf (stderr, "write to audio interface right failed (%s)\n", snd_strerror (err)); exit (1); } ////LEFT CHANNEL if ((err = snd_pcm_readi (capture_handle_left, buf_left, buf_frames_left)) != buf_frames_left) { fprintf (stderr, "read from audio interface left failed (%s)\n", snd_strerror (err)); exit (1); } if ((err = snd_pcm_writei (playback_handle_left, buf_left, buf_frames_left)) != buf_frames_left) { fprintf (stderr, "write to audio interface left failed (%s)\n", snd_strerror (err)); exit (1); } } fprintf (stderr, "close handles\n"); snd_pcm_close (playback_handle_right); snd_pcm_close (capture_handle_right); snd_pcm_close (playback_handle_left); snd_pcm_close (capture_handle_left); return 0; }