Lyra Versions Save

A Very Low-Bitrate Codec for Speech Compression

v1.3.2

1 year ago

Lyra 1.3.2 is now available. Updating should be a medium priority for most users. This release is a relatively small change. It upgrades from TensorFlow 2.9 to the latest stable 2.11, which produces a ~10% speed improvement due to more modules being supported in XNNPack. The benchmark on the README is also updated to reflect the current bazel build, but note that previously it measured the internal build speed, which was already based on the faster TF 2.12.

Notes

  • Added tests to the github CI actions. This is not complete test coverage, but spans the majority of the code.
  • Bazel 6.0.0, which was just released breaks the build. .bazelversion was added to pin it to 5.3.2. The bazelisk interface can be used to automatically select the correct bazel version.

v1.3.1

1 year ago

Lyra 1.3.1 is now available. Updating should be a low priority for most users. This release contains mostly cosmetic changes due to a directory restructuring. However, for those who are considering submitting PRs, it would be helpful to sync to prevent merge conflicts.

Resolved Issues

  • The directory structure was refactored to remove clutter from the root directory (#90). Note that this will change the target path for most targets.

v1.3.0

1 year ago

Lyra 1.3.0 is now available. This release increases the speed and reduces the storage space of the model. We recommend all users upgrade if they do not need to reuse the earlier versions’ bitstream.

New Features

  • The new model is 43% smaller (TFLite model size) and 20% faster (comparing 1.2.0 to 1.3.0 on Pixel 6 Pro). This is accomplished by storing some weights and performing arithmetic operations in 8-bit integers instead of 32-bit floats. Thanks to quantization aware training, the audio quality for the smaller and faster model remains as good as the previous model – our listening tests show that users have no preference for either this or the previous model. The bitstream, however, is different from the previous model due to the changed weights.

Breaking Changes

  • The 1.3.0 bitstream is incompatible with 1.2.0.

v1.2.0

1 year ago

Lyra V2 (1.2.0) is now available. This release increases the quality and flexibility of the model. We recommend all users upgrade if they do not need to use the V1 bitstream.

New Features

  • Speed is significantly faster (~5x improvement seen on Android devices).
  • The SoundStream-based model produces significantly higher quality speech (when comparing 3kbps V1 to 3.2 kbps V2).
  • Selectable bitrate (3200, 6000, 9200 bits per second).
  • Codec latency reduced from 100 ms to 20 ms.
  • Mac and Windows support (in addition to continuing support for Linux and Android). Note: we have verified that these build, and run correctly, but have numerous compilation and linker warnings (Windows in particular due to MSVC/gcc mismatch). These issues and support for other platforms like iOS can be addressed by modifying the .bazelrc file. We welcome community contributions for this.
  • More portable code: The TensorFlow Lite model in the .tflite files can be used in other platforms. The TFLite runtime is optimized for individual platforms, replacing the need to write platform specific assembly.

Breaking Changes

  • The V2 bitstream is incompatible with V1.
  • Bitrate can now be set dynamically on the encoder using the new set_bitrate() API. Likewise, the bitrate parameter of the decoder was dropped, since it will decode each packet correctly, regardless of bitrate.
  • DecodePacketLoss() API was folded into DecodeSamples(), which now switches to Packet Loss Concealment (PLC) when needed.
  • lyra_encoder.h API changes
    • Addition of set_bitrate()
    • Encode() returns std::optional instead of absl::optional
  • lyra_decoder.h API changes
    • Removal of bitrate as an argument to Create()
    • Removal of DecodePacketLoss()
    • DecodeSamples() returns std::optional instead of absl::optional
    • Removal of bitrate()

v0.0.2

2 years ago

Lyra version 0.0.2 is now available on GitHub. The main improvement of this version is the open-source release of the sparse_matmul library code, which was co-developed by Google and DeepMind. That means no more pre-compiled “.so” dynamic library binaries and no more restrictions on which toolchain to use, which opens up the door to port Lyra onto different platforms. The full list of features and fixes include:

  • Release sparse_matmul library code and remove pre-compiled dynamic library binaries.
  • Add support for the Bazel default gcc toolchain on linux, and make this the default instead of the clang toolchain.
  • Fix noise bursts at the beginning of output audio files.
  • Abstract out UnitFloatToInt16Scalar, UnitFloatToInt16 and Int16ToUnitFloat functions.
  • Provide operator<< to unique_ptr<LayerWrapper> to be used with CHECK() macros.
  • Fix float distribution compatibility in benchmark_decode_lib.

v0.0.1

2 years ago

First release