linux运行完程序声音提示,linux 播放声音文件程序代码

声音文件必须为Wave PCM unsigned 8bits mono格式

/* the *.wav must be 8000Hz 64kbps  8bits MONO(1)*/

#include

#include

#include

#include

#include

#include

#include /*for OSS style sound programing */

#define BUFF_SIZE  512 /*buffer size:512 Bytes */

#define FMT8BITS AFMT_U8 /*unsigned 8 bits(for almost PC) */

#define FMT16BITS AFMT_S16_LE /*signed 16 bits,little endian */

#define FMT8K    8000 /*default sampling rate */

#define FMT11K   11025 /*11,22,44,48 are three pop rate */

#define FMT22K   22050

#define FMT44K   44100

#define FMT48K  48000

#define MONO     1

#define STEREO   2

int main(int argc, char *argv[])

{

if(argc!=2)

printf("input error! ./playvoice filename");

int fd; //for device

fd=open("/dev/dsp",O_WRONLY);

if (fd<0){

perror("Can't open /dev/dsp");

return -1;

}

int outfile;

outfile=open(argv[1],O_RDONLY);

if (outfile<0) {

perror("Cannot open file for writing");

return -1;

}

/* set bit format */

int bits = FMT16BITS;

if (ioctl(fd, SNDCTL_DSP_SETFMT, &bits) == -1) {

fprintf(stderr, "Set fmt to bit %d failed:%s/n", bits,

strerror(errno));

return (-1);

}

if (bits != FMT16BITS) {

fprintf(stderr, "do not support bit %d, supported 8、16/n", bits);

return (-1);

}

/*set channel */    int channel = MONO;    if ((ioctl(fd, SNDCTL_DSP_CHANNELS, &channel)) == -1) { fprintf(stderr, "Set Audio Channels %d failed:%s/n", channel,  strerror(errno)); return (-1);    }      /*set speed */   int speed = FMT8K;    if (ioctl(fd, SNDCTL_DSP_SPEED, &speed) == -1) { fprintf(stderr, "Set speed to %d failed:%s/n", speed,  strerror(errno)); return (-1);    }    if (speed != FMT8K) { fprintf(stderr, "do not support speed %d/n", speed,  speed); return (-1);    }  int nRD; unsigned char buff[BUFF_SIZE]; /*sound buffer */ while(1){ if ((nRD = read(outfile, buff, BUFF_SIZE)) < 0) {        perror("read sound data file failed");        return(-1);        }   else if(nRD==0){         perror("read over!");         exit(0);         }  if (fd>0)     write(fd,buff,nRD);}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值