📄 play.c
字号:
#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <linux/soundcard.h>#define OPEN_DSP_FAILED 0x00000001 /*打开 dsp 失败!*/#define SAMPLERATE_STATUS 0x00000002 /*samplerate status failed*/#define SET_SAMPLERATE_FAILED 0x00000003 /*set samplerate failed*/#define CHANNELS_STATUS 0x00000004 /*Channels status failed*/#define SET_CHANNELS_FAILED 0x00000005 /*set channels failed*/#define FMT_STATUS 0x00000006 /*FMT status failed*/#define SET_FMT_FAILED 0x00000007 /*set fmt failed*/#define OPEN_FILE_FAILED 0x00000008 /*opem filed failed*/int P8100_Audio_Play(char *pathname,int nSampleRate,int nChannels,int fmt){int dsp_fd,mix_fd,status,arg;dsp_fd = open("/dev/dsp" , O_RDWR); /*open dsp*///dsp_fd = open("/dev/dsp" , O_WRONLY);if(dsp_fd < 0){ return OPEN_DSP_FAILED;}#if 1arg = nSampleRate;status = ioctl(dsp_fd,SOUND_PCM_WRITE_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_WRITE_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_WRITE_BITS, &arg);if(status < 0){ close(dsp_fd); return FMT_STATUS;}if(arg != fmt){ close(dsp_fd); return SET_FMT_FAILED;}/*到此设置好了DSP的各个参数*/ #endifFILE *file_fd = fopen(pathname,"r");if(file_fd == NULL){ close(dsp_fd); return OPEN_FILE_FAILED;}int num = 3*nChannels*nSampleRate*fmt/8;int get_num;char buf[num];printf("num = %d\n",num);while(feof(file_fd) == 0){ get_num = fread(buf,1,num,file_fd); printf("get_num = %d\n",get_num ); write(dsp_fd,buf,get_num); if(get_num != num) { close(dsp_fd); fclose(file_fd); return 0; }}close(dsp_fd);fclose(file_fd);return 0;}/**test*/int main(){int value;value = P8100_Audio_Play("029.wav",16000,1,16);//注意播放文件的路径哦!!fprintf(stderr,"value is %d\n",value);return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -