现在我用S3C2410在linux环境下开发音频部分,播放功能可以正常实现,但是录音部分有问题,具体问题是把PC上Linux环境下的录音程序移植到ARM上,它的执行速度要比PC上快10倍左右,不知道是哪里出现了问题?有相关经历的请指点一下。谢谢~<br /><br />录音程序如下:<br />#include<unistd.h> <br />#include<fcntl.h> <br />#include<sys/types.h> <br />#include<sys/ioctl.h> <br />#include<stdlib.h> <br />#include<stdio.h> <br />#include<linux/soundcard.h> <br /> <br />#define RATE 8000 <br />#define SIZE 16 <br />#define CHANNELS 1 <br />#define AUDIO_DEVICE "/dev/dsp"<br /><br />void delay(int i)<br />{<br /> while(i--);<br />}<br /> <br />int main(int argc,char * argv[]) <br />{ <br /> int fd,id,i=50,j=0; <br /> int arg; <br /> int status; <br /> char filename[30] ="record.wav";<br /> char buf[1024]; <br /><br /> if((id = open(filename, O_RDWR | O_CREAT)) < 0) <br /> { <br /> printf("Can't open output file!\n"); <br /> exit (1); <br /> } <br /> if ((fd = open(AUDIO_DEVICE, O_RDWR | O_NONBLOCK)) < 0) <br /> { <br /> printf("open of /dev/dsp failed"); <br /> exit(1); <br /> } <br /> fcntl (fd, F_SETFL, fcntl (fd, F_GETFL) & ~O_NONBLOCK);<br /> <br /> arg = SIZE; <br /> status = ioctl(fd,SOUND_PCM_WRITE_BITS,&arg); <br /> if(status == -1) <br /> printf("SOUND_PCM_WRITE_BITS ioctl failed"); <br /> if(arg != SIZE) <br /> printf("unable to set sample size"); <br /> <br /> arg = CHANNELS; <br /> status = ioctl(fd,SOUND_PCM_WRITE_CHANNELS,&arg); <br /> if(status == -1) <br /> printf("SOUND_PCM_WRITE_CHANNELS ioctl failed"); <br /> if(arg != CHANNELS) <br /> printf("unable to set number of channels"); <br /> <br /> arg = RATE; <br /> status = ioctl(fd,SOUND_PCM_WRITE_RATE,&arg); <br /> if(status == -1) <br /> printf("SOUND_PCM_WRITE_RATE ioctl failed"); <br /><br /> printf("Say something:\n"); <br /> while(i--) <br /> { <br /> read(fd,buf,sizeof(buf)); <br /> write(id,buf,sizeof(buf)); <br /> printf("you are saying %d\n",j++);<br /> } <br /> close(id); <br /> close(fd); <br /> return 0; <br />} |
|