Linux音频驱动(1)
Linux下的声卡驱动主要有OSS和ALSA。
OOS(Open Sound System),官网:www.opensound.com
ALSA(Advanced Linux Sound Architecture),官网:www.alsa-project.com
OSS架构与实现
OSS设备是字符设备,主设备号是14,次设备号由各个设备单独定义。
设备文件:
/dev/sndstat
只读文件,作用仅限于汇报当前声卡状态。提供给最终用户检测声卡的。
/dev/dsp
用于数字采样(sampling)和数字录音(recording)的设备文件。写数据就是放音,读数据就是录音。这个设备可能有多个,如/dev/dsp1等。
dsp设备主要是用来进行A/D,D/A转换的。可以已读写的方式打开,比如IP电话。
dsp设备驱动要考虑内核缓冲区和用户缓冲区的速度匹配,主要是采样频率(由内核决定)和应用程序的读写速度间的匹配,速度差异会导致声音数据不一致或者IO阻塞。
默认:8位无符号数据,单声道,8KHz采样率。
/dev/audio
类似于/dev/dsp,出于对兼容性的考虑,兼容于Sun工作站上的音频设备,使用的是mu-law编码方式,甚用。对于应用程序来说,同一时刻只能使用/dev/dsp或/dev/audio中的一种,因为它们是相同硬件的不同软件接口。
/dev/mixer
应用程序对混音器的软件接口。混音器电路通常由两个部分组成:input mixer和ouput mixer。
混音器位于dsp之后,和喇叭之类的设备直接相连。混音器输出的都是模拟信号,不管是对dsp进行输出,还是对喇叭进行输出。
对混音器的编程包括如何设置增益控制器的级别,以及如何在不同的音源间进行切换。通常这些操作是不连续的,而且不会像录音或者放音那样占用大量计算机资源。因此,混音器除了open和close外,大部分操作都是通过ioctl系统调用来完成。与/dev/dsp不同,/dev/mixer允许多个应用程序同时访问,并且混音器的设置值会一直保持到对应的设备文件被关闭为止。
为了简化应用程序的设计,Linux上的声卡驱动程序大多支持将混音器的ioctl操作直接应用到声音设备上,也就是说,如果已经打开了/dev/dsp,那么就不用打开/dev/mixer来对混音器进行操作,而是可以直接用打开/dev/dsp时得到的文件标志符来设置混音器。
/dev/sequencer
用来对声卡内建的波表合成器进行操作,或者对MIDI总线上的乐器进行控制。
相关文件:(kernel中)
include/linux/soundcard.h
include/linux/sound.h
sound/sound_core.h
模块入口见sound_core.h:
主要实现
subsys_initcall(init_soundcore);
module_exit(cleanup_soundcore);
static int __init init_soundcore(void)
{
int rc;
rc = init_oss_soundcore();
if (rc)
return rc;
sound_class = class_create(THIS_MODULE, "sound");
if (IS_ERR(sound_class)) {
cleanup_oss_soundcore();
return PTR_ERR(sound_class);
}
sound_class->devnode = sound_devnode;
return 0;
}
static int __init init_oss_soundcore(void)
{
if (preclaim_oss &&
register_chrdev(SOUND_MAJOR, "sound", &soundcore_fops) == -1) {
printk(KERN_ERR "soundcore: sound device already in use.\n");
return -EBUSY;
}
return 0;
}
static void __exit cleanup_soundcore(void)
{
cleanup_oss_soundcore();
class_destroy(sound_class);
}
static void cleanup_oss_soundcore(void)
{
/* We have nothing to really do here - we know the lists must be
empty */
unregister_chrdev(SOUND_MAJOR, "sound");
}
static const struct file_operations soundcore_fops =
{
/* We must have an owner or the module locking fails */
.owner = THIS_MODULE,
.open = soundcore_open,
};
Linux音频驱动(1)相关推荐
- Linux 音频驱动
Linux 音频驱动 硬件介绍 WM8960与IMX6ULL之间有两个通信接口:I2C和I2S 其中I2C用于配置WM8960 I2S用于音频数据传输 修改设备树文件 编写I2C子节点设备树 code ...
- Linux 音频驱动(四) ASoC音频驱动之Machine驱动
目录 1. 基本介绍 2. 源码分析 2.1. Machine数据结构 struct snd_soc_dai_link 3. 声卡 3.1. 数据结构struct snd_soc_card 3.2. ...
- Linux 音频驱动(五) ALSA音频驱动之PCM逻辑设备
目录 1. 前言 2. PCM逻辑设备 2.1. 创建 PCM逻辑设备: 2.2. PCM逻辑设备文件操作函数集:snd_pcm_f_ops[] 2.3. Open PCM逻辑设备 2.4. Writ ...
- STM32MP157驱动开发——Linux 音频驱动
STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...
- Linux音频驱动之二:Control接口的调用
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. control接口说明 Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频 ...
- linux 音频架构绕过,linux音频驱动架构
1.linux音频驱动架构分为3部分组成:硬件无关层(核心层ALSA).板级音频数字接口层驱动(McASP.McBSP等).外部codes驱动 sound/soc/davinci/ti81xx-etv ...
- 转载:Linux音频驱动-OSS和ALSA声音系统简介及其比较
Linux音频驱动-OSS和ALSA声音系统简介及其比较 概述 昨天想在Ubuntu上用一下HTK工具包来绘制语音信号的频谱图和提取MFCC的结果,但由于前段时间把Ubuntu升级到13.04,系统的 ...
- Linux 音频驱动(二) ASoC音频驱动之Platform驱动
目录 1. 简介 2. 源码分析 2.1. CPU DAI 2.1.1. 数据结构struct snd_soc_dai_driver 2.1.2. 注册CPU DAI:snd_soc_register ...
- linux音频驱动dma数据,Linux音频驱动简述
3.2 mixer接口 int register_sound_mixer(structfile_operations *fops, int dev); 上述函数用于注册1个混音器,第1个参数fops即 ...
- linux 音频驱动的流程,Intel平台下Linux音频驱动流程分析
[软件框架] 在对要做的事情一无所知的时候,从全局看看系统的拓扑图对我们认识新事物有很大的帮助.Audio 部分的驱动程序框架如下图所示: 这幅图明显地分为 3 级. 上方蓝色系的 ALSA Kern ...
最新文章
- 配置 L2 Population - 每天5分钟玩转 OpenStack(114)
- Web服务器 Web容器 Servlet容器
- JDBC对MySQL数据库存储过程的调用
- 《论文笔记》Experimental Research on Cooperative vSLAM for UAVs
- HTMLCSS--使用CSS完成页面布局及排版(附案例代码)
- Silverlight访问Wcf Ria Library的问题总结
- 数据分析之 pandas
- 湖南省委短信平台改造方案
- 信息安全-保研面试经历总结
- win7如何启用计算机的无线功能,win7系统如何开启wifi热点|win7系统配置wifi热点的方法...
- 论:CMMI 过程改进规程
- Ubuntu 查看文件以及磁盘空间大小管理
- Excel - 斜线表头制作
- 深圳Go培训:Go语言适合干什么?
- CANoe——CAPL(Message)
- java NIO BIO和AIO
- 控制结构:1.台球游戏
- 下载 kaakoo 咔咕 http://job.kaakoo.cn/download.aspx?ID=T679
- 汽车行业数据存储越发复杂?群晖备份存储方案为您支招
- python async 使用,介绍