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 speakers with MAX98357 I2S-amps; HS0_MI2S shared between left and right for stereo
- Microphone: Single onboard microphone (MMICT5848) on HS2_MI2S, configured to left channel by default
Speaker connection:
Architecture
| Component | Description |
|---|
| PipeWire | Multimedia server; replaces PulseAudio; low-latency, flexible media handling |
| WirePlumber | Session/policy manager; handles default sink/source, auto-connect rules |
| PAL | Platform Abstraction Layer; provides audio-specific APIs and DSP graph operations |
| AGM | Audio Graph Manager; ALSA-based mixer controls and PCM/compressed plug-ins |
| ARGS/GSL | AudioReach Graph Service; handles initialization and creation of audio graphs |
| SPF | Signal Processing Framework; modular framework on LPAI DSP |
Configuration Files
| Component | Location |
|---|
| ALSA card registration | /proc/asound/cards |
| WirePlumber rules & config | /usr/share/wireplumber/ |
Verify Audio Stack
# Confirm ALSA card and devices
cat /proc/asound/cards
aplay -l
arecord -l
# Confirm PipeWire + WirePlumber services
systemctl status pipewire wireplumber --no-pager
# Validate default sink/source
wpctl status
# Monitor graph
pw-top
pw-cli ls Node
Audio Playback and Capture
PipeWire Playback
Push audio file to device
scp test.wav root@<ip-addr>:/opt/
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
Play audio
The command shell should resemble the following:
Press Ctrl+C to stop.
PipeWire Record
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
Start recording
pw-record /opt/record.wav -v
The command shell should resemble the following:
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=/opt/audio.wav
# FLAC capture
gst-launch-1.0 -v pulsesrc volume=10 ! audioconvert ! flacenc ! \
filesink location=/opt/audio.flac
# WAV playback
gst-launch-1.0 -e filesrc location=/opt/audio.wav ! \
wavparse ! audioconvert ! pulsesink volume=10
# MP3 playback
gst-launch-1.0 -e filesrc location=/opt/audio.mp3 ! \
mpegaudioparse ! mpg123audiodec ! pulsesink volume=10
# FLAC playback
gst-launch-1.0 -e filesrc location=/opt/audio.flac ! \
flacparse ! flacdec ! pulsesink volume=10
Log Capture
# PipeWire logs
journalctl -u pipewire
journalctl -u wireplumber
# Live debugging
journalctl -u pipewire -f
# Kernel audio driver logs
sudo dmesg
Troubleshooting
No Audio Output During Playback
wpctl status
wpctl set-volume @DEFAULT_AUDIO_SINK@ 1.0
systemctl restart pipewire pipewire-pulse wireplumber
pw-play /opt/test.wav -v
# Check services
systemctl status pipewire pipewire-pulse wireplumber
Audio Playback Stuttering or Crackling
# 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 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
PipeWire Service Not Starting
systemctl status pipewire pipewire-pulse wireplumber
journalctl -u pipewire -u wireplumber -b
# Reset configuration
rm -rf ~/.config/pipewire ~/.config/wireplumber
systemctl daemon-reload
systemctl 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 /opt//record_voip.wav -v --target=voip-tx0
# VoIP playback
pw-play /opt/record_voip.wav -v --target=voip-rx0
Features: adaptive echo cancellation, stationary and non-stationary noise suppression, acoustic echo path cancellation.
Resources