ALSA编译使用

article/2025/10/3 2:55:58

ALSA

  • ALSA下载
    • alsa-lib 交叉编译
    • alsa-utils 交叉编译
    • alsa.conf
    • amixer
      • amixer controls
      • amixer contents
      • 设置声卡
      • 获取声卡设置值
      • 使用 amixer 设置声卡
      • 使用 aplay 播放 WAV 格式音乐
      • 使用 arecord 录制音频

ALSA下载

下载alsa-lib 和 alsa-utils
alsa下载地址
alsa-lib api文档地址

alsa-lib 交叉编译

意 alsa-lib 编译过程中会生成一些配置文件,而这些配置信息的路径都是绝对路径,因此
为了保证 ubuntu 和开发板根文件系统中的路径一致!我们需要在 ubuntu 和开发板中各创建一
个路径和名字完全一样的目录,这里我们都创建一个/usr/share/arm-alsa 目录, ubuntu 中创建命
令如下:
cd /usr/share //进入 ubuntu 的/usr/share 目录
sudo mkdir arm-alsa //创建 arm-alsa 目录

  1. tar -vxjf alsa-lib-1.2.2.tar.bz2 //解压 alsa-lib
  2. cd alsa-lib-1.2.2/ //进入 alsa-lib 源码目录
  3. ./configure --host=arm-linux-gnueabihf --prefix=$(pwd)/_install --with-configdir=/usr/share/arm-alsa
    注意, “–with-configdir”用于设置 alsa-lib 编译出来的配置文件存放位置,这里设置为前
    面创建的“/usr/share/arm-alsa”目录。
  4. make //编译
  5. sudo make install //安装

提示 libatopology.la 编译失败, 这是因为 sudo 会切换到 root 用户下,但是此
时 root 用户下的环境变量中没有交叉编译器路径,因此会提示找不到“arm-linux-gnueabihf-gcc”,
从而导致 libatopology.la 编译失败。解决方法就是先切换到 root 用户,重新执行一下/etc/profile
文件,然后直接 make install 即可,命令如下:
sudo -s //切换到 root 用户
source /etc/profile //执行/etc/profile
make install //安装,此时已经工作在 root 下,因此不需要加“sudo”
su zuozhongkai //编译完成以后回原来的用户

alsa-utils 交叉编译

  1. tar -vxjf alsa-utils-1.2.2.tar.bz2 //解压
  2. cd alsa-utils-1.2.2/ //进入
  3. ./configure --host=arm-linux-gnueabihf --prefix= ( p w d ) / i n s t a l l − − w i t h − a l s a − i n c − p r e f i x = (pwd)/_install --with-alsa-inc-prefix= (pwd)/installwithalsaincprefix=HOME/alsa-lib/include/ --with-alsaprefix=$HOME/alsa-lib/lib/ --disable-alsamixer --disable-xmlto
  4. make //编译
  5. sudo make install

上面在配置 alsa-utils 的时候使用了“–disable-alsamixer”来禁止编译 alsamixer 这个
工具,但是这个工具确非常重要,它是一个图形化的声卡控制工具,需要 ncurses 库的支持。
ncurses 库笔者已经交叉编译成功了(参考 63.5 小节),但是尝试了很多次设置,就是无法编译
alsa-utils 中的 alsamixer 工具。网上也没有找到有效的解决方法,大家都是禁止编译 alsamixer
的。 所以这里就没法使用 alsamixer 这个工具了,但是可以使用 alsa-utils 提供的另外一个工具:
amixer, alsamixer 其实就是 amixer 的图形化版本。两者的功能都是一样的,只是 alsamixer 使用
起来更人性化一点。

alsa.conf

打开开发板根文件系统中的/etc/profile 文件,在里面加入如下所示内容:
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
ALSA_CONFIG_PATH 用于指定 alsa 的配置文件,这个配置文件是 alsa-lib 编译出来的。

amixer

在这里插入图片描述
可以看出, amixer 软件命令分为两组, scontrols、 scontents、 sset 和 sget 为一
一组。 controls、 contents、 cset 和 cget 为另一组。这两组的基本功能都是一样的,只不过“s”
开头的是 simple(简单)组,这一组命令是简化版,本教程最终使用“s”开头的命令设置声卡,
因为少输入很多字符

amixer controls

numid=3,iface=MIXER,name=‘Master ModeSwitch’
numid=29,iface=MIXER,name=‘Master Mux’
numid=4,iface=MIXER,name=‘Master Quality Switch’
numid=2,iface=MIXER,name=‘Master Switch’
numid=1,iface=MIXER,name=‘Master Volume’
numid=7,iface=MIXER,name=‘PCM Mode Switch’
numid=6,iface=MIXER,name=‘PCM Switch’
numid=5,iface=MIXER,name=‘PCM Volume’
numid=21,iface=MIXER,name=‘Line Input Switch’
numid=16,iface=MIXER,name=‘Line Mode Switch’
numid=27,iface=MIXER,name=‘Line Mux’
。。。。。
numid=9,iface=MIXER,name=‘Mic Switch’
numid=8,iface=MIXER,name=‘Mic Volume’
numid=19,iface=MIXER,name=‘ADC Mode Switch’
numid=28,iface=MIXER,name=‘ADC Mux’

amixer contents

numid=3,iface=MIXER,name=‘Master Mode Switch’
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 ‘Common Buffer Off’
; Item #1 ‘Common Buffer On’
: values=0

numid=5,iface=MIXER,name=‘PCMVolume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0
numid=24,iface=MIXER,name=‘Mixer ADC Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=26,iface=MIXER,name=‘Mixer DAC Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=25,iface=MIXER,name=‘Mixer Line Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=23,iface=MIXER,name=‘Mixer Mic Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=on

设置声卡

知道了设置项和设置值,那么设置声卡就很简单了,直接使用下面命令即可:
amixer sset 设置项目 设置值
或:
amixer cset 设置项目 设置值

获取声卡设置值

如果要读取当前声卡某项设置值的话使用如下命令:
amixer sget 设置项目
amixer sget ‘Master Mux’
或:
amixer cget 设置项目
amixer cget numid=5,iface=MIXER,name=‘PCMVolume’

使用 amixer 设置声卡

第一次使用声卡之前一定要先使用 amixer 设置声卡,打开耳机和喇叭,并且设置喇叭和耳
机音量,输入如下命令:
amixer sset Headphone 100,100
amixer sset Speaker 120,120
amixer sset ‘Right Output Mixer PCM’ on
amixer sset ‘Left Output Mixer PCM’ on

使用 aplay 播放 WAV 格式音乐

声卡设置好以后就可以使用 aplay 软件播放 wav 格式的音乐测试一下, aplay 也是 alsa-utils
提供的。可以在开发板根文件系统下创建一个名为“music”的目录来存放音频文件,然后找一
首 wav 格式的音乐放到开发板根文件系统中,然后输入如下命令播放:
aplay test.wav //播放歌曲
如果一切设置正常的话就会开始播放音乐,因为 ALPHA 开发板支持喇叭和耳机自动切换,
因此如果不插耳机的话默认从喇叭播放音乐。插上耳机以后喇叭就会停止播放音乐,改为耳机
播放音乐

使用 arecord 录制音频

使用 arecord 来录制一段 10 秒中的音频, arecord 也是 alsa-utils 编译出来的,输入如下命
令:
arecord -f cd -d 10 record.wav
-f 是设置录音质量,“-f cd”表示录音质量为 cd 级别。 -d 是指定录音时间,单位是 s,这
条指令就是录制一段 cd 级别 10s 的 wav 音频,音频名字为 record.wav。录制的时候大家就可
以对着开发板上的 MIC 说话,直到录制完成。

Headphone:耳机输出
Headphone Playback ZC:耳机回放开关
Speaker Playback ZC:扬声器回放开关
Speaker AC:扬声器交流音量
Speaker DC:扬声器直流音量
Left Output Mixer PCM:左声道混合器输出PCM
Left Input Mixer Boost:左声道混合器增强
Left Boost Mixer LINPUT1:左声道混合器输入1


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

相关文章

ALSA 配置文件简介

参考自:asoundrc文件     asoundrc配置文件简单介绍     asound.conf 插件讲解 文章目录 1、Asoundrc1.1、什么是asoundrc文件?1.2、为什么需要asoundrc文件?1.3、asoundrc文件什么时候被加载的?2、Plugin(插件)2.1、Plugin: hw2.2、Slave 定义2.3、Plugin: Rate…

Linux ALSA 之五:ALSA Proc Info

ALSA Proc Info 一、概述二、Proc Files of Alsa Driver1、/proc/asound/xxx 简述2、创建 /proc/asound 目录树2.1 /proc/asound/version 文件2.2 /proc/asound/devices 文件2.3 /proc/asound/cards 文件2.4 /proc/asound/cardx 目录2.5 /proc/asound/pcm 文件 一、概述 Linux…

Linux ALSA 之二:ALSA 声卡与设备

ALSA 声卡与设备 一、ALSA Sound 初始化1、alsa_sound_init() 入口函数2、init_soundcore() 入口函数 二、声卡结构体与创建、注册1、struct snd_card2、声卡创建流程3、声卡创建过程使用举例 三、声卡之 Pcm 设备1、Pcm 设备简介2、ALSA Driver 的 Pcm 中间层3、Pcm 设备创建 …

ALSA音频编程

一、前序 这里了解一下各个参数的含义以及一些基本概念。 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语。 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特…

alsa 驱动介绍

Machine 以装配有CS4270的一款android 智能电视的为例 /sound/soc/samsung/exynos.c Platform 以Samsung cpu exynos4412为例 /sound/soc/samsung/ Codec 以wolfson的Codec芯片cs4270为例 /sound/soc/codecs/cs4270.c ALSA 框架介绍 Alsa 太多太杂,很难整理的规整&a…

ALSA Configure

0. 前言 本文主要介绍alsa-lib配置文件相关代码的分析内容。 1. 配置文件的路径 在alsa-lib中,函数 snd_config_topdir 用于获取配置文件的路径,有两个方法可以进行配置: 使用环境变量 ALSA_CONFIG_DIR 进行配置。在生成configure时&…

ALSA应用层编程播放音乐

关于ALSA,网上也有介绍,但是我在看的时候看的也是一脸懵逼,不是介绍的不好,是因为我之前对于嵌入式软件这一块实在没什么了解,之前一直学的JAVA,整个体系跟JAVA还是有很大的区别,要学的也完全是…

ALSA系统简析

一 音频架构 如图所示 是 嵌入式系统的音频连接 音频编解码器将数字音频信号 转换成 扬声器播放所需要的模拟声音信号。而通过麦克风时,则执行相反的过程。 数字音频信号通过 PCM技术对模拟信号以某个比特率采样得到的,编解码器的任务就是以支持的PCM…

ALSA编程精华

https://www.cnblogs.com/cslunatic/p/3677729.html 一、前序 这里了解一下各个参数的含义以及一些基本概念。 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语。 样本长度(sample):样本是记录音频数据最基本的…

ALSA学习笔记

文章目录 一、概述二、系统架构三、常用操作命令1、安装ALSA2、查看音频设备3、列出音频设备4、音量控制器 四、常见问题1、cannot open mixer: 没有那个文件或目录 一、概述 ALSA(Advanced Linux Sound Architecture),高级Linux声音架构的简…

音频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;/*** 上一篇文章…