Skip to main content
The IQ-9075 audio subsystem is powered by Low Power AI (LPAI) and delivers advanced voice UI and audio experiences via PipeWire.

Key Features

  • Low Power AI (LPAI) subsystem for efficient audio processing
  • PipeWire multimedia server for low-latency audio routing
  • Hardware-accelerated encoding/decoding
  • Fluence ECNS — advanced echo cancellation and noise suppression
  • Multiple audio interfaces — I2S, TDM, SoundWire

Hardware Configuration

  • Speakers: Onboard MAX98357 I2S amplifiers; connect the two supplied mini speakers to hear output. HS0_MI2S is shared between left and right for stereo.
  • Microphone: Single onboard microphone (MMICT5848) on HS2_MI2S, configured to left channel by default
Speaker connection: Microphone location:

Architecture

ComponentDescription
PipeWireMultimedia server; replaces PulseAudio; low-latency, flexible media handling
WirePlumberSession/policy manager; handles default sink/source, auto-connect rules
PALPlatform Abstraction Layer; provides audio-specific APIs and DSP graph operations
AGMAudio Graph Manager; ALSA-based mixer controls and PCM/compressed plug-ins
ARGS/GSLAudioReach Graph Service; handles initialization and creation of audio graphs
SPFSignal Processing Framework; modular framework on LPAI DSP

Configuration Files

ComponentLocation
ALSA card registration/proc/asound/cards
UCM2 profiles/usr/share/alsa/ucm2/<card-name>/
PipeWire config/etc/pipewire/
WirePlumber rules/usr/share/wireplumber/

Verify Audio Stack

cat /proc/asound/cards                                   # List registered ALSA sound cards
aplay -l                                                 # List playback (output) devices
arecord -l                                               # List capture (input) devices
systemctl --user status pipewire wireplumber --no-pager  # Confirm the audio services are active
wpctl status                                             # Show the default sink/source and routing
pw-top                                                   # Live view of the audio graph (Ctrl+C to exit)
pw-cli ls Node                                           # List PipeWire nodes
Expected: /proc/asound/cards lists at least one card, and aplay -l and arecord -l each show a device. For example:
 0 [<card-name>     ]: <driver> - <card description>
                       <card long name>

**** List of PLAYBACK Hardware Devices ****
card 0: <card-name> [<card description>], device 0: <pcm-name> []
  Subdevices: 1/1
wpctl status should list a default Sink and Source (each marked with *). If /proc/asound/cards is empty or wpctl status shows no default sink or source, the audio stack did not come up: see the Troubleshooting section below.

Audio Playback and Capture

PipeWire Playback

1

Push audio file to device

Copy a short test clip to the device so you have something to play. test.wav is any small PCM WAV file (48 kHz, 16-bit stereo works well): use one from the host, or create one with ffmpeg -f lavfi -i "sine=frequency=440:duration=5" -ar 48000 -ac 2 test.wav.
scp test.wav ubuntu@<ip-addr>:/home/ubuntu/
2

Set default sink and volume

wpctl status   # Find sink node marked with *
wpctl set-default <sink-node>   # If not already set
wpctl set-volume @DEFAULT_AUDIO_SINK@ 1.0
3

Play audio

pw-play /home/ubuntu/test.wav -v
You should hear the clip play through the connected speakers, and pw-play prints a progress and peak-level readout while it runs:Press Ctrl+C to stop.

PipeWire Record

1

Set default source and volume

wpctl status   # Find mic node marked with *
wpctl set-default <mic-node>   # If not already set
wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 1.0
2

Start recording

pw-record /home/ubuntu/record.wav -v
Press Ctrl+C to stop.
A value of 1.0 represents 100% volume.

GStreamer Audio

# PCM capture
gst-launch-1.0 -v pulsesrc volume=10 ! audioconvert ! wavenc ! \
  filesink location=/home/ubuntu/audio.wav

# FLAC capture
gst-launch-1.0 -v pulsesrc volume=10 ! audioconvert ! flacenc ! \
  filesink location=/home/ubuntu/audio.flac

Log Capture

# PipeWire logs
journalctl --user -u pipewire
journalctl --user -u wireplumber

# Live debugging
journalctl --user -u pipewire -f

# Kernel audio driver logs
sudo dmesg

Troubleshooting

wpctl status
wpctl set-volume @DEFAULT_AUDIO_SINK@ 1.0
systemctl --user restart wireplumber
aplay -l
  • Verify speakers are connected properly
  • Increase volume if at 0%
  • Restart WirePlumber if PipeWire is not routing correctly
# Check ALSA capture devices
arecord -l
dmesg | grep -i "snd\|audio\|asoc"

# Test raw ALSA recording (bypass PipeWire)
arecord -D hw:0,0 -f S16_LE -r 48000 test.wav
aplay test.wav

# Check PipeWire capture nodes
pw-cli ls Node | grep -i source

# Check services
systemctl --user status pipewire pipewire-pulse wireplumber
If ALSA capture fails → kernel/DT is the first place to check.
# Check CPU load
top

# Check PAL media config (expect rate=48000, ch=2, fmt=2)
grep "setDeviceMediaConfig" /var/log/syslog

# Check for underruns
dmesg | grep -i -e underrun -e xrun -e lpass -e audio

# Check PipeWire quantum
pw-metadata -n settings

# Monitor real-time
pw-top
Fix — increase PipeWire buffer:
mkdir -p ~/.config/pipewire/pipewire.conf.d
cat > ~/.config/pipewire/pipewire.conf.d/99-custom-buffer.conf << 'EOF'
context.properties = {
    default.clock.quantum = 1024
    default.clock.min-quantum = 1024
}
EOF
systemctl --user restart pipewire wireplumber
Fix — convert audio to 48 kHz 16-bit stereo:
ffmpeg -i input.wav -ar 48000 -ac 2 -sample_fmt s16 output.wav
systemctl --user status pipewire pipewire-pulse wireplumber
journalctl --user -u pipewire -u wireplumber -b

# Reset configuration
rm -rf ~/.config/pipewire ~/.config/wireplumber
systemctl --user daemon-reload
systemctl --user restart pipewire pipewire-pulse wireplumber

# Reinstall if needed
sudo apt install --reinstall pipewire wireplumber pipewire-pulse

Advanced Features

Echo Cancellation (ECNS) for VoIP

# VoIP record
pw-record /home/ubuntu/record_voip.wav -v --target=voip-tx0

# VoIP playback
pw-play /home/ubuntu/record_voip.wav -v --target=voip-rx0
Features: adaptive echo cancellation, stationary and non-stationary noise suppression, acoustic echo path cancellation.

Resources