语音压缩编解码器:lyra

语音压缩编解码器:lyra

New Lyra 是 Google 开源的超低比特率,却拥有超高语音质量的编解码器,即便在很糟糕的网络情况下,lyra 也能让你有流畅的语音体验。Lyra 编解码器的基本架构非常简单,它每隔 40ms 从语音中提取语音特征,然后将其压缩以 3kbps 的比特率进行传输。而这些特征本身是对数梅尔声谱图,代表了不同频段语音能力的数字列表。

https://github.com/google/lyra
Lyra编码器基础环境搭建
https://blog.csdn.net/qq_36959443/article/details/116136965

1

为了使通用的最佳编解码器普遍可用,我们开放了Lyra的源代码,使其他开发人员可以为其通信应用程序提供支持,并朝着强大的新方向发展Lyra。此版本提供了开发人员使用Lyra进行音频编码和解码所需的工具,Lyra已针对64位ARM安卓平台进行了优化。我们希望与社区一起扩展此代码库并开发对其他平台的改进和支持。

01 Lyra的体系结构

Lyra的体系结构分为编码器和解码器两部分。当有人在电话里讲话时,编码器会从他们的语音中捕获独特的属性。这些语音属性(也称为特征)以40ms的块提取,然后压缩并通过网络发送。解码器的工作是将功能转换回可以在听众的电话扬声器上播放的音频波形,通过生成模型将特征解码回波形。生成模型是一种特殊类型的机器学习模型,非常适合从有限的功能中重新创建完整的音频波形。Lyra架构与传统的音频编解码器非常相似,传统的音频编解码器已经成为互联网通信的骨干力量,已有数十年的历史了。这些传统的编解码器基于数字信号处理(DSP)技术,而Lyra的主要优势来自生成模型重建高质量语音信号的能力。

02 Lyra对未来音频的影响

在过去十年中,尽管移动网络持续稳步发展,但移动设备运算能力的爆炸性增长依然超过了可靠的高速无线基础架构的处理能力。对于存在这种反差的地区,尤其是发展中国家,下一个十亿互联网用户将上网,这种技术将使人们之间的联系更加紧密的希望仍然渺茫。即使在连接高度可靠的区域,异地工作和远程办公的出现也进一步限制了移动数据的限制。虽然Lyra可以将原始音频压缩到3kbps的质量,从而与其他编解码器(例如Opus)相比质量不错,但它的目标不是成为一个完整的替代方案,而是可以在这种情况下节省有意义的带宽。

这些趋势为Lyra提供了动力,也是我们的开放源代码库专注于其实时语音通信潜力的原因。我们认为还有其他应用,Lyra可能特别适合,例如,存档大量语音,通过利用计算便宜的Lyra编码器节省电池,缓解紧急情况下,许多人同时打电话的网络拥塞。我们很高兴看到开源社区以Lyra闻名于世,以提出更独特,更具影响力的应用程序。

03 Lyra的开源版本

Lyra代码使用C++编写,以实现速度,效率和互操作性,并使用带有Abseil的Bazel构建框架和用于全面单元测试的GoogleTest框架。核心API提供了用于在文件和数据包级别进行编码和解码的接口。还提供了完整的信号处理工具链,其中包括各种滤波器和变换。我们的示例应用程序与Android NDK集成在一起,以展示如何将本机Lyra代码集成到基于Java的android应用程序中。我们还提供了运行Lyra所需的权重和矢量量化器。

我们今天将Lyra作为Beta版本发布是因为我们希望使开发人员能够获得尽快的反馈。因此,随着开发的深入,API和比特流很有可能会发生变化。除数学内核外,所有运行Lyra的代码均根据Apache许可开放源代码,为此提供了共享库,直到我们可以在更多平台上实现完全开放的解决方案为止。既然Lyra是开源的,我们期待看到人们对Lyra的处理。在GitHub上查看代码和演示,让我们知道您的想法以及打算如何使用它!

文 / Andrew Storus & Michael Chinen - Chrome
https://opensource.googleblog.com/2021/04/lyra-enabling-voice-calls-for-next-billion-users.html

2

3kbps也能清晰通话的神器Lyra,开源了!

Lyra是谷歌公司推出的一款不惧低带宽的音频编解码器,用来实现随时随地高质量通话。

3kbps是什么概念?

换算成生活中常见的单位,等于0.375KB/s。

对比来看更加直观,Skype官网给出的通话最低速度是30kbps,带宽要求整整高出了10倍。

Lyra利用机器学习模型,将原始音频压缩到3kbps,即使没有高速网络,也能得到自然清晰的语音。

它的架构与传统的编解码器类似,分为编码器和解码器两部分:

在这里插入图片描述
编码器以40毫秒为单位,从语音中提取特征,进行压缩后通过网络传输。

解码器利用机器学习模型,能使用最少的数据量重建语音,将特征转换成完整的音频波形,以进行播放。

带宽要求低、效果更好

在Lyra之前,音频编解码器的比特率越低,语音的清晰度就越差,并且机械感越重。

传统的音频编解码器使用的是数字信号处理技术,而Lyra则依赖其强大的信号重建能力。

由于Lyra无需逐个处理信号,因此无需高带宽,而且在保持低比特率的同时,还能提供高质量的音频输出。

谷歌还使用Lyra与Opus、Speex,在6kbps和3kbps的情况下,对同一音频的压缩质量进行对比测试。

结果显示:

在3kbps的情况下,Lyra性能优于现有的其他编解码器;

在8kbps的情况下,其性能优于Opus,同时降低了超过60%的带宽;

甚至,Lyra在3kbps情况下的语音清晰度,也优于6kbps情况下的Opus。

谷歌公司认为Lyra可能有广泛的应用前景,比如:降低音频文件大小,以存储大量语音;节省手机电量;以及缓解网络拥堵等。

已在GitHub开源

现在,Lyra已经在GitHub上开源

Lyra使用Bazel构建框架,并且使用C++编写代码,以保证速度、效率和可操作性。

这一版本支持用户在Linux上开发和调试,还针对64位ARM Android平台进行了性能优化,使它不仅能在云服务器上运行,而且还可以在手机上实时运行和训练。

此外,Lyra还为开发人员提供了编码和解码所需的工具。

谷歌工程师Andrew Storus和Michael Chinen表示:

“很高兴看到开源社区的创造力能体现在Lyra上,以开发更多独特和有影响力的应用。”

感兴趣的读者可戳下方链接了解详情。

1
sudo apt install vim
export PATH=$PATH:/home/jack/bin
wget https://github.com/bazelbuild/bazel/releases/download/4.0.0/bazel-4.0.0-installer-linux-x86_64.sh
wget https://github.com/google/lyra/archive/refs/tags/v0.0.2.tar.gz
2
sudo apt-get install sox
sudo apt-get install sox libsox-fmt-all
play *mp3
3
  111  wget https://raw.githubusercontent.com/the0demiurge/CharlesScripts/master/charles/bin/ssr
  112  ls
  113  cat ssr 
  114  ls
  115  sudo mv ssr /usr/local/bin
  116  sudo chmod 766 /usr/local/bin/ssr
  117  ssr install
  118  ssr config
  119  sudo apt install jq
  120  sudo apt install curl
  121  ssr start
  122  ls
  123  cd lyra-0.0.2/
  124  ls
  125  bazel build -c opt :encoder_main
  126  ls
  127  cd testing/
  128  ls
  129  cd ..
  130  ls
  131  cd testdata/
  132  ls
  133  cd ..
  134  cd ~
  135  mkdir temp
  136  cd work/
  137  cd wo
  138  cd work
  139  ls
  140  mkdir temp
  141  cd temp/
  142  pwd
  143  cd ..
  144  ls
  145  cd lyra-0.0.2/
  146  bazel-bin/encoder_main --model_path=wavegru --output_dir=/home/jack/work/temp --input_path=testdata/16khz_sample_000001.wav
  147  cd ..
  148  cd temp/
  149  ls
  150  ls -l 16khz_sample_000001.lyra 
  151  ls -lh 16khz_sample_000001.lyra 
  152  cp ../lyra-0.0.2/testdata/16khz_sample_000001.wav .
  153  ls
  154  ls -lh 
  155  cd ..
  156  cd lyra-0.0.2/
  157  ls
  158  bazel build -c opt :decoder_main
  159  bazel-bin/decoder_main  --model_path=wavegru --output_dir=$HOME/temp/ --encoded_path=$HOME/temp/16khz_sample_000001.lyra
  160  bazel-bin/decoder_main  --model_path=wavegru --output_dir=$HOME/temp/ --encoded_path=/home/jack/work/temp/16khz_sample_000001.lyra
  161  ls
  162  cd ..
  163  ls
  164  cd temp/
  165  ls
  166  ls -lh *
  167  cp 16khz_sample_000001.wav old_16khz_sample_000001.wav 
  168  ls
  169  rm 16khz_sample_000001.wav 
  170  ls
  171  cd ..
  172  cd lyra-0.0.2/
  173  ls
  174  bazel-bin/decoder_main  --model_path=wavegru --output_dir=/home/jack/work/temp/ --encoded_path=/home/jack/work/temp/16khz_sample_000001.lyra
  175  cd ..
  176  ls
  177  cd temp/
  178  ls
  179  ls -lh *
  180  sudo apt-get install sox
  181  ls
  182  cd work/
  183  ls
  184  cd temp/
  185  ls
  186  play old_16khz_sample_000001.wav 
  187  ls
  188  play 16khz_sample_000001_decoded.wav 
  189  play old_16khz_sample_000001.wav 
  190  play 16khz_sample_000001_decoded.wav 
  191  ls
  192  cd ..
  193  ls
  194  history
  195  ls
  196  cd temp/
  197  ls
  198  rm 16khz_sample_000001.lyra 
  199  ls
  200  rm 16khz_sample_000001_decoded.wav 
  201  ls
  202  cd ..
  203  ls
  204  cd lyra-0.0.2/
  205  ls
  206  history 

4
play 16khz_sample_000001.wav
play WARN alsa: can't encode 0-bit Unknown or not applicable

16khz_sample_000001.wav:

 File Size: 242k      Bit Rate: 256k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit   
Samplerate: 16000Hz      
Replaygain: off         
  Duration: 00:00:07.56  

In:100%  00:00:07.56 [00:00:00.00] Out:121k  [      |      ]        Clip:0    
Done.

5
play 32khz_sample_000002.wav
play WARN alsa: can't encode 0-bit Unknown or not applicable

32khz_sample_000002.wav:

 File Size: 324k      Bit Rate: 512k
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit   
Samplerate: 32000Hz      
Replaygain: off         
  Duration: 00:00:05.06  

In:100%  00:00:05.06 [00:00:00.00] Out:162k  [      |      ]        Clip:0    
Done.

中文

bazel-bin/encoder_main --model_path=wavegru --output_dir=/home/jack/work/temp --input_path=testdata/16khz_sample_000001.wav

bazel-bin/decoder_main  --model_path=wavegru --output_dir=/home/jack/work/temp/ --encoded_path=/home/jack/work/temp/zw1.lyra

需要科学---- 上网— ,不需要 llvm

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值