Linux下和声卡相关的文件有许多,如采集数字样本的/dev/dsp文件,针对混音器的/dev/mixer文件以及用于音序器的/dev /sequencer等。文件/dev/audio是一个基于兼容性考虑的声音设备文件,它实际是到上述数字设备的一个映射,它最大的特色或许是对诸如 wav这类文件格式的直接支持。我们下面的例子即使用了此设备文件实现了一个简单的录音机:我们从声卡设备(当然要用麦克风)读取音频数据,并将它存放到 文件test.wav中去。要播放这个wav文件,只要如前面所述,使用命令cp test.wav >/dev/audio即可,当然你也可以用Linux下其他的多媒体软件来播放这个文件。

1.[代码]cpp代码

/* 此文件中定义了下面所有形如SND_的变量*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#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*/

if(dsp_fd < 0)

{

return OPEN_DSP_FAILED;

}

arg = 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的各个参数*/

FILE *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];

while(feof(file_fd) == 0)

{

get_num = fread(buf,1,num,file_fd);

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;

}

int main()

{

int value;

value = P8100_Audio_Play("/windows/C/WINDOWS/Media/Windows Startup.wav",44100,2,16);

//注意播放文件的路径哦!!

fprintf(stderr,"value is %d",value);

return 0;

}

linux 查看wav文件内容,Linux 播放wav文件相关推荐

  1. linux查看删除init内容,linux常用命令

    图形界面启动 startx 关机 shutdown -h now 立刻关机 shutdown -r now 立刻重启 reboot 立刻重启 注销 logout 记事本 vi 文件名 进入后 i 插入 ...

  2. linux 查看war包内容,linux解压war包(示例代码)

    可以用unzip命令 unzip project.war -d project 这样就在当前目录下解压project.war到project目录里面,参数-d的意思是创建project目录 附:unz ...

  3. linux查看启动配置文件内容,Linux开机启动项的查看和设置方法总结

    一.查看开机自启项 1.Centos7自启项查看方式从Centos6的chkconfig改为: systemctl list-unit-files 2.用grep过滤查看,比如: 查看启动项: sys ...

  4. linux vim无法编辑文件内容,Linux 使用vim命令编辑文件内容

    在终端可以使用vim命令来直接编辑文件内容. vim,也可以叫做vi. vim有三种模式:命令模式.输入模式.底线命令模式. 命令模式 vim  文件名   进入命令模式,vim也可以写成vi. 如果 ...

  5. linux按照更改时间查看文件,Linux查看特定时间段内修改过的文件

    Linux查看特定时间段内修改过的文件 一.Linux系统日志的一些信息,日志配置文件syslog.conf 系统日志一般都存在/var/log下 常用的系统日志如下: 核心启动日志:/var/log ...

  6. Linux下文件内容更新了,文件夹时间戳却没变?

    在日常多人协作时,最开始习惯看文件夹更新时间来查看是否有更新,但发现总是不能如实反映情况, 文件夹日期有时变,有时不变.很是困惑,就来探究下. Desk with stationary. Studio ...

  7. linux 搜索 文件 内容,Linux 文件查找及文件内容查找

    使用grep搜索文件内容--快捷.方便 (1) 在当前目录下的所有文件的文件内容中查找哪个文件的内容中有findcontents(大小写不敏感,列出findcontents所在文件的所在行)--适合于 ...

  8. linux下qt浏览word文件内容,Qt获取office文件内容

    Qt获取office文件内容 需要获取word文件的文件内容.网上找了好久,大部分都是excel的.而word的很少.所以在这里记录一下,方便大家查阅和自己使用. 使用的Qt版本是5.4.2 . 下面 ...

  9. linux 在指定行后写入文件内容,linux命令行下将指定的几行内容写入到一个文件中...

    覆盖型写法 (文件里原来的内容被覆盖) echo "aaa" > a.txt echo aaa > a.txt 添加型写法 (新内容添加在原来内容的后面) echo & ...

  10. Linux显示文件目录分屏显示,Linux分屏显示文件内容-linux more命令详解-嗨客网

    Linux分屏显示文件内容(more)教程 在使用 more 命令时,最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 Linu ...

最新文章

  1. Biztalk 2006 adapter的开发比2004容易的多
  2. uiautomatorviewer_【问题】解决Android8.0以上运行不了uiautomatorviewer的办法
  3. [No000011B]为什么有些程序员悄无声息渡过35岁中年危机?
  4. C++ Primer 5th笔记(7)chapter7 类:构造函数、类类型转换、聚合类
  5. 14.grafana导入导出;Grafana的安装和Influxdb数据源配置
  6. python数据挖掘学习笔记】十.Pandas、Matplotlib、PCA绘图实用代码补充
  7. caspase3是什么意思_caspase-3
  8. C++ 3D物理引擎库BulletPhysics基本使用
  9. 【DAY8】关于多线程的练习
  10. SQL按字段分组取最大(小)值记录(重复记录)
  11. session.setattribute 设置后取不到值_从入门到精通,别处学不到的污泥浓度计的使用和维护技巧...
  12. postgreSQL 自动递增序号
  13. springMVC入门二
  14. 猿辅导(实习800/天)面试算法题详解
  15. 报告下集 |《认文识字·中文字信息精准化》报告
  16. itext7实现参数和图片替换
  17. 【uniapp小程序】uploadFile文件上传
  18. 连分数与丢番图方程简介
  19. ASCII码表及键盘码表。
  20. 腾讯云人脸验证使用方法

热门文章

  1. css中设置background属性
  2. 1fichier.com-1TB免费FTP空间的使用
  3. c语言数值常量4.5e0,c语言数值常量表示方法问题
  4. ESP32 文件存储 spiffs
  5. python实现扫描二维码图片,返回相关信息
  6. Oracle定时任务dbms_job使用详解
  7. kdc服务器密码修改,kdc配置HA · ZHY ZONE
  8. RQ940服务器显示器不亮,稳定可靠 联想ThinkServer RQ940服务器
  9. cogs908. 校园网
  10. 【2018亚太数据中心峰会】林峰:中国游戏打破传统模式立足国际舞台