# Advanced audio features
## Minimize echo and noise
Echo and noise problems are common in VoIP systems. Speech
comes from the far-end speaker and echoes back with a time delay,
causing perception problems. Echo cancellation decreases the echo from the
far-end speaker during communication. Noise suppression
decreases the noise from the microphone channel.
The Fluence echo cancellation and noise suppression (ECNS) algorithm
provides stationary and nonstationary noise suppression and echo
cancellation.
Acoustic echo is when echoes occur due to the acoustic path (acoustic
coupling) between the loudspeaker and microphone of a device.
It is important for hands-free and teleconferencing
applications.
The following figure shows the acoustic echo path and how acoustic echo occurs between
loudspeakers and microphones.
Noise and acoustic echo
- **Echo Canceller** – An adaptive filter that self-adjusts
coefficients to cancel out echo. Every echo has an echo path, and is
characterized by an impulse response. The echo canceller adapts to the network echo path
such that it cancels out the echo.
- **Noise Suppression** – Single mic echo canceller and noise suppressor (SMECNS) helps to suppress the surrounding stationary
noise when using devices in noisy locations.
### Enable SMECNS for recording
When recording, Fluence keeps speech quality in the
recording path by suppressing background noise captured by the
microphone.
For single-microphone recordings, only
stationary noise suppression is possible. Stationary noise is where the frequency
does not change over time, for example, road noise or white noise.
The following figure shows how gains, SMECNS, and postprocessing modules are used to remove
outside noise and echo to output clean speech.
SMECNS software block for recording
To enable the SMECNS in the recording path:
1. Use the `wpctl status` command to list available nodes.
wpctl status
Copy to clipboard
2. Run `wpctl set-default` to set the source node to the handset mic.
wpctl set-default
Copy to clipboard
3. Run `pw-record` to start recording. The following example runs in verbose mode
and saves the recording to `/opt/test.wav`.
pw-record /opt/test.wav -v
Copy to clipboard
### Enable SMECNS for VoIP
Fluence reduces noise and eliminates echo in VoIP communication. It also suppresses noise and acoustic echo on the microphone signal.
The SDK supports a PipeWire VoIP source and sink, which
you can use when developing applications.
The following figure shows the flow of input speech to output speech when gains, Fluence, and
postprocessing modules are applied for VoIP communication.
SMECNS software block for VoIP
VOIP can be simulated by running recording and playback at the same time.
| **Set record source** | pw-record /opt/record.wav -v Copy to clipboard |
| --- | --- |
| **Set playback sink** | pw-play /opt/test.wav -v Copy to clipboard |
Note
Be sure to push a PCM file (`.wav`) to the `/opt/` folder.
### Enable single stream multiple device playback
Configure the platform to render a single audio stream simultaneously on multiple output devices, such as a built-in speaker and a wired headset. In this mode, the audio is duplicated and the same decoded audio stream is routed to multiple active output devices concurrently, ensuring synchronized playback across all selected endpoints.
1. Set SELinux to permissive mode.
setenforce 0
Copy to clipboard
2. Start the audio daemon.
adsprpcd audiopd &
Copy to clipboard
3. List available audio nodes.
wpctl status
Copy to clipboard
4. Set the default for the deep buffer node.
wpctl set-default
Copy to clipboard
5. Set the default for the low latency node.
wpctl set-default
Copy to clipboard
6. Start playback.
pw-play /tmp/yesterday_48KHz.wav -v
Copy to clipboard
### Enable multiple stream multiple device playback
Configure the platform to render multiple independent audio streams simultaneously on different output devices, such as a built-in speaker and a wired headset. In this mode, each audio stream is managed and routed independently, allowing distinct streams to be delivered concurrently to separate output devices without interference. This enables use cases such as parallel media playback and notification routing across multiple endpoints.
1. Start low latency playback.
pw-play --target=combined_output_ll /opt/clip1.wav -v
Copy to clipboard
2. Start deep buffer playback.
pw-play --target=combined_output_db /opt/clip2.wav -v
Copy to clipboard
Last Published: May 14, 2026
[Previous Topic
Troubleshoot audio](https://docs.qualcomm.com/bundle/publicresource/80-80022-16/topics/troubleshoot.md) [Next Topic
References](https://docs.qualcomm.com/bundle/publicresource/80-80022-16/topics/references.md)