linux alsa声卡命令,Linux ALSA声卡驱动之一:ALSA架构简介

一.  概述

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。

在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

0_1298463602144u.gif

图 1.1   alsa的软件体系结构

由图1.1可以看出,用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能。本系列博文仅对嵌入式系统中的alsa-driver和alsa-soc进行讨论。

二.  ALSA设备文件结构

我们从alsa在linux中的设备文件结构开始我们的alsa之旅. 看看我的电脑中的alsa驱动的设备文件结构:

$ cd /dev/snd

$ ls -l

crw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0

crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0

crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0c

crw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0p

crw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1p

crw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seq

crw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer

$

我们可以看到以下设备文件:controlC0 -->                 用于声卡的控制,例如通道选择,混音,麦克风的控制等

midiC0D0  -->                用于播放midi音频

pcmC0D0c --〉               用于录音的pcm设备

pcmC0D0p --〉               用于播放的pcm设备

seq  --〉                        音序器

timer --〉                       定时器

其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。从上面的列表可以看出,我的声卡下挂了6个设备,根据声卡的实际能力,驱动实际上可以挂上更多种类的设备,在include/sound/core.h中,定义了以下设备类型:

#define SNDRV_DEV_TOPLEVEL  ((__force snd_device_type_t) 0)

#define SNDRV_DEV_CONTROL   ((__force snd_device_type_t) 1)

#define SNDRV_DEV_LOWLEVEL_PRE  ((__force snd_device_type_t) 2)

#define SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000)

#define SNDRV_DEV_PCM       ((__force snd_device_type_t) 0x1001)

#define SNDRV_DEV_RAWMIDI   ((__force snd_device_type_t) 0x1002)

#define SNDRV_DEV_TIMER     ((__force snd_device_type_t) 0x1003)

#define SNDRV_DEV_SEQUENCER ((__force snd_device_type_t) 0x1004)

#define SNDRV_DEV_HWDEP     ((__force snd_device_type_t) 0x1005)

#define SNDRV_DEV_INFO      ((__force snd_device_type_t) 0x1006)

#define SNDRV_DEV_BUS       ((__force snd_device_type_t) 0x1007)

#define SNDRV_DEV_CODEC     ((__force snd_device_type_t) 0x1008)

#define SNDRV_DEV_JACK          ((__force snd_device_type_t) 0x1009)

#define SNDRV_DEV_LOWLEVEL  ((__force snd_device_type_t) 0x2000)

通常,我们更关心的是pcm和control这两种设备。

三.  驱动的代码文件结构

在Linux2.6代码树中,Alsa的代码文件结构如下:

sound

/core

/oss

/seq

/ioctl32

/include

/drivers

/i2c

/synth

/emux

/pci

/(cards)

/isa

/(cards)

/arm

/ppc

/sparc

/usb

/pcmcia /(cards)

/oss

/soc

/codecscore               该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分

core/oss        包含模拟旧的OSS架构的PCM和Mixer模块

core/seq        有关音序器相关的代码

include          ALSA驱动的公共头文件目录,该目录的头文件需要导出给用户空间的应用程序使用,通常,驱动模块私有的头文件不应放置在这里

drivers           放置一些与CPU、BUS架构无关的公用代码

i2c                 ALSA自己的I2C控制代码

pci                 pci声卡的顶层目录,子目录包含各种pci声卡的代码

isa                 isa声卡的顶层目录,子目录包含各种isa声卡的代码

soc                针对system-on-chip体系的中间层代码

soc/codecs    针对soc体系的各种codec的代码,与平台无关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

寒武纪上市:AI芯片和普通芯片有何不同?全球AI芯片公司大全都在这里了

来源:Zach小生作者:腾讯新闻知识官、美国宾州州立大学硕士、芯片工程师Zach小生7月20日,寒武纪正式在A股科创板上市,成为AI芯片第一股,引起了业内的热议和关注。根据相关的资料显示,目前中国IC设计企业已超…

Python3-笔记-B-003-数据结构-元组tuple( )

# 元组[有序不变序列](不可修改)def tuples():# --- 元组 --- # 创建 (类似于列表的数据存储方式,但是不能修改) tuples ("柳岩", 21, "女")tuples tuple(["a", "b", "c"]) # 将 列表 转为 元组 (注:将字典转为元组会损失…

linux java输出到文件,linux java输出到文件内容

linux java输出到文件内容[2021-01-30 07:48:37] 简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#x…

关于TCP/IP协议及网络通信相关问题

一、网络模型: OSI标准模型七层架构以及其传输数据的模型如下: 传输信息的过程由上之下逐渐封装,接收过程则是由下至上逐渐拆包,每一层只解析自己独立的部分。 二、网络的机要素 1、IP 1 public class NetTest { 2 public sta…

linux编写复制脚本程,常用的Shell脚本

1、通过位置变量创建linux系统账户及密码$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数1 #!/bin/bash2 #Author: Peter zh3 #Blog: https://home.cnblogs.com/zhangwduoduoj/4 #Time: 2019-08-17 19:19:455 #Name: userad.sh6 #Version: v1.07 #Description…

世界人工智能发展究竟到了什么水平

来源:第一财经关于人工智能在当今科技界的发展水平,学术界、产业界和媒体界可能会有不同的看法。我经常听到的一个说法是:现在基于大数据与深度学习的人工智能是一种完全新颖的技术形态,它的出现能够全面地改变未来人类的社会形态…

37-字符的全排列

题目内容:对字符串(数字,字母,符号)进行全排列,并统计全排列的种树输入描述输入一个字符串输出描述输出字符串的全排列,每种情况占一行,最后一行输出全排列的个数输入样例123输出样例…

Quanta杂志长文翻译:通过信息论判定个体的边界

本文是“Quanta magazine”文章“What Is an Individual? Biology Seeks Clues in Information Theory” 的全文翻译。译者Peter,原文地址 https://www.quantamagazine.org/what-is-an-individual-biology-seeks-clues-in-information-theory-20200716/导读&#x…

linux语言 翻译工具,Linux文本转语音工具eSpeak介绍

Text to speech tool in LinuxeSpeak是一款 Linux 命令行工具,能把文本转换成语音。它是一款简洁的语音合成器,用C语言编写而成,它支持英语和其它多种语言。eSpeak 从标准输入或者输入文件中读取文本。虽然语音输出与真人声音相去甚远。但是&…

python--*args和**kwargs可变参数

先来看个例子: #! /usr/bin/env python #codingutf-8def foo(*args, **kwargs):print(args,args)print(kwargs,kwargs)print(----------------------------)if __name__ __main__:foo(1,2,3,4)foo(a1,b2,c3)foo(1,2,3,4,a1,b2,c3)foo(a,1,None,a1,b2,c3) 结果&…

因果学习的三个层次

来源:混沌巡洋舰昨天龚鹤扬博士在集智的讲座因果学习综述,我借此机会结合我的理解给大家总结客串下这个讲座,和因果学习的核心内容,及巡洋舰一段时间关于因果的文章汇总。这个讲座分为三部分,第一是什么因果及其哲学基…

查看文件详细信息linux,linux命令stat,查看文件详细信息

搜索引擎广告过滤Chrome插件搜索广告屏蔽Chrome插件:自动过滤:百度,360,搜狗,google,bing的搜索广告,让魏则西的悲剧不再重演.珍爱生命,远离搜索广告! 下载:FuckAd.zip 安装:方法自行百度. 关闭百 ...如何解读SQL Server日志(2/3)接下来说说返回的Ro…

BZOJ1010玩具装箱 - 斜率优化dp

传送门 题目分析: 设\(f[i]\)表示装前i个玩具的花费。 列出转移方程:\[f[i] max\{f[j] ((i - (j 1)) sum[i] - sum[j] - L))^2\}\] 令\(x[i] sum[i] i\), \(P L 1\),上式化为:\[f[i] max\{f[j] (x[i] - x[j] - P)^2\}\]…

人与机器——解析人工智能的三大类别以及哲学家的相关思想实验

来源:北京物联网智能技术应用协会你是否曾经产生过怀疑,你身边的某个人可能是个机器人呢?毕竟现在由于技术的发展,机器人的外观、行为都有可能被设置得和人类十分相像。这似乎有些荒谬和匪夷所思,但是你如何能百分之百…

linux暂停线程和恢复,是否有可能在Linux [暂停]中检测到线程已进行上下文切换?...

能够当所述线程中的一个被切换上下文(即,暂停),以检测可以找到?至于你的问题是否可能 - 它认为这是可能的。至少SystemTap(https://sourceware.org/systemtap/)可以做到这一点。probe scheduler.ctxswitch{if (target_pid ! 0&& next…

大战设计模式【12】—— 迭代器模式

迭代器模式(Iterator) 设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample 一、定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 二、结构 Iterator(抽象迭代器&#xff0…

MIT最新报告:完全无人驾驶仍需10年,马斯克:特斯拉已经实现

来源:机器学习研究组订阅号两年前,麻省理工学院成立了「未来工作特别小组」,这个小组目前有20多人,旨在研究「大众创新年代」的工作演变。近期,他们发表了一个最新的报告,重点关注了自动驾驶领域的进展。而…

win7 linux双系统win7启动不了怎么办,双系统windows打不开怎么办|苹果双系统win7打不开怎么解决|mac双系统打不开解决方法-系统城...

2016-03-30 19:28:38  浏览量:22401很多用户都会在电脑上安装Windows双系统甚至多系统,在开机的时候就会出现一个启动菜单让用户选择,如果没有选择将会自动启动默认的系统,那么双系统要怎么修改默认的启动项呢?今天系…

css 外边距合并

1. 当一个元素出现在另一个元素上面时,第一个元素的下外边距会和第二个元素的上边距合并(取较大值) 2. 当一个元素包含另一个元素中时(没有内边距或边框把外边距分隔开),会发生合并; 2.1条件父元素无边框 2.2 父元素和子元素外边距之间无其他分格元素 3.…

是时候抛弃旧的摩尔定律了

来源:IEEE转自:悦智网在技术领域最著名的准则之一就是摩尔定律。在过去55年的时间里,“摩尔定律”已经描述并预测了晶体管的缩小,如一组称为技术节点的数字在过去以大约每两年一次的频率更新。像一些基于物理学的世界末日时钟一样…