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移植与编译心得
**************************************************************************************************** ...
随机推荐
- webpack dev server 和 sublime text 配合时需要注意的地方
参考:https://webpack.js.org/guides/development/ Adjusting Your Text Editor Some text editors have a &q ...
- JS——2048(支持触屏及键盘操作)
<html> <head> <title>2048</title> <style type="text/css"> ta ...
- 初识RecyclerView
初识RecyclerView 效果图 RecyclerView与ListView对比(官方) RecyclerView 小组件比 ListView 更高级且更具灵活性. 此小组件是一个用于显示庞大数据 ...
- Android Studio 如何打JAR包
Android Studio 如何打JAR包 在eclipse中我们知道如何将一个项目导出为jar包,供其它项目使用. 在AS中可以通过修改gradle才处理. 我们新建一个项目MakeJar,在 ...
- Programming In Scala笔记-第十五章、Case Classes和模式匹配
本章主要分析case classes和模式匹配(pattern matching). 一.简单例子 接下来首先以一个包含case classes和模式匹配的例子来展开本章内容. 下面的例子中将模拟实现 ...
- Swift下多个Storyboard的项目结构
我是个比较喜欢用storyboard和xib的人.我个人的习惯就是,能用storyboard的一定不用代码手工撸.当然自己业余个人写的项目,基本上一个storyboard就搞定了.但涉及到多人合作下时 ...
- 凸函数与Jensen不等式
这个是在凸优化里面看的,在EM算法中看有用到,所以用latex写了篇回忆用的小短文,现在不会把latex产生的pdf怎么转变成放到这里的内容. 所以我选择直接贴图. 这个pdf可以在我的资源里找到. ...
- SSO 基于CAS实现单点登录 实例解析(二)
本文目录: 概述 演示环境 部署CAS-Server相关的Tomcat 部署CAS-Client相关的Tomcat 测试验证SSO 第一: 本demo在一个机器上实现(三个虚拟主机),来看SSO单点登 ...
- 二维码扫描&集合排序
一.二维码扫描机制 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构 ...
- 线程在Linux中的实现
早在以前,我们就知道,CPU调度的基本单位是线程,而进程是拥有资源的基本单位,进程是用进程描述符表示的,那么线程是怎么实现和表示的呢? 线程机制是现代编程技术中常用的一种抽象概 ...