日期:2014-05-16 浏览次数:20710 次
int Audio_Record(char *pathname,int nSampleRate,int nChannels,int fmt)
{
int dsp_fd,mix_fd,status,arg;
dsp_fd = open("/dev/dsp" , O_RDWR); /*open dsp*/
if(dsp_fd < 0)
{
return OPEN_DSP_FAILED;
}
// arg = nSampleRate;
//status = ioctl(dsp_fd,SOUND_PCM_READ_RATE,&arg); /*set samplerate*/
/**
if(status < 0)
{
close(dsp_fd);
return SAMPLERATE_STATUS;
}
if(arg != nSampleRate)
{
close(dsp_fd);
return SET_SAMPLERATE_FAILED;
}
**/
// arg = nChannels; /*set channels*/
// status = ioctl(dsp_fd, SOUND_PCM_READ_CHANNELS, &arg);
/**
if(status < 0)
{
close(dsp_fd);
return CHANNELS_STATUS;
}
if( arg != nChannels)
{
close(dsp_fd);
return SET_CHANNELS_FAILED;
}
**/
// arg = fmt; /*set bit fmt*/
//status = ioctl(dsp_fd, SOUND_PCM_READ_BITS, &arg);
/**
if(status < 0)
{
close(dsp_fd);
return FMT_STATUS;
}
if(arg != fmt)
{
close(dsp_fd);
return SET_FMT_FAILED;
}
**/
arg = 0;
ioctl( dsp_fd, SNDCTL_DSP_RESET, (char *)&arg );
ioctl( dsp_fd, SNDCTL_DSP_SYNC, (char *)&arg );
arg = 1;
ioctl( dsp_fd, SNDCTL_DSP_NONBLOCK, (char*)&arg );
arg = nSampleRate;
ioctl( dsp_fd, SNDCTL_DSP_SPEED, (char *)&arg );
arg = nChannels;
ioctl( dsp_fd, SNDCTL_DSP_STEREO, 0 );
ioctl( dsp_fd, SNDCTL_DSP_CHANNELS, (char *)&arg );
arg = fmt;
ioctl( dsp_fd, SNDCTL_DSP_SETFMT, (char*)&arg );
arg = 3;
ioctl( dsp_fd, SNDCTL_DSP_SETTRIGGER, (char*)&arg );
arg = 3;
ioctl( dsp_fd, SNDCTL_DSP_SETFRAGMENT, (char*)&arg );
arg = 1;
ioctl( dsp_fd, SNDCTL_DSP_PROFILE, (char*)&arg );
FILE *file_fd = fopen(pathname,"w+");
if(file_fd == NULL)
{
close(dsp_fd);
return OPEN_FILE_FAILED;
}
int num = 2 * nChannels*nSampleRate*fmt/8;
int get_num;
unsigned char buf[num];
// Record
int j = 0;
while( 1 )
{