Alsa UCM

news2024/10/6 4:05:58

Alsa Use Case Manager(用例管理器)描述如何为某些用例(如 “播放音频”、“通话”)设置 mixer 混频器。它还描述如何修改 mixer 混频器状态以将音频路由到某些输出和输入,以及如何控制这些设备。

这基本上涵盖了 Pulseaudio 中配置 (profile) 所做的相同的事情,除了 UCM 文件更容易编写,并且在不运行 Pulseaudio 的情况下也可以工作。如果声卡的 UCM 配置存在,则 pulseaudio 将忽略内置的配置 (profile),并基于 UCM 文件生成一个配置 (profile)。

官方文档:https://www.alsa-project.org/alsa-doc/alsa-lib/group__ucm__conf.html。

声卡名称

你需要做的第一件事是确定声卡名称,它被用作 UCM 主文件的目录和文件名。你可以使用 alsa-utils 包中的 aplay 命令来确定它:

$ apk add alsa-utils
$ aplay -l
card 0: sun50ia64audio [sun50i-a64-audio], device 0: 1c22c00.dai-sun8i-codec-aif1 sun8i-codec-aif1-0 [1c22c00.dai-sun8i-codec-aif1 sun8i-codec-aif1-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

在这个例子中你需要的名称是方括号中的第一个名称:sun50i-a64-audio

第一个用例

下一步是创建一个包含 mixer 混合器可用用例列表的文件。该文件将以上面小节中所述的规则命名:

/usr/share/alsa/ucm2/sun50i-a64-audio/sun50i-a64-audio.conf

Syntax 2

SectionUseCase."HiFi" {
	File "HiFi"
	Comment "Play high quality music"
}

对于每个用例,都将有一个 SectionUseCase 块。后面直接用引号括起来的名称是 “verb”,它是配置 (profile) 的内部名称。它必须是来自 alsa 的预定义用例之一。目前定义的有如下这些:

  • “Inactive”
  • “HiFi”
  • “HiFi Low Power”
  • “Voice”
  • “Voice Low Power”
  • “Voice Call”
  • “Voice Call IP”
  • “FM Analog Radio”
  • “FM Digital Radio”

要创建的最重要的配置 (profile) 是 HiFi,它是声卡的主音频播放配置 (profile)。对于其它一些配置 (profile),Alsa 并没有明确定义它们的实际用途。

配置 (profile) 的第一个设置是 File 行。这定义了包含该用例的确切 mixer 混合器配置的文件的文件名。

这个例子中的第二个设置是 Comment。它用作 alsaucm 工具和 Pulseaudio 中的显示名称。它可以自由定义。

用例定义

最复杂的部分是需要创建的 HiFi 文件的实际内容。该文件基本上是启用/禁用 mixer 混频器的脚本和从一个输入/输出移动到另一个输入/输出的命令的集合。

这是一个用例文件的最小示例。

/usr/share/alsa/ucm2/sun50i-a64-audio/HiFi

SectionVerb {
	EnableSequence [
		cset "name='Headphone Playback Switch' off"
		cset "name='Headphone Source Playback Route' DAC"
		cset "name='Headphone Playback Volume' 50%"
	]
	DisableSequence [
	]

	Value {
		PlaybackPCM "hw:${CardId},0"
		CapturePCM "hw:${CardId},0"
	}
}

SectionVerb 块定义了启用/禁用这个用例需要运行的命令。这主要是用来使整个 mixer 混频器在启动时处于已知状态,所以在这里为 mixer 混频器中的所有 controls 控件设置一个值可能是个好主意。

本节中的命令均为 cset 命令。这些命令对应于你常常通过 alsa-utils 包中的 amixer 工具使用的命令。第一个命令当直接通过 amixer 运行时做这些事情:

$ amixer cset name='Headphone Playback Switch' off
numid=36,iface=MIXER,name='Headphone Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  ; values=on,on

要获得你可以设置的所有 controls 控件的列表,你也可以使用如下的 amixer 命令:

$ amixer controls
numid=35,iface=MIXER,name='Headphone Source Playback Route'
numid=36,iface=MIXER,name='Headphone Playback Switch'
numid=17,iface=MIXER,name='Headphone Playback Volume'
... a lot more lines here ...

这些应该很容易就可以与你在 alsamixer 中看到的 controls 控件关联起来。Controls 控件遵循标准的命名方案。alsamixer 的播放页上设备的音量滑块称为 $name Playback Volume,采集页上相同的 control 控件称为 $name Capture Volume。播放音量滑块下面的静音按钮称为 $name Playback Switch,采集页上的启用开关称为 $name Capture Switch。Controls 控件中没有音量滑块但有文本选择的控件名称为 $name Playback Route

800px-Alsa_mixer_mapping.png

调试 UCM 配置

重新加载 UCM 配置

alsaucm reload 重新加载配置,但如果你正在使用 PulseAudio,你还需要以某种方式重启 PulseAudio。要方便地重新加载 alsaucm 和 PulseAudio,你可以运行alsaucm reload && killall -9 pulseaudio

监视 ALSA 事件

alsactl monitor 允许你监视 ALSA 事件,特别是插孔检测。如果你想要在插孔插入或移除时修改 ALSA 设置,则日志中的事件名称必须与 UCM 配置 JackControl 匹配。

使用 plain ALSA 来查找控件

使用 ALSA UCM 寻找正确的控件是一件很痛苦的事情,但为了让你的生活更轻松:

  1. 禁用 PulseAudio 或 PipeWire,以便 ALSA UCM 根本不活动。
  2. 使用 amixer -c $CARD cset iface=MIXER,name='$CONTROL' '$VALUE' 编写一个简单的脚本。
  3. 执行脚本来设置混音器。
  4. 通过 aplay -D plughw:$CARD,$DEVICE /usr/share/sounds/alsa/Front_*.wav 测试你的声音。

重复此操作,直到找到混音器的工作列表,以将音频播放到所需的输出设备。还要确保混音器列表足以在重新启动后直接工作。一旦你弄清楚了它们,你就可以转换到 ALSA UCM 配置,这样你就可以确保混音器至少是正确的,而不受 ALSA UCM 或 PulseAudio/PipeWire 的影响。

控件列表

amixer 可以为你提供有关可用控件的大量信息:

  • amixer -c $CARD scontrols
  • amixer -c $CARD scontents

TinyALSA 可以为你提供更具可读性的版本。TinyALSA 不在 repos 存储库中,但可以按如下方式编译:

  1. git clone https://github.com/tinyalsa/tinyalsa
  2. apk add alpine-sdk linux-headers
  3. make

编译 TinyALSA 之后,该工具在 utils 中,你可能需要 tinymixer

检查控件是否被实际调用

有时你可能想知道你在 ALSA UCM 部分中定义的控件是否被调用。ALSA UCM 允许使用 shellexec 命令执行任意命令。你可以添加

 shell "/bin/echo 'My Control was called in X' >> /tmp/alsa-ucm.txt"

来调试你的序列。输出将出现在 /tmp/alsa-ucm.txt 文件中。

关键字

  • ConflictingDevice:表示与其它设备冲突。例如:听筒和耳机在由相同编解码器驱动时可能彼此不兼容。
  • EnableSequence:指定 amixer 命令以启用设备或 verb。
  • DisableSequence:指定 amixer 命令以禁用设备或 verb。
  • TransitionSection."$SECTIONDEVICE":执行从一个设备到另一个设备的命令。
  • BootSequence:当声卡配置尚不可用时仅执行一次的命令,对于设置初始音量很有用。
  • FixedBootSequence:每次启动时执行的命令,对于取消某些事情的静音很有用。

大多数关键字都记录在官方文档中:https://www.alsa-project.org/alsa-doc/alsa-lib/group__ucm__conf.html。

声卡的配置:

 SectionVerb {
   Value {
     // Values to config this card, example for HiFi profile:
     TQ "HiFi"
   }
   EnableSequence [
     // mixer control to be set when the card is initialized
   ]
   DisableSequence [
     // mixer control to be set when the card is destroyed
   ]
 }

设备的配置:

 SectionDevice."Speaker" { // The node name.
   Value {
     // Values to config this node
   }
   EnableSequence [
     // mixer control to be set when this node is selected
   ]
   DisableSequence [
     // mixer control to be set when this node is unselected
   ]
 }

原文。

Done.

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

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

相关文章

胶南代理记账,为您提供专业、便捷的会计服务

欢迎来到胶南代理记账服务站,这里我们专注于为企业提供专业的会计服务,无论您是初创企业还是已经在业界有一定规模的企业,我们都将以最专业的态度和最高效的服务为您量身定制合适的记账方案。 我们的目标不仅是帮助您完成财务报告的制作&…

奥威BI零售数据分析方案的优缺点一览

奥威BI零售数据分析方案是一套基于BI大数据智能可视化分析系统,根据零售企业数据分析共性需求、业务特殊性量身打造,点击下载应用,立即将零售数据情况分析清楚,直观呈现。很多企业都是直接在该零售数据分析方案的基础上实现了智能…

Windows系统中好用的闪迪U盘修复工具

本文向你介绍了一款简单好用的闪迪U盘修复工具,它可以帮助你轻松修复闪迪U盘的各种问题。该工具操作简单,能帮用户节省大量的时间和精力。 闪迪U盘损坏可以修复吗? “我有一只32GB的闪迪U盘出现了问题,可能是因为我在关机前将它强…

【CS.CN】深入解析HTTP中的Expect: 100-continue头:性能优化的利器还是鸡肋?

目录 0 序言 0.1 由来0.2 使用场景0.3 现在还需要吗? 1 Expect: 100-continue的机制2 语法 && 通过重新设置空的Expect头优化性能3 实例分析:长连接中的Expect问题解决4 总结 0 序言 0.1 由来 Expect: 100-continue头部字段最早在HTTP/1.1规…

国产操作系统上给麒麟虚拟机安装virtualbox增强工具 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上给麒麟虚拟机安装virtualbox增强工具 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!昨天给大家带来了一篇在国产操作系统上给VirtualBox中的Win7虚拟机安装增强工具的文章,今天我们将继续深入,介绍…

Interview preparation--RabbitMQ

AMQP AMQP(Advanced Message Queueing protocol). 高级消息队列协议,是进程之间床底一步新消息的网络协议AMQP工作原理如下: 发布者(Publisher)发布消息(Message)经过交换机(Exchange&#xff…

【Python】认识 Python

一、计算机基础概念 1、什么是计算机 很多老一辈的人,管下面这个叫做计算机。然而,它只是 “计算器”,和计算机是有很大区别的。 现在我们所说的计算机,不光能进行算术运算,还能进行逻辑判断、数据存储、网络通信等…

uniapp原生插件开发实战——集成Android端的Twitter登陆

Android集成Twitter登陆的官方教程:https://github.com/twitter-archive/twitter-kit-android/wiki 项目创建 首先可以先看下uniapp原生插件开发教程 uniapp原生插件类型分为两种: Module模式:能力扩展,无嵌入窗体的UI控件,类似于功能插件。Component模式:在窗体中内嵌…

websocket php workerman 服务器nginx配置wss协议

首先 Nginx的版本要高,尽量用当前最新稳定版本。 其次 WSS协议,是在HTTPS协议的基础上,进行协议升级,进行通讯的,所以先要保证你有一个 HTTPS正常的WEB站点。 所以,通过Nginx -V 请保证 一定有 --with-ht…

监控摄像机接入GB28181平台如何获取监控视频

各种型号监控摄像头或硬盘录像机接入 GB28181平台配置过程非常简单明了,但有些细节需要注意,避免走弯路。 1、基本要求 (1)网络要求 总的来说,只要监控设备和GB28181平台的网络是连通的,设备可以主动访问…

Linux 35.5 + JetPack v5.1.3@FC-Planner编译安装

Linux 35.5 JetPack v5.1.3FC-Planner编译安装 1. 源由2. 编译&安装Step 1:依赖库安装Step 2:克隆工程Step 3:编译工程Step 4:LKH编译Step 5:安装工程 3. 问题汇总3.1 Killed signal terminated program cc1plus3…

跟着小白学linux的基础命令

小白学习记录: 前情提要:Linux命令基础格式!查看 lsLinux 的7种文件类型及各颜色代表含义 进入指定目录 cd查看当前工作目录 pwd创建一个新的目录(文件夹) mkdir创建文件 touch查看文件内容 cat、more操作文件、文件夹- 复制 cp- 移动 mv- 删…

Vxe UI vxe-form 实现折叠表单,当表单很多时实现自动收起与展开

Vxe UI vue vxe-form 实现折叠表单&#xff0c;当表单很多时实现自动收起与展开 代码 folding 用于将当前表单项设置为默认隐藏 collapse-node 设置折叠按钮&#xff0c;加上之后会自动在该表单项的右侧显示一个折叠按钮 <template><div><vxe-formtitle-colo…

windows 系统通过 cmd 命令终止进程

windows 系统通过 cmd 命令终止进程 1、使用 netstat 命令查看特定端口的占用情况 例如&#xff0c;要查看端口号为 8015 的情况&#xff0c;可以执行以下命令&#xff1a; netstat -ano | findstr 8105此命令会显示所有占用端口 8105 的网络连接&#xff0c;并列出 PID&…

24.Labview移位寄存器的使用及数据流解析

本文讲解移位寄存器的常用场景及其数据流的方向解析。 在Labview中移位寄存器是存在于循环结构中的&#xff0c;也就是说for循环和while循环中&#xff0c;在了解移位寄存器之前首先要了解一下for循环和while循环的原理及其数据流的流动方向&#xff0c;题主之前讲过for循环的文…

Redis的事务与关系型数据库事务有何不同?

引言&#xff1a;关于 Redis 的事务很多人可能都是一知半解&#xff0c;大多数人只了解数据库的事务&#xff0c;并且是单体事务&#xff0c;对于 Redis 事务和常见关系型数据库的事务的区别还没有去了解过&#xff0c;本文就来详细进行介绍。 题目 Redis的事务与关系型数据库…

【三】Linux网络配置详解

在RHEL 7系统中配置网络的方法有好几种&#xff0c;咱们这边先讲一下使用图形化工具和修改配置文件这两种方法来配置&#xff0c;其他方法大家可以下去自己研究研究。 一、使用图形化方式配置&#xff1a; 在电脑左上角开始一次点击Applications、System Tools、Settings&…

如何使用共享GPU平台搭建LLAMA3环境(LLaMA-Factory)

0. 简介 最近受到优刻得的使用邀请&#xff0c;正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的[Compshare](https://www.compshare.cn/? ytagGPU_lovelyyoshino_Lcsdn_csdn_display)的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收…

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置&#xff1f; 在编辑Word的时候上方会有个Word标尺&#xff0c;相信很多伙伴都没使用过。其实它隐藏着很多好用的功能&#xff0c;今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置&#xff0c;一起来看看吧&#xff01; 1、悬挂缩进 选中全文&…

VBA语言専攻通知20240608

通知20240608 各位学员∶本周MF系列VBA技术资料增加621-625讲&#xff0c;T3学员看到通知后请免费领取,领取时间6月7日晚上19:00-6月8日晚上20:00。本次增加内容&#xff1a; MF621:为组合框添加工作表数据 MF622:在代码中使用π值 MF623:在窗体上使用切换按钮 MF624:删除…