音訊硬體轉碼器驅動程式庫控制。用於控制及取得音訊硬體中的資訊
透過 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
:Pulse Density Modulation 範例。
upcm
:主機端點上的已簽署線性脈衝程式碼調變範例。
spcm
:無簽署的線性脈搏程式碼修改範例 (位於主機端)。
fpcm
:IEEE-754 編碼的浮點範例。
none
:樣本中沒有與 PDM 等影格同步的影格格式。
i2s
:採用 I2S 規格中指定的格式。
left-stereo
:靠左對齊 2 個頻道。
right-stereo
:靠右對齊 2 個頻道。
1tdm
:靠左對齊、變數數量不定、在影格同步時開始的資料從低到位
高掛在螺紋邊緣影格同步必須保持高,達到 1
時鐘週期。
2tdm
:靠左對齊、可變的聲道,資料會在影格結束後開始一個時鐘週期
同步變更時,從低到高時同步套用排球邊緣。影格同步處理作業必須
維持在高點,維持在 1 個時鐘週期。
3tdm
:靠左對齊、變數數量不定。資料會在影格結束後開始兩個時鐘週期
同步變更時,從低到高時同步套用排球邊緣。影格同步處理作業必須
維持在高點,維持在 1 個時鐘週期。
<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/