- 集成版本:https://github.com/google/lyra/archive/refs/tags/v1.3.2.zip
- wget https://github.com/google/lyra/archive/refs/tags/v1.3.2.zip
- unzip v1.3.2.zip , cd lyra-1.3.2
- workspace 内部分三方库可能会拉取失败:
常见踩坑问题:
1、比如Tensorflow工程太大拉取超时,解决方法,在自己的服务器上开vpn, 或者使用 http_archive 替换git_repository 进行拉取
2、Maven 工具拉取超时,解决方法,如果只是构建linux 集成so,可以直接注释掉, Maven是构建安卓工程才会用到的依赖,或者开vpn
3、bazel 、python、gcc版本不对,个人使用的bazel版本:5.3.2、 gcc版本:8.3.1、
python2版本:2.7、python3版本:3.6
个人修改后可以成功构建的workspace:
########################
# Platform Independent #
########################
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository", "new_git_repository")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# GoogleTest/GoogleMock framework.
git_repository(
name = "com_google_googletest",
remote = "https://github.com/google/googletest.git",
tag = "release-1.10.0",
)
# Google benchmark.
http_archive(
name = "com_github_google_benchmark",
urls = ["https://github.com/google/benchmark/archive/bf585a2789e30585b4e3ce6baf11ef2750b54677.zip"], # 2020-11-26T11:14:03Z
strip_prefix = "benchmark-bf585a2789e30585b4e3ce6baf11ef2750b54677",
sha256 = "2a778d821997df7d8646c9c59b8edb9a573a6e04c534c01892a40aa524a7b68c",
)
# proto_library, cc_proto_library, and java_proto_library rules implicitly
# depend on @com_google_protobuf for protoc and proto runtimes.
# This statement defines the @com_google_protobuf repo.
git_repository(
name = "com_google_protobuf",
remote = "https://github.com/protocolbuffers/protobuf.git",
tag = "v3.15.4",
)
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
# Google Abseil Libs
git_repository(
name = "com_google_absl",
remote = "https://github.com/abseil/abseil-cpp.git",
tag = "20211102.0",
# Remove after https://github.com/abseil/abseil-cpp/issues/326 is solved.
patches = [
"@//patches:com_google_absl_f863b622fe13612433fdf43f76547d5edda0c93001.diff"
],
patch_args = [
"-p1",
]
)
# Filesystem
# The new_* prefix is used because it is not a bazel project and there is
# no BUILD file in that repo.
FILESYSTEM_BUILD = """
cc_library(
name = "filesystem",
hdrs = glob(["include/ghc/*"]),
visibility = ["//visibility:public"],
)
"""
new_git_repository(
name = "gulrak_filesystem",
remote = "https://github.com/gulrak/filesystem.git",
tag = "v1.3.6",
build_file_content = FILESYSTEM_BUILD
)
# Audio DSP
git_repository(
name = "com_google_audio_dsp",
# TODO(b/231448719) use main google repo after merging PR for TF eigen compatibility.
remote = "https://github.com/mchinen/multichannel-audio-tools.git",
# There are no tags for this repo, we are synced to bleeding edge.
commit = "14a45c5a7c965e5ef01fe537bd816ce10a247813",
repo_mapping = {
"@com_github_glog_glog" : "@com_google_glog",
"@eigen3": "@eigen_archive"
}
)
# Transitive dependencies of Audio DSP.
# Note: eigen is used by Audio DSP, but provided through tensorflow workspace functions.
http_archive(
name = "fft2d",
build_file = "fft2d.BUILD",
sha256 = "ada7e99087c4ed477bfdf11413f2ba8db8a840ba9bbf8ac94f4f3972e2a7cec9",
urls = [
"http://www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz",
],
)
# Google logging
git_repository(
name = "com_google_glog",
remote = "https://github.com/google/glog.git",
branch = "master"
)
# Dependency for glog
git_repository(
name = "com_github_gflags_gflags",
remote = "https://github.com/mchinen/gflags.git",
branch = "android_linking_fix"
)
# Bazel/build rules
http_archive(
name = "bazel_skylib",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
],
sha256 = "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44",
)
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()
load("//:android_configure.bzl", "android_configure")
android_configure(name = "local_config_android")
load("@local_config_android//:android_configure.bzl", "android_workspace")
android_workspace()
http_archive(
name = "rules_android",
sha256 = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806",
strip_prefix = "rules_android-0.1.1",
urls = ["https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"],
)
# Google Maven Repository
# See https://github.com/android/android-test/blob/master/WORKSPACE for examples
# of importing android deps.
# The specific versions can be found in:
# https://github.com/android/android-test/blob/master/build_extensions/axt_versions.bzl
# and
# https://developer.android.com/jetpack/androidx/releases/
# This allows us to use "@maven//some_android_package" deps for imports.
RULES_JVM_EXTERNAL_TAG = "4.0"
RULES_JVM_EXTERNAL_SHA = "31701ad93dbfe544d597dbe62c9a1fdd76d81d8a9150c2bf1ecf928ecdf97169"
http_archive(
name = "rules_jvm_external",
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
sha256 = RULES_JVM_EXTERNAL_SHA,
url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = [
"androidx.annotation:annotation:1.2.0",
"androidx.appcompat:appcompat:1.3.1",
"androidx.core:core:1.6.0",
"androidx.constraintlayout:constraintlayout:2.1.1"
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
# Begin Tensorflow WORKSPACE subset required for TFLite
git_repository(
name = "org_tensorflow",
remote = "https://github.com/tensorflow/tensorflow.git",
# Below is reproducible and equivalent to `tag = "v2.11.0"`
commit = "d5b57ca93e506df258271ea00fc29cf98383a374",
shallow_since = "1668561432 -0800"
)
# Check bazel version requirement, which is stricter than TensorFlow's.
load("@bazel_skylib//lib:versions.bzl", "versions")
versions.check("3.7.2")
# TF WORKSPACE Loading functions
# This section uses a subset of the tensorflow WORKSPACE loading by reusing its contents.
# There are four workspace() functions create repos for the dependencies.
# TF's loading is very complicated, and we only need a subset for TFLite.
# If we use the full TF loading sequence, we also run into conflicts and errors on some platforms.
load("@org_tensorflow//tensorflow:workspace3.bzl", "workspace")
workspace()
load("@org_tensorflow//tensorflow:workspace2.bzl", workspace2 = "workspace")
workspace2()
# End Tensorflow WORKSPACE subset required for TFLite
5. 构建集成so:
1、由于lyra 使用bazel 系统构建,bazel是流氓工具,用cc_library构建的库,只对它的 workspace可见,而且集成方,也需要使用bazel 系统构建自己的项目,所以如果通过cmake直接集成他BUILD文件内生成的.a、.so是行不通的,会报很多函数找不到实现
解决方法:自己写个封装层(framework),把lyra_encoder、lyra_decoder集成进去,然后使用bazel 的cc_binary生成so,导出自己封装的函数,就可以在bazel以外的系统调用了
我的BUILD文件内最终生成用于集成的liblyra.so
cc_binary(
name = "liblyra.so", #mylib是头文件的名字
srcs = [
"封装层.cpp",
"封装层.h",
"logging.h", #因为我的过程也用到glog,lyra里也依赖glog,所以直接导出lyra里的glog使用,无需再次集成glog
],
deps = [
":lyra_encoder", #依赖,注意要把头文件和源文件中include的头文件所在的BUILD包都加进去
":lyra_decoder",
],
linkopts = ["-lstdc++", #链接时候的命令
],
copts = ["-std=c++17"],
linkstatic = True,
linkshared=True, # 由这个属性指定生成动态库目标文件
visibility = ["//visibility:public"],
)
构建命令:
在lyra-1.3.2 的根目录(workspace同级目录)执行
bazel build -c opt lyra:liblyra.so
个人修改后可成功构建的完整BUILD文件:
# [internal] load cc_fuzz_target.bzl
# [internal] load cc_proto_library.bzl
# [internal] load android_cc_test:def.bzl
package(default_visibility = ["//:__subpackages__"])
# To run all cc_tests in this directory:
# bazel test //lyra:all
# [internal] Command to run dsp_utils_android_test.
# [internal] Command to run lyra_integration_android_test.
exports_files(
srcs = [
"lyra_benchmark_lib.cc",
"lyra_benchmark_lib.h",
"lyra_components.h",
"lyra_config.h",
"lyra_decoder.cc",
"lyra_decoder.h",
"lyra_encoder.cc",
"lyra_encoder.h",
"封装层.cpp",
"封装层.h",
"logging.h",
"model_coeffs/lyragan.tflite",
"model_coeffs/quantizer.tflite",
"model_coeffs/soundstream_encoder.tflite",
],
)
config_setting(
name = "android_config",
values = {"crosstool_top": "//external:android/crosstool"},
)
cc_library(
name = "architecture_utils",
hdrs = ["architecture_utils.h"],
deps = ["@gulrak_filesystem//:filesystem"],
)
cc_binary(
name = "liblyra.so", #导出用于集成的liblyra.so
srcs = [
"封装层.cpp",
"封装层.h",
"logging.h", #因为我的工程也用到glog,lyra里也依赖glog,所以直接导出lyra里的glog使用,无需再次集成glog
],
deps = [
":lyra_encoder", #依赖,注意要把头文件和源文件中include的头文件所在的BUILD包都加进去
":lyra_decoder",
],
linkopts = ["-lstdc++", #链接时候的命令
],
copts = ["-std=c++17"],
linkstatic = True,
linkshared=True, # 由这个属性指定生成动态库目标文件
visibility = ["//visibility:public"],
)
cc_library(
name = "lyra_benchmark_lib",
srcs = ["lyra_benchmark_lib.cc"],
hdrs = ["lyra_benchmark_lib.h"],
deps = [
":architecture_utils",
":dsp_utils",
":feature_extractor_interface",
":generative_model_interface",
":lyra_components",
":lyra_config",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/time",
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:signal_vector_util",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "feature_estimator_interface",
hdrs = [
"feature_estimator_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "zero_feature_estimator",
hdrs = [
"zero_feature_estimator.h",
],
deps = [
":feature_estimator_interface",
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "generative_model_interface",
hdrs = [
"generative_model_interface.h",
],
deps = [
"@com_google_glog//:glog",
],
)
cc_library(
name = "resampler_interface",
hdrs = [
"resampler_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "feature_extractor_interface",
hdrs = [
"feature_extractor_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "lyra_decoder_interface",
hdrs = [
"lyra_decoder_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "lyra_encoder_interface",
hdrs = [
"lyra_encoder_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "vector_quantizer_interface",
hdrs = [
"vector_quantizer_interface.h",
],
deps = [
],
)
cc_library(
name = "lyra_gan_model",
srcs = [
"lyra_gan_model.cc",
],
hdrs = [
"lyra_gan_model.h",
],
data = ["model_coeffs/lyragan.tflite"],
deps = [
":dsp_utils",
":generative_model_interface",
":tflite_model_wrapper",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "lyra_decoder",
srcs = [
"lyra_decoder.cc",
],
hdrs = [
"lyra_decoder.h",
],
visibility = ["//visibility:public"],
deps = [
":buffered_filter_interface",
":buffered_resampler",
":comfort_noise_generator",
":feature_estimator_interface",
":generative_model_interface",
":lyra_components",
":lyra_config",
":lyra_decoder_interface",
":noise_estimator",
":noise_estimator_interface",
":vector_quantizer_interface",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/types:span",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "comfort_noise_generator",
srcs = [
"comfort_noise_generator.cc",
],
hdrs = [
"comfort_noise_generator.h",
],
deps = [
":dsp_utils",
":generative_model_interface",
":log_mel_spectrogram_extractor_impl",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/random",
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:number_util",
"@com_google_audio_dsp//audio/dsp/mfcc",
"@com_google_audio_dsp//audio/dsp/spectrogram:inverse_spectrogram",
"@com_google_glog//:glog",
],
)
cc_library(
name = "lyra_encoder",
srcs = [
"lyra_encoder.cc",
],
hdrs = [
"lyra_encoder.h",
],
visibility = ["//visibility:public"],
deps = [
":feature_extractor_interface",
":lyra_components",
":lyra_config",
":lyra_encoder_interface",
":noise_estimator",
":noise_estimator_interface",
":packet",
":packet_interface",
":resampler",
":resampler_interface",
":vector_quantizer_interface",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/types:span",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "noise_estimator",
srcs = [
"noise_estimator.cc",
],
hdrs = [
"noise_estimator.h",
],
deps = [
":log_mel_spectrogram_extractor_impl",
":noise_estimator_interface",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:signal_vector_util",
"@com_google_glog//:glog",
],
)
cc_library(
name = "noise_estimator_interface",
hdrs = [
"noise_estimator_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "packet_loss_model_interface",
hdrs = ["packet_loss_model_interface.h"],
deps = [],
)
cc_library(
name = "fixed_packet_loss_model",
srcs = [
"fixed_packet_loss_model.cc",
],
hdrs = [
"fixed_packet_loss_model.h",
],
deps = [":packet_loss_model_interface"],
)
cc_library(
name = "gilbert_model",
srcs = [
"gilbert_model.cc",
],
hdrs = [
"gilbert_model.h",
],
deps = [
":packet_loss_model_interface",
"@com_google_absl//absl/memory",
"@com_google_glog//:glog",
],
)
cc_library(
name = "lyra_config",
srcs = ["lyra_config.cc"],
hdrs = ["lyra_config.h"],
deps = [
":lyra_config_cc_proto",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/status",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
proto_library(
name = "lyra_config_proto",
srcs = ["lyra_config.proto"],
)
cc_proto_library(
name = "lyra_config_cc_proto",
deps = [":lyra_config_proto"],
)
cc_library(
name = "lyra_components",
srcs = [
"lyra_components.cc",
],
hdrs = [
"lyra_components.h",
],
deps = [
":feature_estimator_interface",
":feature_extractor_interface",
":generative_model_interface",
":lyra_gan_model",
":packet",
":packet_interface",
":residual_vector_quantizer",
":soundstream_encoder",
":vector_quantizer_interface",
":zero_feature_estimator",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "log_mel_spectrogram_extractor_impl",
srcs = [
"log_mel_spectrogram_extractor_impl.cc",
],
hdrs = [
"log_mel_spectrogram_extractor_impl.h",
],
deps = [
":feature_extractor_interface",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:number_util",
"@com_google_audio_dsp//audio/dsp/mfcc",
"@com_google_audio_dsp//audio/dsp/spectrogram",
"@com_google_glog//:glog",
],
)
cc_library(
name = "soundstream_encoder",
srcs = [
"soundstream_encoder.cc",
],
hdrs = [
"soundstream_encoder.h",
],
data = ["model_coeffs/soundstream_encoder.tflite"],
deps = [
":dsp_utils",
":feature_extractor_interface",
":tflite_model_wrapper",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "residual_vector_quantizer",
srcs = [
"residual_vector_quantizer.cc",
],
hdrs = [
"residual_vector_quantizer.h",
],
data = [
"model_coeffs/quantizer.tflite",
],
deps = [
":tflite_model_wrapper",
":vector_quantizer_interface",
"@com_google_absl//absl/memory",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
],
)
cc_library(
name = "packet_interface",
hdrs = [
"packet_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "packet",
hdrs = ["packet.h"],
deps = [
":packet_interface",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_glog//:glog",
],
)
cc_library(
name = "buffered_filter_interface",
hdrs = ["buffered_filter_interface.h"],
)
cc_library(
name = "buffered_resampler",
srcs = ["buffered_resampler.cc"],
hdrs = ["buffered_resampler.h"],
deps = [
":buffered_filter_interface",
":resampler",
":resampler_interface",
"@com_google_absl//absl/memory",
"@com_google_glog//:glog",
],
)
cc_test(
name = "buffered_resampler_test",
srcs = ["buffered_resampler_test.cc"],
deps = [
":buffered_resampler",
":lyra_config",
":resampler_interface",
"//lyra/testing:mock_resampler",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "preprocessor_interface",
hdrs = [
"preprocessor_interface.h",
],
deps = [
"@com_google_absl//absl/types:span",
],
)
cc_library(
name = "no_op_preprocessor",
hdrs = [
"no_op_preprocessor.h",
],
deps = [
":preprocessor_interface",
"@com_google_absl//absl/types:span",
],
)
cc_test(
name = "no_op_preprocessor_test",
size = "small",
srcs = ["no_op_preprocessor_test.cc"],
deps = [
":no_op_preprocessor",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
],
)
cc_binary(
name = "lyra_benchmark",
srcs = [
"lyra_benchmark.cc",
],
linkopts = select({
":android_config": ["-landroid"],
"//conditions:default": [],
}),
deps = [
":lyra_benchmark_lib",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/flags:parse",
"@com_google_absl//absl/flags:usage",
"@com_google_absl//absl/strings",
],
)
cc_test(
name = "lyra_decoder_test",
size = "large",
srcs = ["lyra_decoder_test.cc"],
data = [":tflite_testdata"],
shard_count = 8,
deps = [
":buffered_filter_interface",
":buffered_resampler",
":dsp_utils",
":feature_estimator_interface",
":generative_model_interface",
":lyra_components",
":lyra_config",
":lyra_decoder",
":packet_interface",
":resampler",
":vector_quantizer_interface",
"//lyra/testing:mock_generative_model",
"//lyra/testing:mock_noise_estimator",
"//lyra/testing:mock_vector_quantizer",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "comfort_noise_generator_test",
size = "small",
srcs = ["comfort_noise_generator_test.cc"],
deps = [
":comfort_noise_generator",
":dsp_utils",
":log_mel_spectrogram_extractor_impl",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "lyra_gan_model_test",
srcs = ["lyra_gan_model_test.cc"],
deps = [
":lyra_config",
":lyra_gan_model",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "lyra_integration_test",
size = "small",
timeout = "long",
srcs = ["lyra_integration_test.cc"],
data = [
":tflite_testdata",
"//lyra/testdata:sample1_16kHz.wav",
"//lyra/testdata:sample1_32kHz.wav",
"//lyra/testdata:sample1_48kHz.wav",
"//lyra/testdata:sample1_8kHz.wav",
],
shard_count = 4,
deps = [
":dsp_utils",
":log_mel_spectrogram_extractor_impl",
":lyra_config",
":lyra_decoder",
":lyra_encoder",
":wav_utils",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "noise_estimator_test",
size = "small",
srcs = ["noise_estimator_test.cc"],
deps = [
":comfort_noise_generator",
":dsp_utils",
":log_mel_spectrogram_extractor_impl",
":lyra_config",
":noise_estimator",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "fixed_packet_loss_model_test",
size = "small",
srcs = ["fixed_packet_loss_model_test.cc"],
deps = [
":fixed_packet_loss_model",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "gilbert_model_test",
size = "small",
srcs = ["gilbert_model_test.cc"],
deps = [
":gilbert_model",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "log_mel_spectrogram_extractor_impl_test",
size = "small",
srcs = ["log_mel_spectrogram_extractor_impl_test.cc"],
deps = [
":log_mel_spectrogram_extractor_impl",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
],
)
cc_binary(
name = "log_mel_spectrogram_extractor_impl_benchmark",
testonly = 1,
srcs = ["log_mel_spectrogram_extractor_impl_benchmark.cc"],
deps = [
":log_mel_spectrogram_extractor_impl",
"@com_github_google_benchmark//:benchmark",
"@com_github_google_benchmark//:benchmark_main",
"@com_google_absl//absl/random",
"@com_google_absl//absl/types:span",
],
)
cc_test(
name = "soundstream_encoder_test",
srcs = ["soundstream_encoder_test.cc"],
deps = [
":lyra_config",
":soundstream_encoder",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "lyra_encoder_test",
size = "small",
srcs = ["lyra_encoder_test.cc"],
data = [":tflite_testdata"],
shard_count = 8,
deps = [
":feature_extractor_interface",
":lyra_config",
":lyra_encoder",
":noise_estimator_interface",
":packet",
":resampler_interface",
":vector_quantizer_interface",
"//lyra/testing:mock_feature_extractor",
"//lyra/testing:mock_noise_estimator",
"//lyra/testing:mock_resampler",
"//lyra/testing:mock_vector_quantizer",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "residual_vector_quantizer_test",
size = "small",
srcs = [
"residual_vector_quantizer_test.cc",
],
deps = [
":log_mel_spectrogram_extractor_impl",
":lyra_config",
":residual_vector_quantizer",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "packet_test",
size = "small",
srcs = ["packet_test.cc"],
deps = [
":packet",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "resampler",
srcs = [
"resampler.cc",
],
hdrs = ["resampler.h"],
deps = [
":dsp_utils",
":resampler_interface",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:resampler_q",
"@com_google_glog//:glog",
],
)
cc_test(
name = "resampler_test",
size = "small",
srcs = ["resampler_test.cc"],
deps = [
":lyra_config",
":resampler",
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:signal_vector_util",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "dsp_utils",
srcs = [
"dsp_utils.cc",
],
hdrs = ["dsp_utils.h"],
deps = [
"@com_google_absl//absl/types:span",
"@com_google_audio_dsp//audio/dsp:signal_vector_util",
"@com_google_glog//:glog",
],
)
cc_library(
name = "wav_utils",
srcs = [
"wav_utils.cc",
],
hdrs = ["wav_utils.h"],
deps = [
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_audio_dsp//audio/dsp/portable:read_wav_file",
"@com_google_audio_dsp//audio/dsp/portable:write_wav_file",
],
)
cc_library(
name = "tflite_model_wrapper",
srcs = [
"tflite_model_wrapper.cc",
],
hdrs = [
"tflite_model_wrapper.h",
],
deps = [
"@com_google_absl//absl/memory",
"@com_google_absl//absl/types:span",
"@com_google_glog//:glog",
"@gulrak_filesystem//:filesystem",
"@org_tensorflow//tensorflow/lite:framework",
"@org_tensorflow//tensorflow/lite/delegates/xnnpack:xnnpack_delegate",
"@org_tensorflow//tensorflow/lite/kernels:builtin_ops",
],
)
cc_test(
name = "wav_utils_test",
size = "small",
srcs = ["wav_utils_test.cc"],
data = [
"//lyra/testdata:invalid.wav",
"//lyra/testdata:sample1_16kHz.wav",
],
deps = [
":wav_utils",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
cc_test(
name = "dsp_utils_test",
size = "small",
srcs = ["dsp_utils_test.cc"],
deps = [
":dsp_utils",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "tflite_model_wrapper_test",
srcs = ["tflite_model_wrapper_test.cc"],
data = ["model_coeffs/lyragan.tflite"],
deps = [
":tflite_model_wrapper",
"@com_google_absl//absl/types:span",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
"@org_tensorflow//tensorflow/lite:framework",
],
)
cc_test(
name = "lyra_config_test",
srcs = ["lyra_config_test.cc"],
data = [":tflite_testdata"],
deps = [
":lyra_config",
":lyra_config_cc_proto",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/status",
"@com_google_googletest//:gtest_main",
"@gulrak_filesystem//:filesystem",
],
)
filegroup(
name = "tflite_testdata",
data = glob([
"model_coeffs/*",
]),
)
filegroup(
name = "android_example_assets",
srcs = glob([
"model_coeffs/*.tflite",
]) + ["model_coeffs/lyra_config.binarypb"],
)