免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1809 | 回复: 0
打印 上一主题 下一主题

Linux环境下用c语言写的播放wav文件的小程序[转] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-30 16:35 |只看该作者 |倒序浏览

http://blog.csdn.net/noah1987/archive/2008/10/21/3118934.aspx
本程序可以读取.wav文件,然后进行播放。
使用前,请确认您是否安装音频驱动。
确认方法:cat /etc/sndstat,如果显示无此设备,则没有安装驱动。
安装驱动很简单,到oss.com上下载音频驱动,然后按照网上的教程进行就可以了。
源代码如下:
#include
#include
#include
#include
#include
#include
#include
/* 下面的三个参数是跟具体文件相关的,文件什么样,就要设置成什么样 */
#define RATE 11025   
#define SIZE 16     
#define CHANNELS 1  // 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_RDWR);      
    if (fd
/* .......... */
    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");
          */         
        }
}
本程序中需要一个.wav文件才能播放,你可以到百度mp3上去搜索一个.wav文件,放到程序目录下。然后,把程序中的文件名改成该音频的文件名。
ps:可以用file 文件名命令来查看该wav文件的属性,以便据此来更改程序中的播放参数。
本文来自CSDN博客,转载请标明出处:
http://blog.csdn.net/noah1987/archive/2008/10/21/3118934.aspx


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/88620/showart_2135653.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP