音訊-轉碼器

音訊硬體轉碼器驅動程式庫控制。用於控制及取得音訊硬體中的資訊 透過 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/