如何集成谷歌lyra 编解码器?

  1. 集成版本:https://github.com/google/lyra/archive/refs/tags/v1.3.2.zip
  2. wget https://github.com/google/lyra/archive/refs/tags/v1.3.2.zip
  3. unzip v1.3.2.zip  , cd lyra-1.3.2
  4. 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"],
)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值