Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30994674
  • 博文数量: 230
  • 博客积分: 2868
  • 博客等级: 少校
  • 技术积分: 2223
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 21:48
个人简介

Live & Learn

文章分类

全部博文(230)

文章存档

2022年(2)

2019年(5)

2018年(15)

2017年(42)

2016年(24)

2015年(13)

2014年(1)

2012年(5)

2011年(58)

2010年(56)

2009年(9)

我的朋友

分类: 嵌入式

2010-09-09 14:19:46

#include
#include
#include
#include
#include
#include
#include
/* 下面的三个参数是跟具体文件相关的,文件什么样,就要设置成什么样 */ 
#define RATE 44100   
#define SIZE 16//16     
#define CHANNELS 2  // 1表示单声道,2为立体声
/* ................ */
unsigned char buf[RATE*SIZE/8]; //buf里面正好放一秒钟的音频,下面的计时还要用 
int main()
{
    int fd; 
    int wavfd; //wav文件的描述符 
    int arg;        /* ..ioctl..... */
    int status;   /* ........ */
                /* ...... */
    fd = open("/dev/dsp", O_WRONLY);       
    if (fd < 0) {
        printf("open of /dev/dsp failed");
        exit(1);
}
    wavfd = open("./aa.wav", O_RDONLY);
    if (wavfd < 0) {
        printf("open of wav failed");
        exit(1);
  }
  
/* .......... */
    arg = SIZE;
    status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
    if (status == -1)
         perror("SOUND_PCM_WRITE_BITS ioctl failed");
    if (arg != SIZE)
         perror("unable to set sample size");
  
/* .......... */
    arg = CHANNELS;
    status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
    if (status == -1)
        perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");
    if (arg != CHANNELS)
        perror("unable to set number of channels");
  
/* .......... */
     arg = RATE;
         status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
     if (status == -1)
         perror("SOUND_PCM_WRITE_WRITE ioctl failed");
  
    /* 从wav文件中读buf大小的内容,然后写入/etc/dsp中,直到文件结束 */ 
     int time = 0; //动态显示播放时间用 
  
     while (status = read(wavfd, buf, sizeof(buf)) > 0) {
         write(fd, buf, sizeof(buf));
         printf("%ds, enjoy ...\n",time++);  
  
          /* 以下三句,用于在更改播放文件的参数时,播放掉缓冲区内的内容,可以用,更保险*/     
         /*status = ioctl(fd, SOUND_PCM_SYNC, 0); 
           if (status == -1)
               perror("SOUND_PCM_SYNC ioctl failed");
          */          
        }
}

阅读(1713) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~