Linux C OSS音频编程
在linux下也可以写一个类似麦克风和喇叭这样的应用程序,只要打开/dev/dsp这个设备驱动,对该设备read读操作相当于录音,对这个设备write写操作相当于放音。
对于以下出现的一些参数我就不多说了,百度很多,大家可以自行查找,关于音频编程还有很多,alsa和OSS混合编程是目前用得最多的,如果对这方面有兴趣的可以深入研究。
以下是当时我在学习这方面知识的时候写的一个测试程序:
测试的结果就是当对着麦克风说话时,喇叭会放出声音,前提是你的linux系统需要安装/dev/dsp这个驱动。
按照这个原理,你应该有能力可以写一个类似千千静听这样的MP3播放器的软件了!去试试吧!
#include <stdio.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> // /usr/include/linux/videodev2.h //v4l2接口 // /usr/include/linux/soundcard.h //声卡 #include <linux/soundcard.h> #define SIZE 44100*2*2*5 int 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 ; }
Linux C OSS音频编程的更多相关文章
- Linux音频编程指南
Linux音频编程指南 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序 ...
- 【Linux系统编程应用】Linux音频编程基础(一)【转】
转自:https://blog.csdn.net/dengjin20104042056/article/details/52435290 一.数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处 ...
- Linux音频编程指南(转)
转自: http://www.ibm.com/developerworks/cn/linux/l-audio/ Linux音频编程指南 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有 ...
- Linux音频编程(一)ALSA介绍
Linux下的音频编程中有OSS和ALSA,本篇文章将对ALSA进行相关介绍.ALSA提供一系列基于命令行的工具集,比如混音器(mixer),音频文件播放器(aplay),以及控制特定声卡特定属性的工 ...
- Linux音频编程(二)声卡介绍
一.声卡 1.声卡是audio interface,它含有hardware buffer,而这个hardware buffer是在声卡里面,不是内存.声卡的缓存是环状的,则ALSA中是将数据分成连续的 ...
- linux 音频编程
http://blog.csdn.net/sea918/article/details/7249216 1.音频开发模型: OSS(open sound system) linux/unix 平 ...
- Linux音频编程
1. 背景 在<Jasper语音助理介绍>中, 介绍了Linux音频系统, 本文主要介绍了Linux下音频编程相关内容. 音频编程主要包括播放(Playback)和录制(Record), ...
- Linux设备驱动开发详解-Note(5)---Linux 内核及内核编程(1)
Linux 内核及内核编程(1) 成于坚持,败于止步 Linux 2.6 内核的特点 Linux 2.6 相对于 Linux 2.4 有相当大的改进,主要体现在如下几个方面. 1.新的调度器 2.6 ...
- 嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得
**************************************************************************************************** ...
随机推荐
- How To determine DDIC Check Table, Domain and Get Table Field Text Data For Value?
How To determineDDIC Check Table, Domain and Get Table Field Text Data For Value? 1.Get Table Fie ...
- Android源码解析——AsyncTask
简介 AsyncTask 在Android API 3引入,是为了使UI线程能被正确和容易地使用.它允许你在后台进行一些操作,并且把结果带到UI线程中,而不用自己去操纵Thread或Handler.它 ...
- Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》
之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...
- 有一个排序二叉树,数据类型是int型,如何找出中间大的元素。
void tree2Dll(TNode* root, TNode*& tail) { if (!root) { return; } if (root->left) { tree2Dll( ...
- Python 一个奇特的引用设定
def f(x): print 'original' if x > 0: return f(x-1) return 0 g = f def f(x): print 'new' return x ...
- Java 拓展之调用其他语言
目前而言,编程语言真的是太多了.每一种都是一种智慧的结晶,但是每个都存在其缺点.网上经常能看到一些程序员争论"XX是世界上最好的语言"之类的话题.其实我们大可不必这样.语言本身只是 ...
- UE4实现闪烁效果
官网文档链接:http://docs.unrealengine.com/latest/CHN/Engine/Rendering/Materials/ExpressionReference/Math/i ...
- 带你深入理解STL之List容器
上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入.删除等操作时都造成了内存块的拷贝和移动,另外在内存空间 ...
- Android简易实战教程--第七话《在内存中存储用户名和密码》
首先是配置文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- 开源项目——小Q聊天机器人V1.3
小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...