pstruebi 2845458d3f chore: add gitignore, documentation, and LC3 conformance test software
- Add .gitignore for Python, virtual environments, testing artifacts, IDE files, and LC3 test outputs including SQAM audio files
- Add AGENTS.md with project context for LC3 implementation testing
- Add LC3.TS.p5.pdf test specification document
- Add LC3 conformance interoperability test software V1.0.8 with script readme and reference binary symlink
2026-02-27 14:56:35 +01:00

LC3 Encoder Qualification

Tests the lc3py encoder from bumble-auracast against the LC3 TS p5 conformance suite. Scope: 15 ENC test cases, no 44.1 kHz (lc3py does not support 44.1 kHz).


1 — System packages

# Enable 32-bit architecture (required for wine32 to run LC3.exe)
sudo dpkg --add-architecture i386
sudo apt-get update

sudo apt-get install -y \
  wine \
  gcc \
  sox \
  libgstreamer1.0-dev \
  libgstreamer-plugins-base1.0-dev \
  libgstreamer-plugins-bad1.0-dev \
  autoconf automake libtool

sudo apt-get install -y wine32

# One-time: initialize a 32-bit Wine prefix (LC3.exe is a 32-bit Windows binary)
WINEARCH=win32 WINEPREFIX=~/.wine32 wineboot

The runner script (run_enc_tests.py) sets WINEARCH=win32 WINEPREFIX=~/.wine32 automatically.


2 — Build gstPEAQ (one-time)

gstPEAQ v0.6.1 is the open-source PEAQ implementation used as the ODG metric tool.

cd /tmp
wget https://github.com/HSU-ANT/gstpeaq/archive/refs/tags/version-0.6.1.tar.gz -O gstpeaq-0.6.1.tar.gz
tar xzf gstpeaq-0.6.1.tar.gz
cd gstpeaq-version-0.6.1

# Patch build system to skip gtk-doc (not needed for the binary)
touch ChangeLog
sed -i 's/^GTK_DOC_CHECK/#GTK_DOC_CHECK/' configure.ac
echo "" > gtk-doc.make
sed -i '81s/CLEANFILES +=/CLEANFILES =/' doc/Makefile.am
sed -i 's/GTK_DOC_CHECK(1.10,--flavour no-tmpl)/: # GTK_DOC_CHECK disabled/' configure

autoreconf -i --force
./configure
make -C src          # build only the binary, skip doc

The binary and plugin will be at:

  • /tmp/gstpeaq-version-0.6.1/src/peaq
  • /tmp/gstpeaq-version-0.6.1/src/.libs/libgstpeaq.so

These paths are already set in conf_lc3ts_p5_enc_10ms.cfg and conf_lc3ts_p5_enc_75ms.cfg. If you build gstPEAQ elsewhere, update peaq_bin in both cfg files.


3 — Set up LC3 reference binary (one-time)

cd /home/pstruebi/repos/lc3_quali
SCRIPT_DIR=LC3_conformance_interoperability_test_software_V1.0.8_2024-07-01/LC3_Conformance_Interoperability_Script
mkdir -p $SCRIPT_DIR/LC3_bin_current
ln -sf $(pwd)/LC3_conformance_interoperability_test_software_V1.0.8_2024-07-01/LC3_Reference_Binary/LC3.exe \
       $SCRIPT_DIR/LC3_bin_current/LC3.exe

4 — Install Python venv

cd /home/pstruebi/repos/lc3_quali
poetry install

5 — Run

poetry run python qualification/run_enc_tests.py

Results are written to qualification/results/DD_MM_YY_HH_MM/:

  • SUMMARY.html — consultant-ready: all 15 TC IDs with PASS/FAIL
  • ENC_*_<ts>.html — detail reports (ODG per SQAM item)
  • conformanceCheck_<ts>.log
  • lc3_conformance_<ts>/ — audio comparison WAVs (ref_ref.wav vs tst_ref.wav)

Test Cases (15 total)

10ms frame duration (7 cases)

Test Case ID kHz kbps Config
LC3/ENC/NB/BV-01-C 8 24 10ms
LC3/ENC/WB/BV-01-C 16 32 10ms
LC3/ENC/SSWB/BV-01-C 24 48 10ms
LC3/ENC/SWB/BV-01-C 32 64 10ms
LC3/ENC/FB/BV-01-C 48 80 10ms
LC3/ENC/FB/BV-02-C 48 96 10ms
LC3/ENC/FB/BV-03-C 48 124 10ms

7.5ms frame duration (8 cases)

Test Case ID kHz kbps Config
LC3/ENC/NB/BV-02-C 8 27.734 7.5ms
LC3/ENC/WB/BV-02-C 16 32 7.5ms
LC3/ENC/SSWB/BV-02-C 24 48 7.5ms
LC3/ENC/SWB/BV-02-C 32 64 7.5ms
LC3/ENC/SWB/BV-03-C 32 61.867 7.5ms
LC3/ENC/FB/BV-07-C 48 80 7.5ms
LC3/ENC/FB/BV-08-C 48 96 7.5ms
LC3/ENC/FB/BV-09-C 48 124.8 7.5ms
Description
No description provided
Readme 1 MiB
Languages
Python 58.9%
C 41.1%