#include
#include
#include
#include
#include
#include
#include
#define LENGTH 3 /* how many seconds of speech to store */
#define RATE 44100 /* the sampling rate */
#define SIZE 16 /* sample size: 8 or 16 bits */
#define CHANNELS 1 /* 1 = mono 2 = stereo */
/* this buffer holds the digitized audio */
//unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8];
int main()
{
int fdplay;
int fdrec;
int arg;
int status;
FILE *fp = 0;
int i=0;
int bufferSize = 1024;
short *buf = 0;
/* open sound device */
fdplay = open("/dev/dsp", O_WRONLY);
if (fdplay < 0) {
printf("open of /dev/dsp failed\n");
return 0;
}
fdrec = open("/dev/dsp1", O_RDONLY);
if (fdrec < 0) {
printf("open of /dev/dsp2 failed\n");
exit(1);
}
/* set sampling parameters */
arg = SIZE; /* sample size */
status = ioctl(fdplay, SOUND_PCM_WRITE_BITS, &arg);
if (status == -1)
{
printf("SOUND_PCM_WRITE_BITS ioctl failed\n");
goto exit;
}
if (arg != SIZE)
{
printf("unable to set play sample size\n");
goto exit;
}
arg = SIZE; /* sample size */
status = ioctl(fdrec, SOUND_PCM_READ_BITS, &arg);
if (status == -1)
{
printf("SOUND_PCM_RAED_BITS ioctl failed\n");
goto exit;
}
if (arg != SIZE)
{
printf("unable to set rec sample size = %d\n", arg);
goto exit;
}
arg = CHANNELS; /* mono or stereo */
status = ioctl(fdplay, SOUND_PCM_WRITE_CHANNELS, &arg);
if (status == -1)
{
printf("SOUND_PCM_WRITE_CHANNELS ioctl failed\n");
goto exit;
}
if (arg != CHANNELS)
{
printf("unable to set play number of channels\n");
goto exit;
}
arg = CHANNELS; /* mono or stereo */
status = ioctl(fdrec, SOUND_PCM_READ_CHANNELS, &arg);
if (status == -1)
{
printf("SOUND_PCM_RAED_CHANNELS ioctl failed\n");
goto exit;
}
if (arg != CHANNELS)
{
printf("unable to set rec number of channels\n");
goto exit;
}
arg = RATE; /* sampling rate */
status = ioctl(fdplay, SOUND_PCM_WRITE_RATE, &arg);
if (status == -1)
{
printf("SOUND_PCM_WRITE_WRITE ioctl failed");
goto exit;
}
arg = RATE; /* sampling rate */
status = ioctl(fdrec, SOUND_PCM_READ_RATE, &arg);
if (status == -1)
{
printf("SOUND_PCM_READ_WRITE ioctl failed");
goto exit;
}
//fp = fopen("1.wav", "r");
buf = (short*)malloc(bufferSize*4);
while (1)
{
if(read(fdrec, buf, bufferSize*4) != bufferSize*4)
{
printf("read file failed\n");
break;
}
printf("Play one sample %d\n", i++);
if ((write(fdplay, buf, bufferSize*4)) != bufferSize*4)
{
printf("PLay one buffer %d\n", i++);
break;
}
if(i >100)
break;
//status = ioctl(fd, SOUND_PCM_SYNC, 0);
/*if (status == -1)
{
printf("SOUND_PCM_SYNC ioctl failed");
break;
}*/
}
free(buf);
ioctl(fdplay, SOUND_PCM_SYNC, 0);
exit:
close(fdplay);
close(fdrec);
}
(carlsonlee_freec)