Skip to main content

SECO Edge AI Audio Dongle — Software Integration, Usage & Validation Guide

1. Overview​

The SECO Edge AI Audio Dongle is a USB-C Audio Front-End (AFE) accessory designed for voice-driven human-machine interfaces (HMI), smart kiosks, intercoms, and edge AI voice assistants in noisy environments.

It combines a 6-microphone digital MEMS array, an integrated speaker amplifier with hardware acoustic echo reference loopback, and the bdSound Simply Sounds Clear (S2C) ALSA audio processing suite providing:

  • Adaptive Beamforming & Direction of Arrival (DoA)
  • Acoustic Bubble (spatial filtering that isolates a talker within a configurable frontal zone while rejecting off-axis and distant competing voices)
  • Full-Duplex Acoustic Echo Cancellation (AEC) (barge-in support while the speaker is playing)
  • Stationary and Non-Stationary Noise Reduction (NR)

2. Hardware Architecture & USB Audio Interface​

When connected to a Linux host (Embedded SBC or x86_64 PC) via USB-C, the dongle enumerates as a standard USB Audio Class (UAC) device:

ParameterValue
USB Vendor / Product ID0483:ee04 (STMicroelectronics BdSound_AFE)
ALSA Card NameBdSoundAFE (hw:BdSoundAFE,0)
Required MCU Firmware1.0.6323 or newer (2026_07_27_edge_ai_audio_dongle_fw_1.0.6323)
Hardware Capture (hw:BdSoundAFE,0)8 channels, 16000 Hz, S16_LE (Signed 16-bit Little Endian)
Hardware Playback (hw:BdSoundAFE,0)2 channels, 48000 Hz, S16_LE (Signed 16-bit Little Endian)

2.1 Capture Channel Mapping (8 Channels @ 16 kHz)​

The 8 hardware capture channels exposed by firmware 1.0.6323+ carry the 6 physical MEMS microphones plus 2 internal speaker loopback channels used by the S2C plugin as the phase-accurate Acoustic Echo Cancellation (AEC) reference:

ALSA HW Channel (0-indexed)SignalDescription
ch 0 – ch 5Mic 0 – Mic 5Raw digital MEMS microphone array signals
ch 6 – ch 7REF_L, REF_RInternal digital loopback of the speaker output (AEC reference)

2.2 Front Panel Microphone & Speaker Layout​


3. Building Clea OS (Yocto) with bdSound ALSA Plugins​

Support for the Edge AI Audio Dongle is integrated into SECO Clea OS (meta-seco-clea-os) through the bdsound-alsa-plugins recipe (version 9.0.6513), supporting both aarch64 and x86_64 target architectures.

3.1 Enabling the Plugins via menuconfig​

  1. Initialize your Clea OS build environment and open the configuration menu:
    source seco-setup.sh -c
  2. Navigate to Audio Tools and enable both the standard ALSA utilities and the bdSound S2C plugins:
    • [*] Audio Tools (CONFIG_FEATURE_AUDIO-TOOLS=y — installs alsa-utils such as arecord, aplay, amixer)
    • [*] Enable bdSound S2C ALSA plugins (CONFIG_FEATURE_AUDIO-BDSOUND=y — installs bdsound-alsa-plugins)
  3. Save the configuration and regenerate the build directory:
    source seco-setup.sh -r
Alternative (conf/local.conf)

If you are configuring a build directory manually without menuconfig, append the following lines to conf/local.conf:

AUDIO_TOOLS = "1"
AUDIO_BDSOUND = "1"

Or explicitly append the packages to your image:

IMAGE_INSTALL:append = " bdsound-alsa-plugins alsa-utils"

3.2 Building the Image or Standalone Package​

Inside the initialized Yocto build directory, build the complete Clea OS image:

bitbake seco-clea-os-image

To build only the RPM/IPK/DEB package for quick deployment on an already running board:

bitbake bdsound-alsa-plugins

3.3 Installed Files on the Target Rootfs​

The bdsound-alsa-plugins recipe installs the following components:

Target PathPurpose
/usr/lib/alsa-lib/libasound_module_pcm_s2c_send.soALSA extplug capture plugin (s2c_send)
/usr/lib/alsa-lib/libasound_module_pcm_s2c_recv.soALSA extplug playback plugin (s2c_recv)
/etc/alsa/conf.d/60-bdsound-s2c.confALSA virtual PCM definitions (S2C_send, S2C_send_bubbles_off, S2C_recv)
/etc/s2c_options_Standard.optBinary S2C initialization options (Acoustic Bubble ON)
/etc/s2c_options_bubbles_off.optBinary S2C initialization options (Acoustic Bubble OFF)
/etc/s2c_bargein_16kHz_send.confS2C capture tuning parameters (Acoustic Bubble ON)
/etc/s2c_bargein_16kHz_bubbles_off_send.confS2C capture tuning parameters (Acoustic Bubble OFF)
/etc/s2c_bargein_48kHz_recv.confS2C playback tuning parameters (48 kHz)

3.4 Manual Deployment (Without Rebuilding the OS Image)​

If you are evaluating the standalone release archive (2026_10_07_edge_ai_audio_dongle_plugin_9.0.6513) on an existing Linux system:

# 1. Copy all configuration and .opt files to /etc/
scp conf/* root@$DEVICE_IP:/etc/

# 2. Copy the ALSA plugin shared libraries for your target architecture
# - For Embedded ARM64 (Clea OS / Yocto):
scp lib/aarch64-poky-linux/alsa-lib/libasound_module_*.so root@$DEVICE_IP:/usr/lib/alsa-lib/
# - For Ubuntu 24.04 x86_64 PC:
sudo cp lib/x86_64-ubuntu2404-linux-gnu/alsa-lib/libasound_module_*.so /usr/lib/x86_64-linux-gnu/alsa-lib/
important

Both .conf and .opt files from conf/ must be present in /etc/, and the .opt files must match the exact version of the .so libraries (9.0.6513). Mixing .opt files from an older release causes I_S2C_suite__send_init to fail with err=-8021.


4. Using the Dongle on Linux​

4.1 Verifying Device Enumeration​

  1. Connect all 6 microphones to the dongle board and plug the USB-C cable into the host.
  2. Verify that the USB device and ALSA soundcard are detected:
    lsusb | grep -i 0483:ee04
    arecord -l | grep BdSoundAFE
    aplay -l | grep BdSoundAFE
  3. Verify that the dongle exposes 8 capture channels:
    grep -A6 Capture /proc/asound/BdSoundAFE/stream0 | grep Channels
    # Expected output: Channels: 8
    (If Channels: 6 is reported, the dongle is running an older MCU firmware and must be updated to 1.0.6323).

4.2 Mixer Levels & Desktop Audio Server Note​

Check or adjust the hardware capture (Mic) and playback (PCM) gains via amixer:

amixer -c BdSoundAFE sset Mic 92%
amixer -c BdSoundAFE sset PCM 96%
Desktop Linux (PipeWire / PulseAudio)

On desktop distributions (such as Ubuntu 24.04), PipeWire automatically claims USB audio devices upon connection, which may cause arecord to report Device or resource busy. Release the card from PipeWire before running direct ALSA tests:

wpctl set-profile $(wpctl status | grep -i 'bdsound.*\[alsa\]' | grep -o '[0-9]\+' | head -1) 0

4.3 ALSA Virtual Soundcards & Signal Pipeline​

The S2C configuration (/etc/alsa/conf.d/60-bdsound-s2c.conf or /etc/asound.conf) exposes 3 virtual ALSA PCM devices:

Virtual PCM DeviceDirectionFormatRateChannelsDescription
S2C_sendCaptureS16_LE16000 Hz1 (Mono)Processed microphone output with Acoustic Bubble ON (Beamforming + NR + AEC + Spatial Bubble)
S2C_send_bubbles_offCaptureS16_LE16000 Hz1 (Mono)Processed microphone output with Acoustic Bubble OFF (Beamforming + NR + AEC only)
S2C_recvPlaybackS16_LE48000 Hz1 (Mono)Processed far-end signal routed to the dongle speaker

4.4 Command-Line Examples​

A. All-in-One Full-Duplex AEC + Noise Reduction Test​

To evaluate Acoustic Echo Cancellation (AEC), Noise Reduction (NR), and the Acoustic Bubble in full-duplex mode directly from the shell (playing a 48 kHz mono WAV file on S2C_recv while simultaneously capturing the processed microphone stream), run the following one-liner:

# Full-duplex 20s test with Acoustic Bubble ON (S2C_send)
aplay -D S2C_recv -d 20 /path/to/far_end_48kHz_mono.wav & \
arecord -D S2C_send -f S16_LE -c 1 -r 16000 -d 20 /tmp/processed_bubble_on.wav; \
wait

# Full-duplex 20s test with Acoustic Bubble OFF (S2C_send_bubbles_off)
aplay -D S2C_recv -d 20 /path/to/far_end_48kHz_mono.wav & \
arecord -D S2C_send_bubbles_off -f S16_LE -c 1 -r 16000 -d 20 /tmp/processed_bubble_off.wav; \
wait
Testing Without an External WAV File

If you do not have a 48 kHz WAV file on the target board, you can generate the far-end speaker signal on the fly using speaker-test:

speaker-test -D S2C_recv -r 48000 -c 1 -t sine -f 440 -l 0 & SPK_PID=$!; \
arecord -D S2C_send -f S16_LE -c 1 -r 16000 -d 20 /tmp/processed_bubble_on.wav; \
kill $SPK_PID 2>/dev/null; wait $SPK_PID 2>/dev/null

B. Standalone Capture (arecord) and Playback (aplay)​

# Record 20 seconds of processed audio with Acoustic Bubble ENABLED
arecord -D S2C_send -f S16_LE -c 1 -r 16000 -d 20 capture_bubble_on.wav

# Record 20 seconds of processed audio with Acoustic Bubble DISABLED
arecord -D S2C_send_bubbles_off -f S16_LE -c 1 -r 16000 -d 20 capture_bubble_off.wav

# Play a 48 kHz mono WAV file through the S2C speaker pipeline
aplay -D S2C_recv -f S16_LE -c 1 -r 48000 far_end_48kHz_mono.wav

# Record raw 8-channel audio (6 mics + 2 echo reference channels) directly from hardware
arecord -D hw:BdSoundAFE,0 -f S16_LE -c 8 -r 16000 -d 20 raw_8ch.wav

5. Evaluation & Sampling Limitations (Demo Version)​

Demo License Restrictions

The prebuilt bdSound S2C ALSA plugin included in the evaluation/sampling package (v9.0.6513) is governed by the BdSound Developer Demo Agreement and includes built-in evaluation limitations that must be taken into account during testing and acoustic validation.

LimitationBehavior in Evaluation Build (v9.0.6513)Impact on Testing
1. Delayed Processing (10-Second Warm-up)Signal processing (S2C_send and S2C_send_bubbles_off) starts 10 seconds after stream initialization. During t = 0 .. 10 s, the plugin outputs unprocessed passthrough audio.Always run captures for at least 15–20 seconds and evaluate voice enhancement, AEC, and Acoustic Bubble performance only after the 10-second mark.
2. Periodic Audio WatermarkA synthesized voice saying "www dot bdsound dot com" is injected into the capture stream starting 3 seconds after initialization (t ≈ 3.0 .. 4.5 s) and repeated periodically.Ignore the 3.0 .. 4.5 s window during SNR/RMS measurements; do not trigger voice-recognition prompts during the watermark window.
3. Continuous Session LimitProcessing automatically deactivates after approximately 20 minutes of continuous streaming on a single open PCM handle.For long-running tests, close and reopen the ALSA capture stream between runs.
4. Evaluation License ExpiryThe evaluation binaries are time-limited and expire on December 31, 2026.Contact SECO / bdSound for production-licensed binaries without watermarks or startup delays prior to commercial deployment.

Timeline of a Capture Session​


6. Acoustic Validation & Recording Procedure​

To standardize acoustic validation and microphone array characterization during product sampling, follow the test geometry and recording conventions below.

6.1 Test Environment & Physical Setup​

ParameterSpecification
Room EnvironmentQuiet indoor room (low ambient noise floor)
DUT MountingWall-mounted, at least 1.0 m above the floor
Acoustic Bubble Radius0.5 m frontal zone from the center of the array
Playback Device 1 (SOI)Full-range single-way loudspeaker (or human talker) for the Signal of Interest, placed at the same height as the DUT
Playback Device 2 (Interferent)Full-range single-way loudspeaker (or human talker) for competing speech/noise, placed at the same height as the DUT

Loudspeaker Positions & Test Geometry​

  • Pos. 1 (FRONTAL): 1.0 m perpendicular distance in front of the center of the DUT.
  • Pos. 2 (LEFT): 1.0 m to the left of Pos. 1 (at 1.0 m frontal distance from the wall plane).
  • Pos. 3 (RIGHT): 1.0 m to the right of Pos. 1 (at 1.0 m frontal distance from the wall plane).

6.2 Validation Test Matrix​

Test IDDescriptionExecution Procedure
BDS_1AMicrophone characterization — Frontal (Pos. 1)1. Place Playback Device 1 in Pos. 1.
2. Play the reference signal through Playback Device 1.
3. Record on the DUT (ensure recording extends well past the 10 s processing activation delay).
BDS_1BMicrophone characterization — Left (Pos. 2)1. Place Playback Device 1 in Pos. 2.
2. Play the reference signal through Playback Device 1.
3. Record on the DUT.
BDS_1CMicrophone characterization — Right (Pos. 3)1. Place Playback Device 1 in Pos. 3.
2. Play the reference signal through Playback Device 1.
3. Record on the DUT.
BDS_2ATarget + Left Interferer (Pos. 1 + Pos. 2)1. Place Playback Device 1 (SOI) in Pos. 1 and Playback Device 2 (interferent) in Pos. 2.
2. Play the target and interferent signals simultaneously.
3. Record on the DUT.
BDS_2BTarget + Right Interferer (Pos. 1 + Pos. 3)1. Place Playback Device 1 (SOI) in Pos. 1 and Playback Device 2 (interferent) in Pos. 3.
2. Play the target and interferent signals simultaneously.
3. Record on the DUT.

6.3 Required Validation Outputs & Simultaneous Capture (dsnoop)​

For complete validation, three WAV files are required per test run using the naming convention <STREAM>_<TEST_ID>_<DUT_SERIAL>.wav:

  1. SEND_IN_<TEST_ID>_<DUT_SERIAL>.wav: Multichannel raw input of the microphones (16 kHz, S16_LE).
  2. SEND_OUT_<TEST_ID>_<DUT_SERIAL>.wav: Processed mono output from the S2C plugin (16 kHz, S16_LE).
  3. REF_IN_<TEST_ID>_<DUT_SERIAL>.wav: Reference signal sent to the dongle speaker (or extracted from hardware channels 6–7).

Because the ALSA hardware capture device (hw:BdSoundAFE,0) can only be opened once directly, you can capture SEND_IN (raw 8-channel input) and SEND_OUT (processed S2C output) at the exact same time by sharing the hardware capture stream via ALSA dsnoop:

Add the following block to /etc/asound.conf (or a custom ALSA configuration file):

pcm.afe_snoop {
type dsnoop
ipc_key 52016
ipc_perm 0666
slave {
pcm "hw:BdSoundAFE,0"
channels 8
rate 16000
format S16_LE
period_size 512
buffer_size 4096
}
}

pcm.S2C_send_snoop {
type s2c_send
slave.pcm "afe_snoop"
s2c_mode "bargein"
opt_file_path "/etc/s2c_options_Standard.opt"
}

Then run both recordings concurrently:

TEST_ID="BDS_1A"
SERIAL="SN0001"
DURATION=25

arecord -D afe_snoop -f S16_LE -c 8 -r 16000 -d $DURATION "SEND_IN_${TEST_ID}_${SERIAL}.wav" &
sleep 0.3
arecord -D S2C_send_snoop -f S16_LE -c 1 -r 16000 -d $DURATION "SEND_OUT_${TEST_ID}_${SERIAL}.wav" &
wait

7. Troubleshooting​

SymptomCauseSolution
arecord: audio open error: Device or resource busyPipeWire/PulseAudio or another arecord instance is holding hw:BdSoundAFE,0.Release the profile in PipeWire (wpctl set-profile <id> 0) or kill background arecord processes.
[BdSound]E: [PCM S2C Send] I_S2C_suite__send_init failed [err=-8021]Version mismatch between libasound_module_pcm_s2c_*.so and /etc/s2c_options_*.opt.Copy the matching .opt files from the conf/ folder of release 9.0.6513 to /etc/.
[BdSound]W: [S2C] configuration file /etc/s2c_bargein_*.conf not foundMissing .conf tuning files in /etc/.Copy conf/s2c_bargein_*.conf to /etc/.
Channels count non available when opening S2C_sendDongle MCU firmware is older than 1.0.6301 and exposes 6 capture channels instead of 8.Flash MCU firmware 1.0.6323 (2026_07_27_edge_ai_audio_dongle_fw_1.0.6323.7z).
No noise reduction or echo cancellation in a 5-second recordingRecording is shorter than the 10-second demo warm-up delay.Record for at least 15–20 seconds; S2C processing activates at t = 10 s.