ALSA学习笔记

article/2025/10/3 3:26:14

文章目录

  • 一、概述
  • 二、系统架构
  • 三、常用操作命令
    • 1、安装ALSA
    • 2、查看音频设备
    • 3、列出音频设备
    • 4、音量控制器
  • 四、常见问题
    • 1、cannot open mixer: 没有那个文件或目录

一、概述

        ALSA(Advanced Linux Sound Architecture),高级Linux声音架构的简称。在Linux操作系统上提供了音频MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在Linux 2.6的内核版本后,ALSA成为了默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统)。目前已经成为了Linux的主流音频体系结构。

        ALSA是一个完全开放源代码的音频驱动程序集,除了像OSS那样提供了一组内核驱动程序模块之外,ALSA还专门为简化应用程序的编写提供了相应的函数库,与OSS提供的基于ioctl的原始编程接口相比,ALSA函数库使用起来要更加方便一些。利用该函数库,开发人员可以方便快捷的开发出自己的应用程序,细节则留给函数库内部处理。当然 ALSA也提供了类似于OSS的系统接口,不过ALSA的开发者建议应用程序开发者使用音频函数库而不是驱动程序的API。

        ALSA 主要有如下特点:

  • 支持多种声卡设备。
  • 模块化的内核驱动程序。
  • 支持 SMP(对称多处理)和多线程。
  • 提供应用开发函数库兼容OSS应用程序。

二、系统架构

在这里插入图片描述
用户空间
        主要由ALSA Libray API对应用程序提供统一的API接口,各个APP应用程序只要调用alsa-lib提供的API接口来实现放音、录音、控制。现在提供了两套基本的库,tinyalsa是一个简化的alsa-lib库,现在Android的系统中主要使用它。
内核空间

  • ALSA Core
    ALSA核心层,向上提供逻辑设备(PCM、CTL、MIDI、TIMER…)系统调用,向下驱动硬件设备(Machine、I2S、DMA、CODEC)。
  • ASOC Core
    建立在标准ALSA Core基础上,为了更好支持嵌入式系统和应用于移动设备的音频Codec的一套软件体系。提供了各种音频设备驱动的通用方法和数据结构,为Audio Driver提供ALSA Driver API。
  • 硬件驱动
    音频硬件设备驱动,由三大部分组成,分别是:Machine、Platform、Codec。提供的ALSA Driver API和相应音频设备的初始化及工作流程,实现具体的功能组件,这也是驱动开发人员需要具体实现的部分。

三、常用操作命令

1、安装ALSA

apt-get install xmlto libasound2-dev linux-sound-base alsa-base alsa-utils

2、查看音频设备

cat /proc/asound/cards

3、列出音频设备

arecord -l

4、音量控制器

alsamixer
在这里插入图片描述

  • MM表示静音,00表示非静音,可以通过按键M进行切换。
  • 通过左右方向键切换不同的参数配置。通过上下方向键调节音量值。
  • ESC键保存并退出。

四、常见问题

1、cannot open mixer: 没有那个文件或目录

现象: 输入alsamixer命令后,显示cannot open mixer: 没有那个文件或目录
原因: 这是由于声卡配置问题。
解决方案:

  • 输入aplay -l命令查看当前声卡信息,找到声卡编号,例如:这里声卡编号为0。
    在这里插入图片描述

  • 编辑/usr/share/alsa/alsa.conf配置文件,查看defaults.ctl.carddefaults.pcm.card配置项的编号,改为上一步查到的声卡编号,保存退出
    在这里插入图片描述


http://chatgpt.dhexx.cn/article/gLm0JOHx.shtml

相关文章

音频ALSA架构简介

一、ALSA架构 ALSA(Advanced Linux Sound Architecture)即高级 Linux 声音架构。 嵌入式移动设备的音频子系统目前主要是ALSA 驱动 asoc 框架,其中包括 codec driver、 platform driver、 machine driver 等。 codec driver只关心 codec 本身…

Linux ALSA 之一:ALSA 架构简介

一、概述 ALSA是 Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构。 在 Linux 内核设备驱动层,ALSA 提供了 alsa-driver,在应用层,ALSA 为我们提供了 alsa-lib,故在其支持下&#…

ALSA (高级Linux声音架构)、ASOC基础知识

目录 第一节:什么是ALSA和ASOC 第二节:ALSA框架 第三节:ALSA的使用 第四节:ASOC的硬件框架 第四节:ASOC的软件框架 第一节:什么是ALSA和ASOC ALSA是Advanced Linux Sound Architecture,高级…

动态链接库dlopen的函数的使用

转自&#xff1a;http://blog.const.net.cn/a/17154.htm 编译时候要加入 -ldl (指定dl库) dlopen 基本定义 功能&#xff1a;打开一个动态链接库 [喝小酒的网摘]http://blog.const.net.cn/a/17154.htm 包含头文件&#xff1a; #include <dlfcn.h> 函数定义&#xff…

dlopen的用法

1、前言 为了使程序方便扩展&#xff0c;具备通用性&#xff0c;可以采用插件形式。采用异步事件驱动模型&#xff0c;保证主程序逻辑不变&#xff0c;将各个业务已动态链接库的形式加载进来&#xff0c;这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用&#xff…

织梦上一篇下一篇没有了改为英文

织梦上一篇下一篇没有了改为英文 网站根目录找到 include/arc.archives.class.php 文件 打开找到 上一篇改为 Previous上一篇后面的“没有了” 改为 No Previous原图修改后 接着放下翻&#xff0c;紧贴着下面的“下一篇&#xff0c;没有了” 找到 下一篇改为 在这里插入…

在wordpress文章页中显示上一篇和下一篇文章

查看原文&#xff1a;http://www.hellonet8.com/1162.html 今天博主在看别人博客的时候发现他们的文章末尾会有显示上一篇和下一篇的文章链接&#xff0c;所以也想在自己的博客中添加这个功能。这么做顺便可以增加文章之间的相关性&#xff0c;对搜索引擎的蜘蛛也会友好些。废话…

js 实现 点击上一篇、下一篇功能

列表界面&#xff1a; 详细界面&#xff1a; 思路&#xff1a; 1. 首先目录列表渲染的数据是通过接口调用取到的值&#xff0c;然后点击具体某一条数据的时候&#xff0c;获取到他的 ID&#xff0c;然后通过路由跳转的时候带到详细信息页面。 2. 在详细页面中&#xff0c;先再…

Vue中 实现上一篇下一篇的功能

效果&#xff1a; 看下html页面 <div class"NewsDetails_cont_footer"><!-- 使用三目运算符判断 按钮是否可以点击 --><div click"last" :class"lastNoShow ? noClick : btn"><img src"../assets/img/newsDetail/公共…

java实现上一篇下一篇功能

根据文章类型查询&#xff0c;实现上一篇、下一篇的效果 自定义实体Dto(这里只放出扩展字段) Getter Setter public class OsArticleDto extends BaseDto {/** */private static final long serialVersionUID 1L;/** 上一篇文章id*/private String beforeId;/*** 上一篇文章…

vue实现上一篇下一篇

先来看一下效果图 请求回来所有文章&#xff0c;根据索引进行上一篇下一篇的判断 首先为两个按钮绑定点击事件 <buttonclick"last(lastId, columnId)":disabled"isLast":class"{ disClick: isLast true }">上一篇:{{ lastTitle }}</b…

Django针对上一篇和下一篇文章标题的实现逻辑

1、要求显示效果 2、前端html内容 <div><nav aria-label"..."><ul class"pager"><li><a href"/blog/detail/{{ previous_article.article_id }}">上一篇&#xff1a;{{ previous_article.title }}</a><…

程序员,我们应该如何去学习

IT技术的发展日新月异&#xff0c;新技术层出不穷&#xff0c;具有良好的学习能力&#xff0c;能及时获取新知识、随时补充和丰富自己&#xff0c;已成为程序员职业发展的核心竞争力。本文中&#xff0c;作者结合多年的学习经验总结出了提高程序员学习能力的三个要点。 众所周知…

程序员该如何学习新知识

想必大家都不是张无忌&#xff0c;人家三十年才可以练成的乾坤大挪移&#xff0c;张无忌大侠两个时辰就可以搞定&#xff0c;作为一个普通的程序员&#xff0c;经常遇到很多新技术和新知识&#xff0c;it界就是这样&#xff0c;日新月异&#xff0c; 那么我们如何学习一门技术和…

@程序员,这四个学习建议值得收藏

在我看来&#xff0c;学习能力应该是一个人最重要的能力之一。因为我们赖以生存的所有技能&#xff0c;无一例外都是通过学习获得的。那些优秀的人&#xff0c;也不过是学习能力或者学习效率比一般人强而已。 这样的观点被很多人论证过&#xff0c;商业理论家阿里德赫斯&#…

程序员学习视频教程汇总

转载请注明出处:http://blog.csdn.net/lowprofile_coding/article/details/51059080 在IT这个节凑快的行业&#xff0c;我们每天都需要学习&#xff0c;需要get新技能&#xff0c;才能不被淘汰&#xff0c;成功的人总是贵在坚持&#xff0c;我觉得有一句话说的很好&#xff1a;…

想自学一下程序员,该学些什么?

程序员是一门职业&#xff08;手动滑稽&#xff09;&#xff0c;需要自学的是编程哦。 编程分为一个方向&#xff0c;方向不同需要学习的东西也大不相同 大数据前端开发后端开发移动端开发移动开发市场游戏开发人工智能服务器开发等等 前端开发难度较高&#xff0c;需要人员…

程序员,这四个学习建议值得收藏

大家好&#xff0c;我是本周的值班编辑 江南一点雨 &#xff0c;本周将由我为大家排版并送出技术干货&#xff0c;大家可以在公众号后台回复“springboot”&#xff0c;获取最新版 Spring Boot2.1.6 视频教程试看。 在我看来&#xff0c;学习能力应该是一个人最重要的能力之一。…

做程序员,需要学习哪些专业知识?

一、两大能力 1、学习能力 为什么需要学习能力,因为技术不会一直停着不动,可能当你刚在学校出来的时候,是公司的佼佼者,但是如果你不学习,当别人会HTML6/7/8的时候,你还只是在HTML5上徘徊。而且当你遇到困难的时候,如果是有大牛给你解决了问题,但是你只是照搬并没有真…

AJAX-设置同步

AJAX-设置同步 一.同步方式与异步方式的区别&#xff1a; 1.1.同步方式发送请求&#xff1a;发送一个请求&#xff0c;需要等待响应返回&#xff0c;然后才能够发送下一个请求&#xff0c;如果该请求没有响应&#xff0c;不能发送下一个请求&#xff0c;客户端会一直处于等待…