ALSA 用例配置

ALSA 用例配置。参考 ALSA 用例配置 来了解更详细信息。

ALSA 用例配置

用例配置文件使用 配置文件 语法来定义静态配置树。该树在运行时根据配置树中的条件和动态变量进行评估(修改)。使用 用例接口 API 解析结果并将其导出到应用程序。

配置目录和主文件名查找

查找路径在 ucm.conf 文件中描述。配置结构看起来像下面这样:

UseCasePath.path1 {
  Directory "conf.virt.d"
  File "${OpenName}.conf"
}
UseCasePath.path2 {
  Directory "external"
  File "${OpenName}.conf"
}

现代 Linux 中,ucm.conf 文件通常位于 /usr/share/alsa/ucm2/ucm.conf,该文件结构大体如下:

#
# This is the toplevel file included from the alsa-lib.
#
# It allows to add extra lookups for the old kernels or so.
#
# You may specify the directory (relative to the toplevel) and
# the master configuration file which defines the verbs.
#

#
# Syntax version is reset for the master configuration file.
#

Syntax 3

Define.V1 ""		# non-empty string to enable ucm v1 paths
Define.V2Module yes	# empty string to disable
Define.V2Name yes	# empty string to disable

If.driver {
	Condition {
		Type String
		Empty "${CardNumber}"
	}
	True {
		#
		# The probed path for no-hw-card:
		#
		#   ucm2/${OpenName}/${OpenName}.conf
		#
		UseCasePath {
			legacy {
				Directory "${OpenName}"
				File "${OpenName}.conf"
			}
		}
	}
	False {

		#
		# The probed path when hw-card is found:
		#
		#   ucm2/${KernelModule}/${KernelModule}.conf
		#   ucm2/${CardDriver}/${CardLongName}.conf
		#   ucm2/${CardDriver}/${CardDriver}.conf
		#

		If.V2Module {
			Condition {
				Type String
				Empty "${var:V2Module}"
			}
			False {
				Define.KernelModulePath "class/sound/card${CardNumber}/device/driver"
				Define.KernelModule "${sys:$KernelModulePath}"
				UseCasePath.module {
					Directory "module"
					File "${var:KernelModule}.conf"
				}
			}
		}
		If.V2Name {
			Condition {
				Type String
				Empty "${var:V2Name}"
			}
			False.UseCasePath {
				longname {
					Directory "${CardDriver}"
					File "${CardLongName}.conf"
				}
				driver {
					Directory "${CardDriver}"
					File "${CardDriver}.conf"
				}
			}
		}
	}
}

If.V1 {
	Condition {
		Type String
		Empty "${var:V1}"
	}
	False.If.v1_driver {
		Condition {
			Type String
			Empty "${CardNumber}"
		}
		True {
			#
			# The probed path for no-hw-card:
			#
			#   ucm/${OpenName}/${OpenName}.conf
			#
			UseCasePath.v1_legacy {
				Version 1
				Directory "${OpenName}"
				File "${OpenName}.conf"
			}
		}
		False {
			#
			# The ucm v1 probed path when hw-card is found:
			#
			#   ucm/${CardLongName}/${CardLongName}.conf
			#   ucm/${CardName}/${CardName}.conf or \
			#			ucm/${OpenName}/${OpenName}.conf
			#
			UseCasePath.v1_longname {
				Version 1
				Directory "${CardLongName}"
				File "${CardLongName}.conf"
			}
			If.v1_hw {
				Condition {
					Type String
					Haystack "${OpenName}"
					Needle "hw:"
				}
				True.UseCasePath.v1_cardnamme {
					Version 1
					Directory "${CardName}"
					File "${CardName}.conf"
				}
				False.UseCasePath.v1_openname {
					Version 1
					Directory "${OpenName}"
					File "${OpenName}.conf"
				}
			}
		}
	}
}

UCM 主配置文件

每个声卡都有一个主声卡文件,它列出声卡支持的所有用例 verbs,如:

# Example master file for blah sound card
# By Joe Blogs <joe@bloggs.org>
 
Syntax 6
 
# Use Case name for user interface
Comment "Nice Abstracted Soundcard"
 
# The file is divided into Use case sections. One section per use case verb.
 
SectionUseCase."Voice Call" {
  File "voice_call_blah"
  Comment "Make a voice phone call."
}
 
SectionUseCase."HiFi" {
  File "hifi_blah"
  Comment "Play and record HiFi quality Music."
}
 
# Define Value defaults
 
ValueDefaults {
  PlaybackChannels 4
  CaptureChannels 4
}
 
# Define boot / initialization sequence
# This sequence is skipped, when the soundcard was already configured by system
# (alsactl configuration was already created). The purpose is to not alter
# ALSA card controls which may be modified by user after initial settings.
 
BootSequence [
  cset "name='Master Playback Switch',index=2 0,0"
  cset "name='Master Playback Volume',index=2 25,25"
  msleep 50
  cset "name='Master Playback Switch',index=2 1,1"
  cset "name='Master Playback Volume',index=2 50,50"
]
 
# Define fixed boot sequence
# This sequence is always executed on boot (hotplug).
 
FixedBootSequence [
  cset "name='Something to toggle' toggle"
]

UCM verb 配置文件

verb 配置文件定义设备,修饰符和初始化序列。它有点像声音配置文件。

# Example Use case verb section for Voice call blah
# By Joe Blogs <joe@blogs.com>
 
# verb global section
 
SectionVerb {
 
  # enable and disable sequences are compulsory
  EnableSequence [
    disdevall ""    # run DisableSequence for all devices
  ]
 
  DisableSequence [
    cset "name='Power Save' on
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值