突破压缩极限的AI语音编解码器
I. Speech Codecs
語音編碼的目的是在保持語音質量的前提下盡可能地減少傳輸所用的帶寬,主要是利用人的發聲過程中存在的冗余度和人的聽覺特性達到壓縮的目的。經過了多年的發展,目前語音編解碼器大致可以分為以下幾類:
波形編碼,將時域波形經過采樣量化編碼,常見的就是PCM編碼格式
參數編碼,根據人的發聲機制建立數學模型,然后對語音進行壓縮,常見的是LPC-10
混合編碼,結合波形編碼和參數編碼的壓縮方式,常見的AMR等
深度學習編碼,利用神經網絡將語音編碼成隱向量,然后利用神經網絡將其恢復成語音信息,微軟的Satin以及今天要介紹的Lyra就是其代表
雖然目前很多領域仍是直接把PCM封裝成IP包進行傳輸,但是在帶寬限制的領域,如VoIP語音會議,語音編解碼是較為關鍵的技術之一。
II. Lyra
Lyra去年就已經在Github上開源了,并且同時支持Linux和Android系統。當時年輕的我使用VM創建了一個Ubuntu的虛擬機,許多個夜晚睡覺前敲下編譯命令:
第二天興沖沖地醒來卻發現虛擬機已經卡死。如今我吸取了以前的教訓,首先我升級了硬件,給我的暗影精靈增加了4G的內存條,然后我拋棄了VM轉投雙系統的懷抱,關于如何裝雙系統可以參考我的博客。本以為天時地利人和皆在我,但還是由于一些環境和網絡問題花了很多精力才編譯成功,如果你不想自己編譯的話,本文末尾有對應鏈接。如果你想自行編譯的話,這里給你一些我踩過的坑:1)刪除WORKSPACE中關于Android SDK和NDK的repo;2)科學上網采用全局模式。
廢話不多說了,我們直接進入正題。目前常用的編解碼器Opus是一種混合編解碼器,對于窄帶語音信號使用SILK進行編碼,對于寬帶和超寬帶使用CELT編碼。
而Lyra的整體流程如下所示:
可以看出Lyra整體流程非常簡單,在編碼過程中,Lyra每40ms提取一次特征,所使用的特征是160維的log melspectrum,然后將它們量化到3kbps;在解碼過程中,則使用生成模型將量化后的特征重構語音信號,如果讀者對語音合成或者語音轉換等任務有所了解的話,那么對解碼部分應該不會感到陌生。可惜的是Google只開源了應用,沒有開源如何訓練這個模型,因此具體的網絡結構也不得而知,只能從部分代碼中窺探一二。
III. Experiment
下面我們看下Lyra編解碼的效果,原始音頻如下所示,可以看到原始音頻音量比較小,并且能量大多集中在5K以下,該樣本PCM格式文件大小的為236KB。
Lyra編碼后的文件大小為2.77KB,解碼后的音頻如下所示,可以看到Lyra一些原始音頻中的頻率成分沒有正確的重構,但同時一些背景噪聲也被抑制干凈。
從頻響曲線中看得更明顯:
Lyra中高頻部分明顯低于原始音頻,但是低頻部分保留的較為完整,這就可以滿足聽得懂這個最低的要求。但是由于高頻的缺失會導致,聽起來聲音很悶,不夠明亮。由于本人精力有限,沒有辦法進行較為詳細的評測,讀者要是有興趣可以自行實驗。
IV. Conclusion
總的來說,對于一個實用的語音編解碼應該滿足兩個部分:
合理的時間復雜度
處理多種多樣的語音輸入
對于第一點可以通過輕量化模型的方法比如稀疏模型或者使用GRU的生成模型代替WaveNet這種計算量巨大的模型;對于第二點,可以使用頻譜特征,并且在訓練的過程設計損失函數對待噪聲的樣本進行一定程度的懲罰。
那么語音編解碼的終極模式是什么樣子的呢?
本文相關代碼在公眾號語音算法組菜單欄點擊Code獲取
參考文獻:
[1]. https://ai.googleblog.com/2021/02/lyra-new-very-low-bitrate-codec-for.html
[2]. https://github.com/google/lyra
[3]. https://wenku.baidu.com/view/9be752ee5bf5f61fb7360b4c2e3f5727a5e92466.html
[4]. https://en.wikipedia.org/wiki/Category:Speech_codecs
[5]. On the information rate of speech communication
[6]. GENERATIVE SPEECH CODING WITH PREDICTIVE VARIANCE REGULARIZATION
總結
以上是生活随笔為你收集整理的突破压缩极限的AI语音编解码器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php编辑器编程程序,有哪些编辑器是可以
- 下一篇: HTML文档解析