音频编解码器 - ctl

音频硬件编解码器驱动程序控制。用于控制音频硬件以及从音频硬件获取信息 通过 FIDL 编解码器接口实现编解码器驱动程序。 请参阅 audio-driver-ctl 来播放、录制和配置音频流。

用法

  audio-codec-ctl [-d|--device <device>] f[ormats]

  audio-codec-ctl [-d|--device <device>] r[eset]

  audio-codec-ctl [-d|--device <device>] d[ai] <number_of_channels>
    <channels_to_use_bitmask> pdm|upcm|spcm|fpcm none|i2s|left-stereo|right-stereo|1tdm|2tdm|3tdm
    <frame_rate> <bits_per_slot> <bits_per_sample>

  audio-codec-ctl [-d|--device <device>] start

  audio-codec-ctl [-d|--device <device>] stop

  audio-codec-ctl [-d|--device <device>] p[lug_state]

  audio-codec-ctl [-d|--device <device>] e[elements]

  audio-codec-ctl [-d|--device <device>] t[opologies]

  audio-codec-ctl [-d|--device <device>] w[atch] <id>

  audio-codec-ctl [-d|--device <device>] set <id> [start|stop] [bypass] [gain <gain>]
    [vendor <hex> <hex> ...]

  audio-codec-ctl [-h|--help]

命令

<device> 上的音频硬件编解码器驱动程序控制(指定完整路径,例如 /dev/class/codec/123 或 仅指定 devfs 节点名称,例如123)或未指定(在 /dev/class/codec).每次调用只能指定一个命令。

formats

  audio-codec-ctl [-d|--device <device>] f[ormats]

检索编解码器支持的 DAI 格式。

info

  audio-codec-ctl [-d|--device <device>] i[nfo]

检索有关编解码器的文本信息。

capabilities_plug_detect

  audio-codec-ctl [-d|--device <device>] c[apabilities_plug_detect]

检索插头检测功能。

reset

  audio-codec-ctl [-d|--device <device>] r[eset]

重置编解码器。

dai

  audio-codec-ctl [-d|--device <device>] d[ai] <number_of_channels>
    <channels_to_use_bitmask> pdm|upcm|spcm|fpcm none|i2s|left-stereo|right-stereo|1tdm|2tdm|3tdm
    <frame_rate> <bits_per_slot> <bits_per_sample>

设置要在编解码器接口中使用的 DAI 格式。

<number_of_channels>:频道数量。

<channels_to_use_bitmask>:通过位掩码设置哪些通道处于活跃状态。最不重要 位对应于频道索引 0。

pdm:脉冲密度调制样本。

upcm:主端字节序的有符号线性脉冲编码调制样本。

spcm:主机字节序的无符号线性脉冲编码调制样本。

fpcm:采用 IEEE-754 编码的浮点数采样。

none:没有帧同步(如 PDM)的示例帧格式。

i2s:I2S 规范中指定的格式。

left-stereo:左对齐,2 个声道。

right-stereo:右对齐,2 个声道。

1tdm:左对齐,通道数量可变,帧同步时开始的数据从低值更改为 在 Sclk 的上升边缘就开始计时。帧同步必须保持高同步状态(正好 1) 循环。

2tdm:左对齐,通道数量可变,数据在帧后一个时钟周期开始 在 sclk 的上升边缘,从低到高进行同步。帧同步必须 正好保持高一个时钟周期。

3tdm:左对齐,通道数量可变,帧后两个时钟周期开始显示数据 在 sclk 的上升边缘,从低到高进行同步。帧同步必须 正好保持高一个时钟周期。

<frame_rate>:所有样本的帧速率。

<bits_per_slot>:所有频道的每个槽位的位数。

<bits_per_sample>:所有样本中每个样本的位数。必须小于每个通道的位数 使样本适合拟合。

start

  audio-codec-ctl [-d|--device <device>] start

开始/重启编解码器操作。

stop

  audio-codec-ctl [-d|--device <device>] stop

停止编解码器操作。

plug_state

  audio-codec-ctl [-d|--device <device>] p[lug_state]

获取插头检测状态。

elements

  audio-codec-ctl [-d|--device <device>] e[lements]

返回支持的处理元素的矢量。

topologies

  audio-codec-ctl [-d|--device <device>] t[opologies]

返回受支持拓扑的矢量。

watch

  audio-codec-ctl [-d|--device <device>] w[atch] <id>

获取处理元素状态。

set

  audio-codec-ctl [-d|--device <device>] set <id> [start|stop] [bypass] [gain <gain>]
    [vendor <hex> <hex> ...]

控制处理元素。

<id>:处理元素 ID。

start:进程元素的启动状态。

stop:进程元素的停止状态。

bypass:进程元素绕过状态。

<gain>:支持的处理元素向量中报告的当前增益(以 GainType 格式表示)。

<hex>:要馈送给处理元素的供应商特定原始字节(采用十六进制格式)。

示例

检索支持的 DAI 格式

$ audio-codec-ctl f
Executing on device: /dev/class/codec/706
[ fuchsia_hardware_audio::DaiSupportedFormats{ number_of_channels = [ 2, 4, ], sample_formats = [ fuchsia_hardware_audio::DaiSampleFormat::kPcmSigned, ], frame_formats = [ fuchsia_hardware_audio::DaiFrameFormat::frame_format_standard(fuchsia_hardware_audio::DaiFrameFormatStandard::kI2S), fuchsia_hardware_audio::DaiFrameFormat::frame_format_standard(fuchsia_hardware_audio::DaiFrameFormatStandard::kTdm1), ], frame_rates = [ 48000, 96000, ], bits_per_slot = [ 16, 32, ], bits_per_sample = [ 16, 32, ], }, ]

检索文本信息

$ audio-codec-ctl i
Executing on device: /dev/class/codec/706
fuchsia_hardware_audio::CodecInfo{ unique_id = "", manufacturer = "Texas Instruments", product_name = "TAS5825m", }

检索插头检测功能

$ audio-codec-ctl c
Executing on device: /dev/class/codec/706
fuchsia_hardware_audio::PlugDetectCapabilities::kHardwired

返回编解码器是否可桥接

$ audio-codec-ctl b
Executing on device: /dev/class/codec/706
Is bridgeable: false

重置编解码器

$ audio-codec-ctl r
Executing on device: /dev/class/codec/706
Reset done

设置编解码器的桥接模式

$ audio-codec-ctl -m true
Setting bridged mode to: true
Executing on device: /dev/class/codec/706

设置要在编解码器接口中使用的 DAI 格式

$ audio-codec-ctl d 2 1 s i 48000 16 32
Setting DAI format:
fuchsia_hardware_audio::DaiFormat{ number_of_channels = 2, channels_to_use_bitmask = 1, sample_format = fuchsia_hardware_audio::DaiSampleFormat::kPcmSigned, frame_format = fuchsia_hardware_audio::DaiFrameFormat::frame_format_standard(fuchsia_hardware_audio::DaiFrameFormatStandard::kI2S), frame_rate = 48000, bits_per_slot = 16, bits_per_sample = 32, }
Executing on device: /dev/class/codec/706

启动/重启编解码器操作

$ audio-codec-ctl start
Executing on device: /dev/class/codec/706
Start done

停止编解码器操作

$ audio-codec-ctl stop
Executing on device: /dev/class/codec/706
Stop done

获取插头检测状态

$ audio-codec-ctl p
Executing on device: /dev/class/codec/706
fuchsia_hardware_audio::PlugState{ plugged = true, plug_state_time = 1167863520, }

获取支持的处理元素

$ audio-codec-ctl e
Executing on device: /dev/class/codec/706
[ fuchsia_hardware_audio_signalprocessing::Element{ id = 1, type = fuchsia_hardware_audio_signalprocessing::ElementType::kGain, type_specific = fuchsia_hardware_audio_signalprocessing::TypeSpecificElement::gain(fuchsia_hardware_audio_signalprocessing::Gain{ type = fuchsia_hardware_audio_signalprocessing::GainType::kDecibels, min_gain = -63.5, max_gain = 0, min_gain_step = 0.5, }), }, fuchsia_hardware_audio_signalprocessing::Element{ id = 2, type = fuchsia_hardware_audio_signalprocessing::ElementType::kMute, }, ]

获取支持的拓扑

$ audio-codec-ctl t
Executing on device: /dev/class/codec/706
[ fuchsia_hardware_audio_signalprocessing::Topology{ id = 1, processing_elements_edge_pairs = [ fuchsia_hardware_audio_signalprocessing::EdgePair{ processing_element_id_from = 1, processing_element_id_to = 2, }, fuchsia_hardware_audio_signalprocessing::EdgePair{ processing_element_id_from = 2, processing_element_id_to = 3, }, ], }, ]

获取处理元素状态

$ audio-codec-ctl w 1
Executing on device: /dev/class/codec/706
fuchsia_hardware_audio_signalprocessing::ElementState{ type_specific = fuchsia_hardware_audio_signalprocessing::TypeSpecificElementState::gain(fuchsia_hardware_audio_signalprocessing::GainElementState{ gain = 0, }), started = true, }

控制处理元素

$ audio-codec-ctl set 1 start gain 1.23 vendor 0x12 0x98
Setting element state:
fuchsia_hardware_audio_signalprocessing::SignalProcessingSetElementStateRequest{ processing_element_id = 1, state = fuchsia_hardware_audio_signalprocessing::ElementState{ type_specific = fuchsia_hardware_audio_signalprocessing::TypeSpecificElementState::gain(fuchsia_hardware_audio_signalprocessing::GainElementState{ gain = 1.23, }), started = true, vendor_specific_data = [ 18, 152, ], }, }
Executing on device: /dev/class/codec/706

指定设备

$ audio-codec-ctl -d 706 p
Executing on device: /dev/class/codec/706
fuchsia_hardware_audio::PlugState{ plugged = true, plug_state_time = 1167863520, }
$ audio-codec-ctl -d 123 p
Executing on device /dev/class/codec/123
watch plug state failed: FIDL operation failed due to peer closed, status: ZX_ERR_PEER_CLOSED (-24)
$ audio-codec-ctl -d /dev/class/codec/706 p
Executing on device: /dev/class/codec/706
fuchsia_hardware_audio::PlugState{ plugged = true, plug_state_time = 1167863520, }

源代码

audio-codec-ctl 的源代码://src/media/audio/tools/audio-codec-ctl/