博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux C OSS音频编程
阅读量:6527 次
发布时间:2019-06-24

本文共 1647 字,大约阅读时间需要 5 分钟。

在linux下也可以写一个类似麦克风和喇叭这样的应用程序,只要打开/dev/dsp这个设备驱动,对该设备read读操作相当于录音,对这个设备write写操作相当于放音。

对于以下出现的一些参数我就不多说了,百度很多,大家可以自行查找,关于音频编程还有很多,alsa和OSS混合编程是目前用得最多的,如果对这方面有兴趣的可以深入研究。

以下是当时我在学习这方面知识的时候写的一个测试程序:

测试的结果就是当对着麦克风说话时,喇叭会放出声音,前提是你的linux系统需要安装/dev/dsp这个驱动。

按照这个原理,你应该有能力可以写一个类似千千静听这样的MP3播放器的软件了!去试试吧!

#include 
#include
#include
#include
// /usr/include/linux/videodev2.h //v4l2接口// /usr/include/linux/soundcard.h //声卡#include
#define SIZE 44100*2*2*5int main(void){ int fd ; fd = open("/dev/dsp" , O_RDWR); if(-1 == fd ) { perror("Open SoundCard Fail ... \n"); return -1 ; } //speex 声音压缩库 //ALSA 声音解码库 //读取声卡参数 //rate 采样率 channels 声道 bits 量化位数 int rate , channels , bits ; char buffer[SIZE] = {0}; //将声卡配置成MP3标准 //采样率 rate = 44100 ; //通道数 channels = 2 ; //量化位数 bits = 16 ; if(ioctl(fd , SOUND_PCM_WRITE_RATE , &rate) < 0) perror("write soundcard rate fail"); if(ioctl(fd , SOUND_PCM_WRITE_CHANNELS, &channels) < 0) perror("write soundcard channels fail"); if(ioctl(fd , SOUND_PCM_WRITE_BITS ,&bits ) < 0) perror("write soundcard bits fail"); //读取参数 if(ioctl(fd , SOUND_PCM_READ_RATE , &rate) <0) perror("read soundcard rate fail"); if(ioctl(fd , SOUND_PCM_READ_CHANNELS, &channels) <0) perror("read soundcard channels fail"); if(ioctl(fd , SOUND_PCM_READ_BITS , &bits) <0) perror("read soundcard bits fail"); printf("rate:%d channels:%d bits:%d \n" , rate , channels , bits ); int ret ; while(1) { printf("recording ... \n"); ret = read(fd , buffer , SIZE); printf("playing ... \n"); write(fd , buffer , ret); } close(fd); return 0 ;}

转载地址:http://fzibo.baihongyu.com/

你可能感兴趣的文章
win7 x64 jdk1.7.0_51
查看>>
45 Useful Oracle Queries--ref
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
小菜学习设计模式(四)—原型(Prototype)模式
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
高效的使用 Response.Redirect
查看>>
在myeclipse中写sql语句的细节问题
查看>>
使用ShellExecute打开目标文件所在文件夹并选中目标文件
查看>>
Lombok简化Java代码的好工具
查看>>
HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
查看>>
Minix中的字符判定ctype.c
查看>>
91平台iOS接入demo
查看>>
五个优秀的硬盘检测工具
查看>>
用js实现table内容从下到上连续滚动
查看>>
基于ffmpeg的流媒体服务器
查看>>
项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors
查看>>
JVM学习笔记(一)------基本结构
查看>>
[开源]一个完整的黄页小程序
查看>>
git flow在Vue项目中的应用
查看>>
Android 动画的一些理解
查看>>