# Low Complexity Communication Codec (LC3) The LC3 is an efficient low latency audio codec. [_Low Complexity Communication Codec_](https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=502107&vId=542963) ## Overview The directory layout is as follows : - include: Library interface - src: Source files - tools: Standalone encoder/decoder tools - test: Python implentation, used as reference for unit testing - build: Building outputs - bin: Compilation output ## How to build The default toolchain used is GCC. Invoke `make` to build the library. ```sh $ make -j ``` Compiled library `liblc3.a` will be found in `bin` directory. #### Cross compilation The cc, as, ld and ar can be selected with respective Makefile variables `CC`, `AS`, `LD` and `AR`. The `AS` and `LD` selections are optionnal, and fallback to `CC` selection when not defined. The `LIBC` must be set to `bionic` for android cross-compilation. This switch prevent link with `pthread` and `rt` libraries, that is included in the bionic libc. Following example build for android, using NDK toolset. ```sh $ make -j CC=path_to_android_ndk_prebuilt/toolchain-prefix-clang LIBC=bionic ``` Compiled library will be found in `bin` directory. ## Tools Tools can be all compiled, while involking `make` as follows : ```sh $ make tools ``` The standalone encoder `elc3` take a `wave` file as input and encode it according given parameter. The LC3 binary file format used is the non standard format described by the reference encoder / decoder tools. The standalone decoder `dlc3` do the inverse operation. Refer to `elc3 -h` or `dlc3 -h` for options. Note that `elc3` output bitstream to standard output when output file is omitted. On the other side `dlc3` read from standard input when input output file are omitted. In such way you can easly test encoding / decoding loop with : ```sh $ ./elc3 -b | ./dlc3 > ``` Adding Linux `aplay` tools, you will be able to instant hear the result : ```sh $ ./elc3 -b | ./dlc3 | aplay ``` ## Test A python implementation of the encoder is provided in `test` diretory. The C implementation is unitary validated against this implementation and intermediate values given in Appendix C of the specification. #### Prerequisite ```sh # apt install python3 python3-dev python3-pip $ pip3 install scipy numpy ``` #### Running test suite ```sh $ make test ``` ## Conformance The proposed encoder and decoder implementation have been fully tested and validated. For more detail on conformance, refer to [_Bluetooth Conformance Documents and scripts_](https://www.bluetooth.com/specifications/specs/low-complexity-communication-codec-1-0/) ## Listening Test The codec was [_here_](https://hydrogenaud.io/index.php/topic,122575.0.html) subjectively evaluated in a blind listening test. ## Meson build system Meson build system is also available to build and install lc3 codec in Linux environment. ```sh $ meson build $ cd build $ ninja $ sudo ninja install ```