【音视频|ALSA】ALSA是什么?ALSA框架详细介绍

news2024/11/19 22:50:10

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭ALSA是什么?ALSA框架详细介绍🍭
😎金句分享😎:🍭有机会一定要试试,其实试错的成本并不高,而错过的成本很高🍭

目录

  • 一、概述
  • 二、ALSA框架介绍
  • 三、ALSA驱动 - 内核空间
    • 3.1 /proc/asound/目录
    • 3.2 /dev/snd/目录
  • 四、ALSA库、程序 - 用户空间
  • 五、总结


在这里插入图片描述

一、概述

在这里插入图片描述

ALSA,全称Advanced Linux Sound Architecture(高级Linux音频体系结构),是Linux操作系统上用于管理音频和音频设备的软件架构,为Linux操作系统提供音频和MIDI功能。它提供了一个标准的接口,用于应用程序与硬件之间的音频通信,以及音频设备之间的通信。
ALSA具有以下重要特征:

  • 高效支持所有类型的音频接口,从消费类声卡到专业多声道音频接口。
  • 完全模块化的声音驱动程序。
  • SMP和线程安全设计。
  • 用户空间库(alsa-lib),用于简化应用程序编程并提供更高级别的功能。
  • 支持较旧的开放声音系统(OSS)API,为大多数OSS程序提供二进制兼容性。

ALSA是根据GPL(GNU通用公共许可证)和LGPL(GNU较宽松通用公共许可)发布的。ALSA驱动程序代码包含在Linux内核2.6中。

如果还有其他需要了解的,可以查看ALSA项目的官网:https://www.alsa-project.org/

ALSA项目在github的开源地址(不包含驱动代码):https://github.com/alsa-project

在这里插入图片描述

二、ALSA框架介绍

ALSA架构主要有两方面组成:
1、Linux内核空间的ALSA驱动,在Linux内核2.6之后,ALSA驱动代码已经集成到Linux源码中。
2、Linux用户空间的ALSA库和程序:alsa-lib、alsa-utils、alsa-tools、alsa-firmware、alsa-plugins、alsa-oss、pyalsa。
在这里插入图片描述

在这里插入图片描述

三、ALSA驱动 - 内核空间

ALSA驱动程序包含在内核空间中运行的ALSA组件,在Linux内核2.6之后,ALSA驱动代码已经集成到Linux源码中,ALSA驱动代码在Linux内核源码的sound 目录里。在编译内核时,可以选择将alsa驱动单独编译为模块,一般会有如下ko:snd-hwdep.ko、snd-pcm.ko、snd-rawmidi.ko、snd-timer.ko snd-usb-audio.ko、snd-usbmidi-lib.ko、snd.ko、soundcore.ko。

在Linux内核安装完ALSA驱动后,会多出两个目录:/proc/asound/目录、/dev/snd/目录

3.1 /proc/asound/目录

/dev/asound/目录主要用于ALSA存放设备信息的,一般这个目录有如下内容:

# ls /proc/asound/
C93      Headset  card0    card1    cards    devices  hwdep    modules  pcm      timers   version

/proc/asound/cards文件记录了声卡信息,接入声卡后,一般有如下内容:

# cat /proc/asound/cards 
0 [Headset        ]: USB-Audio - Rapoo Gaming Headset
                     Rapoo Gaming Headset at usb-10300000.xhci_0-1.4, full speed
1 [C93            ]: USB-Audio - 罗技高清网络摄像机 C93
                     罗技高清网络摄像机 C93 at usb-10300000.xhci_0-1.2, high speed

/proc/asound/pcm文件可以查看声卡采集、播放pcm的信息:

# cat /proc/asound/pcm 
00-00: USB Audio : USB Audio : playback 1 : capture 1
01-00: USB Audio : USB Audio : capture 1

/proc/asound/version 显示ALSA驱动的版本信息:

# cat /proc/asound/version 
Advanced Linux Sound Architecture Driver Version k4.19.90.

/proc/asound/card0/目录记录了第0个声卡的信息,如:播放的状态、参数等
/proc/asound/card0/pcm0p/sub0/status查看第0个声卡的播放状态:

# cat /proc/asound/card0/pcm0p/sub0/status 
state: RUNNING
owner_pid   : 628
trigger_time: 77794.597275511
tstamp      : 0.000000000
delay       : 7280
avail       : 864
avail_max   : 2016
-----
hw_ptr      : 166788864
appl_ptr    : 166796000

/proc/asound/card0/pcm0p/sub0/hw_params文件查看参数

# cat /proc/asound/card0/pcm0p/sub0/hw_params 
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 2000
buffer_size: 8000

/proc/asound/card0/pcm0p/sub0/sw_params文件查看参数

# cat /proc/asound/card0/pcm0p/sub0/sw_params
tstamp_mode: NONE
period_step: 1
avail_min: 2000
start_threshold: 1
stop_threshold: 8000
silence_threshold: 0
silence_size: 0
boundary: 9007199254740992000

/proc/asound/目录还有其他一些内容,感兴趣读者可以一一去查看。

3.2 /dev/snd/目录

/dev/snd/目录主要是各个声卡对应的设备文件,这些文件会随着声卡的插入和移除而产生变化,用ls命令查看有哪些文件:

# ls /dev/snd/
controlC0  controlC1  pcmC0D0c   pcmC0D0p   pcmC1D0c   timer

/dev/snd/controlCX:控制接口,提供灵活的方式管理注册的声卡和对存在的声卡进行查询;
/dev/snd/pcmCXDX:PCM 接口,提供管理数字音频的录音和回放,pcmCXDXc 对应录音设备,pcmCXDXp 对应回放设备
/dev/snd/timer:定时器接口,为支持声音的同步事件提供访问声卡上的定时器;
/dev/snd/mixerCXDX:混音器接口,控制发送信号和控制声音大小的声卡上的设备;
/dev/snd/seq:音序器接口,一个比原始 MIDI 接口高级的 MIDI 编程和声音同步高层接口。它可以处理很多 MIDI 协议和定时器。
/dev/snd/midiCXDX:原始 MIDI 接口,支持 MIDI(Musical Instrument DigitalInterface,音乐设备数字化接口),一种标准电子音乐指令集。这些 API 提供访问声卡上的 MIDI 总线。这些原始接口直接工作在 MIDI 事件上,程序员只需管理协议和时间。

有关ALSA驱动的更多内容可以看:https://www.alsa-project.org/wiki/ALSA_Driver_Documentation
在这里插入图片描述

四、ALSA库、程序 - 用户空间

ALSA库和程序主要:alsa-lib、alsa-utils、alsa-tools、alsa-firmware、alsa-plugins、alsa-oss、pyalsa。
这些都是都是工作在Linux用户空间的,可以在ALSA官网下载:https://www.alsa-project.org/wiki/Download
在这里插入图片描述

  • alsa-lib
    alsa-lib 包含开发人员编译alsa应用程序所使用的用户空间库。
    有关alsa-lib的使用可以参照:https://www.alsa-project.org/alsa-doc/alsa-lib/

  • alsa-utils
    alsa-utils 包含各种通用的alsa命令行工具,如amixer、aplay、alsaconf等。
    alsa-utils是一组小型且功能强大的应用程序,旨在允许用户控制ALSA系统的各个部分:
    1、alsactl 应用程序是保存设备设置的一种方式。
    2、amixer 应用程序是一个命令行应用程序,允许对设备音量和声音控制进行调整。
    3、alsamixer 应用程序是amixer的ncurses版本。
    4、acconnect 和aseqview 应用程序用于建立MIDI连接和查看连接端口列表。
    5、aplay和arecord 应用程序用于命令行播放和记录多种文件类型,包括原始、波形和aiff,所有采样率、位深度和ALSA库已知的通道计数。

  • alsa-tools
    alsa-tools 包含各种更模糊的工具和加载器。

  • alsa-firmware
    alsa-firmware 包含各种第三方产品的二进制驱动程序。

  • alsa-plugins
    alsa-plugins 包含各种alsa需求的插件(例如Jack)。

  • alsa-oss
    alsa-oss 包含oss兼容层。

  • pyalsa
    pyalsa 包含ALSA的Python绑定。

需要了解更多ALSA相关文档可以参考:https://www.alsa-project.org/wiki/Documentation
在这里插入图片描述

五、总结

总的来说,ALSA是Linux系统中的一个关键音频框架,提供了强大的音频处理功能,并为开发者和用户提供了一种一致的方式来处理音频设备和数据。它在Linux发行版中内置,因此几乎所有基于Linux的系统都可以受益于其音频处理能力。如果开发过程中,有不清楚的,多到ALSA官网查看。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

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

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

相关文章

相似性搜索:第 5 部分--局部敏感哈希 (LSH)

SImilarity 搜索是一个问题,给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 一、介绍 在数据科学中,相似性搜索经常出现在NLP领域,搜索引擎或推荐系统中,其中需要检索最相关的文档或项目以进行查询。在大量数据中…

Linux常用命令——consoletype命令

在线Linux命令查询工具 consoletype 输出已连接的终端类型 补充说明 consoletype命令用于打印已连接的终端类型到标准输出,并能够检查已连接的终端是当前终端还是虚拟终端。 语法 consoletype实例 [rootlocalhost ~]# consoletype pty在线Linux命令查询工具

云原生场景下高可用架构的最佳实践

作者:刘佳旭(花名:佳旭),阿里云容器服务技术专家 引言 随着云原生技术的快速发展以及在企业 IT 领域的深入应用,云原生场景下的高可用架构,对于企业服务的可用性、稳定性、安全性越发重要。通…

Springboot+vue的人事管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的人事管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的人事管理系统,采用M(model…

2023年【四川省安全员B证】报名考试及四川省安全员B证考试内容

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员B证报名考试根据新四川省安全员B证考试大纲要求,安全生产模拟考试一点通将四川省安全员B证模拟考试试题进行汇编,组成一套四川省安全员B证全真模拟考试试题,学员可通过…

程序装载:“640K内存”真的不够用么?

目录 背景 程序装载面临的挑战 内存分段 内存分页 小结 背景 计算机这个行业的历史上有过很多成功的预言,最著名的自然是“摩尔定律”。当然免不了的也有很多“失败”的预测,其中一个最著名的就是,比尔盖茨在上世纪 80 年代说的“640K …

计网面试复习自用

五层: 应用层:应用层是最高层,负责为用户提供网络服务和应用程序。在应用层,用户应用程序与网络进行交互,发送和接收数据。典型的应用层协议包括HTTP(用于网页浏览)、SMTP(用于电子邮…

操作系统学习笔记5-内存管理

文章目录 1、CPU执行程序的基本过程2、CPU位数、OS位数、内存地址总线数、内存数据总线数目、逻辑地址位数、物理地址位数3、内存管理逻辑图4、编译、链接5、装入操作6、绝对装入7、静态重定位装入8、动态重定位装入9、内存保护10、单一连续分配10、固定分区分配11、动态分区分…

Java并发面试题:(三)sleep和wait方法区别,notify 和 notifyAll方法

sleep和wait wait, notify 和 notifyAll这些方法不在thread类里面? JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类中,线…

文件操作合集 - C语言

前言 由于我们每次打开程序写入的数据都是在内存中处理,关闭程序就直接没有了,下次还需要重新进行操作录入数据等,这里我们就可以使用文件来保存数据,更加持久化,下面我们基于c语言来介绍一些文件操作. 文件指针: 文件的打开和关闭 文件在读写之前应该先打开文件,在…

Linux:进程控制

目录 一、进程创建 写时拷贝 二、进程终止 echo $? 如何终止进程 _exit与exit 三、进程等待 进程等待的必要性 进程等待的操作 wait waitpid status 异常退出情况 status相关宏 options 四、进程程序替换 1、关于进程程序替换 2、如何进行进程程序替换 程序…

记录一次典型oom的处理过程

背景 有同学反馈收到应用RT的报警,其中的流量都来自于网关集群中的一台机器。因为负责网关,就上去看了下并进行排查。整体是一个比较明显的oom,这里只是记录下排查过程,老司机可以略过了。 初步现象 常规步骤,使用t…

maven 新建模块 导入后 按Ctrl 点不进新建模块pom定义

新建的ruoyi-common-mybatisplus 模块,导入一直不正常 画出的模块一直导入不进来 这是提示信息 这是正常的提示信息 加上 <version>3.6.3</version> 后,才一切正常

Bootstrap的导航菜单组件相关知识

目录 01-最基本的导航示例02-设置导航的对齐方式02-1-设置导航在水平方向上的对齐方式 02-2-设置导航在垂直方向上进行布局03-设计标签页导航04-带下拉菜单的标签页导航05-设计胶囊式导航05-1-基本的胶囊式导航05-2-带下拉菜单的胶囊式导航 06-让导航菜单项可以切换(激活导航菜…

精品基于django的高校竞赛比赛管理系统Python

《[含文档PPT源码等]精品基于django的高校竞赛管理系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScri…

宝塔面板部署express以及MySql项目

第一次在宝塔面板上部署express和MySql项目&#xff0c;部署过程一直跑不通接口&#xff0c;特此记录一下。 在部署的时候&#xff0c;建议第一步把数据库MySql给跑通&#xff0c;中间好多原因是由于数据库的原因给引起的。 一.连接数据库 &#xff08;1&#xff09;在宝塔面…

IP 协议的相关特性(部分)

IP 协议的报文格式 4位版本号&#xff1a; 用来表示IP协议的版本&#xff0c;现有的IP协议只有两个版本&#xff0c;IPv4&#xff0c;IPv6。 4位首部长度&#xff1a; 设定和TCP的首部长度一样 8位服务类型&#xff1a; &#xff08;真正只有4位才有效果&#xff09;&#xf…

教你快速解决unity无法添加脚本bug

原因一 就是报错的字面意思&#xff0c;文件名与类名不一致&#xff01; 原因二 与版本不兼容的汉化导致系统出错&#xff01; 解决办法一 使用原版本自带的英文显示 解决办法二 更换汉化包 我其实更加推荐使用英文版本的Unity&#xff01;

Rust闭包 - Fn/FnMut/FnOnce traits,捕获和传参

Rust闭包: 是一类能够 捕获周围作用域中变量 的 函数 |参数| {函数体} 参数及返回值类型可推导&#xff0c;无需显示标注类型唯一性&#xff0c;确定后不可更改函数体为单个表达式时&#xff0c;{}可省略 文章目录 引言1 分类 Fn / FnMut / FnOnce2 关键词 move3 闭包作为参数…

MySQL8安装步骤

本次安装所需版本为MySQL8.0.24,客户端工具选用的是Navicat11. 大家可以进入官网下载其它版本&#xff0c; 1.双击安装文件 2.等待一段时间进入以下界面 3.选择Custom,点击Next 4.进入以下界面&#xff0c;需要C2019的环境&#xff0c;选中此行然后Execute执行。 5.点击Exe…