> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 高级音频功能

> 启用高级音频功能，包括回声消除、噪声抑制、VoIP 和多设备播放。

## **最大限度地减少回声和噪声**

回声和噪声问题是 VoIP 系统中常见的问题。语音从远端扬声器发出，并经过时延后回声，从而造成感知问题。回声消除可减少通信期间来自远端扬声器的回声。噪声抑制可减少来自麦克风通道的噪声。SMECNS 回声消除和噪声抑制（ECNS）算法可提供平稳和非平稳噪声抑制以及回声消除。

声学回声是指由于设备的扬声器和麦克风之间的声学路径（声学耦合）而产生的回声。这对免提和电话会议应用非常重要。

下图显示了声学回声路径以及扬声器和麦克风之间如何发生声学回声。

<div className="flex flex-col items-center gap-2">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/qualcomm-staging/zh/Technologies/Audio/media/qualcomm-linux-iot-audio-voice/ecns_overview.svg" alt="Noise and acoustic echo" />

  <p className="text-sm text-gray-700">
    噪声与声学回声
  </p>
</div>

近端语音信号远端语音信号近端扬声器环境噪声声学回声路径声学回声近端语音远端语音

噪声与声学回声

* **回声消除器** – 一种自适应滤波器，可自我调整系数以消除回声。每个回声都有一个回声路径，并由脉冲响应表征。回声消除器可以自适应网络回声路径，从而消除回声。
* **噪声抑制** – 单麦克风回声消除器和噪声抑制器（SMECNS）在嘈杂环境中使用设备时，有助于抑制周围的平稳噪声。

### **为录音启用 SMECNS**

录音时，SMECNS 通过抑制麦克风采集到的背景噪声来保持录音路径中的语音质量。

对于单麦克风录音，仅支持平稳噪声抑制。平稳噪声是指频率不随时间变化的噪声，例如道路噪声或白噪声。

下图显示了如何使用增益、SMECNS 和后处理模块来去除外部噪声和回声，从而输出清晰的语音。

<div className="flex flex-col items-center gap-2">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/qualcomm-staging/zh/Technologies/Audio/media/qualcomm-linux-iot-audio-voice/fluence_recording.svg" alt="SMECNS software block for recording" />

  <p className="text-sm text-gray-700">
    用于录音的 SMECNS 软件块
  </p>
</div>

用于录音的 SMECNS 软件块

要在录音路径中启用 SMECNS：

1. 使用 `wpctl status` 命令列出可用节点。
   ```text theme={null}
   systemctl stop pipewire wireplumber pipewire.socket pipewire-manager.socket
   ```
   ```text theme={null}
   chmod 777 /dev/dma_heap/system
   ```
   ```text theme={null}
   systemctl start pipewire wireplumber
   ```
   ```text theme={null}
   wpctl status
   ```
2. 运行 `wpctl set-default` 将源节点设置为手持麦克风。
   ```text theme={null}
   wpctl set-default <sink/source node ID>
   ```
3. 运行 `pw-record` 开始录音。以下示例以详细模式运行，并将录音保存到 `/opt/test.wav`。
   ```text theme={null}
   pw-record /opt/test.wav -v
   ```

### **模拟 VoIP**

要使用 PipeWire 模拟 VoIP：

| **设置录音源** |    |
| :-------- | :- |

```text theme={null}
pw-record /opt/record_voip.wav -v --target=voip-tx0
```

| **设置播放接收端** |    |
| :---------- | :- |

```text theme={null}
pw-play /opt/test.wav -v --target=voip-rx0
```

<Note>
  请务必将 PCM 文件（`<FileName>.wav`）推送到 `/opt/` 文件夹。
</Note>

### **启用单流多设备播放**

配置平台以同时在多个输出设备（例如内置扬声器和有线耳机）上呈现单个音频流。在此模式下，音频会被复制，同一解码音频流会同时路由到多个活动输出设备，确保所有选定端点之间的同步播放。

1. 列出可用的音频节点。

   ```text theme={null}
   wpctl status
   ```

<div className="flex flex-col items-center gap-2">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/qualcomm-staging/zh/Technologies/Audio/media/qualcomm-linux-iot-audio-voice/wpctl_status.png" alt="wpctl status output showing available PAL sink and source nodes" />

  <p className="text-sm text-gray-700">
    wpctl status 输出显示了可用的 PAL 接收端和源节点
  </p>
</div>

2. 设置默认节点。

   ```text theme={null}
   wpctl set-default <NUMBER for low-latency>
   ```

   * 对于低延迟，选择带有 `pal sink combined speaker and headset ll` 的节点。
   * 对于深度缓冲，选择带有 `pal sink combined speaker and headset db` 的节点。

3. 开始播放。

   ```text theme={null}
   pw-play /tmp/yesterday_48KHz.wav -v
   ```

### **启用多流多设备播放**

配置平台以同时在不同的输出设备（例如内置扬声器和有线耳机）上呈现多个独立的音频流。在此模式下，每个音频流都是独立管理和路由的，允许不同的流同时传送到不同的输出设备而不会互相干扰。这样可实现例如跨多个端点的并行媒体播放和通知路由等用例。

1. 列出可用的音频节点。

   ```text theme={null}
   pw-cli ls Node
   ```

2. 选择要在其上播放多个流的音频节点，并使用 `--target` 命令行选项指定这些节点名称。

3. 启动低延迟播放。

   ```text theme={null}
   pw-play --target=pal_sink_speaker_ll /opt/clip1.wav -v
   ```

   ```text theme={null}
   pw-play --target=pal_sink_headset_ll /opt/clip2.wav -v
   ```

### **使用 PipeWire 进行动态设备切换**

使用 `wpctl` 在音频活动时触发动态设备切换。

1. 列出所有可用的音频节点。

   ```text theme={null}
   wpctl status
   ```

2. 在默认设备（例如扬声器）上开始播放。

   ```text theme={null}
   pw-play /opt/test.wav -v
   ```

3. 在播放期间，通过设置新的默认接收端切换到不同的输出设备（例如耳机）。

   ```text theme={null}
   wpctl set-default <headset sink node ID>
   ```

   WirePlumber 会重新路由流，PAL 会无缝执行设备切换。

## **启用 DP 和 HDMI 音频**

本节适用于 QCS6490 (Kodiak) 和 IQ-9075 (Lemans) 平台（config1）。

### **设置 QCS6490 (rb3-gen2-core-kit)**

1. 将拓扑二进制文件复制到固件路径。

   ```text theme={null}
   cp \\sphere\CasaBuilds\QLI\Topology\QCS6490\QCS6490-RB3Gen2-tplg.bin /lib/firmware/qcom/qcs6490/
   ```

2. 复制 HiFi 配置文件。

   ```text theme={null}
   cp \\sphere\CasaBuilds\QLI\Topology\QCS6490\HiFi.conf.kodiak /usr/share/alsa/ucm2/Qualcomm/qcs6490/QCS6490-RB3Gen2/HiFi.conf
   ```

3. 复制 HDMI 格式配置文件。

   ```text theme={null}
   cp \\sphere\CasaBuilds\QLI\Topology\QCS6490\51-hdmi-format.conf /usr/share/wireplumber.conf.d/51-hdmi-format.conf
   ```

4. 重启设备。启动时，确保 DP 已连接（typeC 转 HDMI 母头 + HDMI 转 HDMI 线缆）。

   ```text theme={null}
   reboot
   ```

**HDMI 和 DP 音频播放 (QCS6490)**

| HDMI 音频播放                                                                         | DP 音频播放                                                                           |
| :-------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------- |
| `amixer -c 0 cset iface=MIXER,name='SECONDARY_MI2S_RX Audio Mixer MultiMedia3' 1` | `amixer -c 0 cset iface=MIXER,name='DISPLAY_PORT_RX_0 Audio Mixer MultiMedia4' 1` |
| `aplay -D plughw:0,2 /home/test.wav`                                              | `aplay -D plughw:0,3 /home/test.wav`                                              |
| `wpctl set-default <node>`                                                        | `wpctl set-default <node>`                                                        |
| `pw-play -v /home/test.wav`                                                       | `pw-play -v /home/test.wav`                                                       |

### **设置 IQ-9075 (iq-9075-evk)**

1. 将拓扑二进制文件复制到固件路径。

   ```text theme={null}
   cp \\sphere\CasaBuilds\QLI\Topology\IQ-9075\LEMANS-EVK-tplg.bin /lib/firmware/qcom/sa8775p/
   ```

2. 复制 HiFi 配置文件。

   ```text theme={null}
   cp \\sphere\CasaBuilds\QLI\Topology\IQ-9075\HiFi.conf.lemans /usr/share/alsa/ucm2/Qualcomm/sa8775p/lemans-evk/HiFi.conf
   ```

3. 重启设备。启动时，确保 DP 已连接（eDP 转 DP 线缆）。

   ```text theme={null}
   reboot
   ```

**DP 音频播放 (IQ-9075)**

| DP 音频播放                                                                           |
| :-------------------------------------------------------------------------------- |
| `amixer -c 0 cset iface=MIXER,name='DISPLAY_PORT_RX_0 Audio Mixer MultiMedia3' 1` |
| `aplay -D plughw:0,2 /home/test.wav`                                              |
| `wpctl set-default <node>`                                                        |
| `pw-play -v /home/test.wav`                                                       |

## **后续步骤**

* [Audio Addendum](https://dragonwingdocs.qualcomm.com/Addendum-docs/Audio/audio-addendum-overview) — 使用 QACT 和 QXDM 进行校准和诊断
* [故障排除音频](troubleshoot-audio) — 捕获并分析音频日志以解决问题
* [自定义音频图](customize-audio-graph) — 修改音频图和 PAL 配置
