隨著音頻和視頻流、會議和電信的興起,開發人員必須構建具有卓越音頻質量的應用程序,并使最終用戶能夠有效地進行通信和協作。各種背景噪音會干擾通信,從交通和建筑到狗吠和嬰兒哭鬧。此外,用戶可以在放大回聲的大房間里講話。
NVIDIA Maxine提供了一種易于使用的 Audio Effects SDK 和 AI 神經網絡音頻質量增強算法,以解決虛擬協作和內容創建應用程序中音頻質量差的問題。使用 Audio Effects SDK ,您可以消除幾乎任何類型的噪音,包括房間回音,并構建能夠輕松理解對話和高效會議的應用程序。
在本文中,您將學習如何在 Linux 或 Windows 平臺上的 SDK 上使用容器構建高音頻質量的應用程序。所有這些都通過預構建的示例應用程序進行了演示。
構建沒有背景噪音或房間回聲的應用程序
Maxine Audio Effects SDK 使您能夠將窄帶、寬帶和超寬帶音頻的噪音消除和房間回聲消除功能集成到應用程序中。
噪聲消除
隨著我們開始更多地在家工作,在我們通話的背景中有許多潛在的噪聲源,例如按鍵聲或空調壓縮機的聲音。我們周圍的分心成為我們周圍環境的一部分,比如關上門、搬家具或吸塵器。
使用噪聲消除效果,您可以從音頻流中去除不同的噪聲,同時保留說話人聲音的情感方面。例如,當最終用戶感到興奮,并在空調的背景下以更高的音調提出新想法時,噪音消除只保留說話人的聲音。
房間回音消除
當一個人在一個封閉的房間里講話時,聲音會從周圍的所有表面反彈。聲音在多次迭代中被吸收、減弱或繼續反射的程度取決于曲面的大小、幾何體和材質。這種持續的聲波反射會隨著時間的推移而增強,并引起混響。
回聲在具有更多反射表面的大房間(如混凝土墻或石墻)中更為明顯。例如,想象一下高天花板大教堂中的聲音混響。這種reverberant語音不適合于廣泛使用的語音編碼方法,如線性預測編碼或碼激勵線性預測。混響語音的編碼會導致嚴重的失真,在極端情況下會導致語音無法理解。
在發送語音記錄之前,必須消除語音記錄中的此類混響。在編碼前無法消除回聲的情況下,在通過揚聲器將解碼語音呈現給聽眾之前,必須盡可能多地消除回聲。當用戶在混響環境中講話時,房間回音消除效果消除了語音中不必要的回聲。此外,此功能支持寬帶和超寬帶信號。
您可以將噪音消除和房間回聲消除功能結合起來,以在兩個方向上獲得更好的端到端音頻質量。
獲取適用于 Windows 或 Linux 的 Maxine Audio Effects SDK
將容器與 Kubernetes 一起使用提供了一種健壯且易于擴展的部署策略。除了預先打包的容器外,我們還提供適用于 Windows 和 Linux 平臺的 Maxine Audio Effects SDK 。使用容器的好處是由于更快的部署和更短的維護時間而實現了高可擴展性、時間和成本節約。此外,由于容器的預包裝性質,您不必擔心容器內的特定安裝。
在本文中,我們將重點介紹如何使用 Audio Effects SDK 容器。繼續安裝之前,請確保滿足所有硬件要求。
如果您對 NVIDIA TensorRT 和 cuDNN 有豐富的經驗,并且希望在裸機 Linux 系統上部署 Audio Effects SDK ,請在 Maxine 開始頁面上下載特定平臺的 SDK 。
音頻效果 SDK Docker 容器
在容器上安裝和利用高性能 Audio Effects SDK 及其最先進的 AI 模型需要四個步驟:
下載 NVIDIA 驅動程序
下載 Docker 和 NVIDIA -Docker用于將 GPU 暴露在容器中
使用NGC API 密鑰登錄 NGC 注冊表
拉動音頻效果 SDK 容器
您需要訪問 NVIDIA Turing、 NVIDIA Volta 或 NVIDIA Ampere Architecture 生成數據中心 GPU s : T4 、 V100 、 A100 、 A10 或 A30 。
在 Windows 上安裝 Audio Effects SDK
在 Windows 上安裝 SDK 是一個簡單的過程:
下載適用于 Windows 的 NVIDIA 圖形驅動程序
下載 Microsoft Visual Studio 2017 或更高版本(確保安裝構建工具)
從Maxine 開始了頁面下載最新的 Audio Effects SDK 軟件包
您必須擁有 NVIDIA RTX 卡才能從 Windows 上 Audio Effects SDK 的加速吞吐量和縮短延遲中獲益。要在數據中心卡(如 A100 )上運行此 SDK ,請使用 Linux 包。
將 Audio Effects SDK 與預構建的示例應用程序一起使用
Audio Effects SDK 附帶預構建的effects_demo和effects_delayed_streams_demo示例應用程序,以演示如何使用 SDK 。您還可以構建自己的示例應用程序。在本文中,我們將重點介紹如何運行effects_demo示例應用程序。
實時音頻效果演示
effects_demo應用程序演示如何使用 SDK 將效果應用于音頻。它可以用于應用噪音消除、房間回聲消除或兩者的組合效果來輸入音頻文件并將輸出寫入文件。
要運行此應用程序,請導航到samples/effects_demo目錄,并使用以下腳本之一運行該應用程序:
$ 。/run_effect.sh -a turing -s 16 -b 1 -e denoiser
$ 。/run_effect.sh -a turing -s 48 -b 1 -e dereverb
$ 。/run_effect.sh -a turing -s 16 -b 400 -e denoiser
$ 。/run_effect.sh -a turing -s 48 -b 400 -e dereverb_denoiser
run_effect.sh bash 腳本接受以下參數:
-a:架構可以是 NVIDIA 圖靈、 NVIDIA 沃爾塔、 A100 或 A10 ,具體取決于您的 GPU 。
-s:使用 48 / 16 KHz 的采樣率。
-b:批量大小。
-e:要運行的效果:
denoiser( NR )
dereverb( RER )
dereverb_denoiser(合并)
您還可以通過如下方式傳遞配置文件來執行effects_demo二進制文件:
# For running denoiser on NVIDIA Turing GPU with 48kHz input and batch size 1
$ 。/effects_demo -c turing_denoise48k_1_cfg.txt
此配置文件應包含以下參數:
effect 《denoiser/dereverb/dereverb_denoiser》
sample_rate 《48000/16000》
model 《*.trtpkg》:模型可在容器內的/usr/local/AudioFX/models目錄中找到。
real_time 《0/1》:模擬來自物理設備或流的音頻接收。
intensity_ratio 《0.0-1.0》 :指定去噪強度比。
input_wav_list
output_wav_list
運行effects_demo示例應用程序后,已去噪的輸出文件與可執行文件位于同一目錄中。
延遲流上的音頻效果 SDK 演示
effects_delayed_streams_demo應用程序演示如何處理延遲流。在電信領域,如果用戶的音頻 MIG ht 不能實時到達服務器,我們建議延遲應用去噪效果。在此示例應用程序中,每個輸入流都屬于以下類別之一:
one_step_delay_streams:這些流的延遲為一幀。例如,如果幀大小為 5ms ,則這些流具有 5ms 的延遲。
two_step_delay_streams:這些流有兩幀的延遲。例如,如果幀大小為 5ms ,則這些流具有 10ms 的延遲。
always_active_streams:這些流沒有延遲,始終處于活動狀態。
要運行此應用程序,請導航到samples/effects_delayed_streams_demo目錄并按如下方式執行二進制文件:
$ 。/effects_delayed_streams_demo -c config-file
這里,-c config-file是配置文件的路徑,例如,turing_denoise48k_10_cfg.txt。配置文件接受以下參數:
effect 《denoiser/dereverb/dereverb_denoiser》
frame_size:一個無符號整數,指定音頻效果的每個音頻流每幀的采樣數。
sample_rate 《48000/16000》
model 《*.trtpkg》:模型可在容器內的/usr/local/AudioFX/models目錄中找到。
one_step_delay_streams:指定屬于one_step_delay_streams類別的流標識符。
two_step_delay_streams:指定屬于two_step_delay_streams類別的流標識符。
input_wav_list
output_wav_list
運行effects_delayed_streams_demo示例應用程序后,已去噪的輸出文件與可執行文件位于同一目錄中。
使用 API 運行音頻效果功能
示例應用程序使用易于使用的 Audio Effects SDK API 來運行效果。它們利用了顯著的性能優勢并控制了低級別 API 的批處理。在 Maxine 中創建和運行音頻效果是一個簡單的三步過程(圖 1 )。
#FormatImgID_0#圖 1 。運行 Audio Effects SDK 的步驟和函數
創造效果
要為噪聲消除或房間回聲消除創建效果,請調用NvAFX_CreateEffect函數,該函數接受帶有所需參數的句柄。此函數用于在創建所需效果后返回狀態代碼。繼續之前,請使用此狀態代碼檢查是否有任何錯誤。
// Create and handle
NvAFX_Handle handle;
// Call CreateEffect function and pass any one of the desired effects:
// NVAFX_EFFECT_DENOISER, NVAFX_EFFECT_DEREVERB,
// NVAFX_EFFECT_DEREVERB_DENOISER
NvAFX_Status err = NvAFX_CreateEffect(NVAFX_EFFECT_DENOISER, &handle);
每個提供的型號都支持特定的音頻采樣率,可以通過調用NvAFX_SetU32來指定。采樣率值應為無符號 32 位整數值( 48000 / 16000 )。此外,應使用NvAFX_SetString API 調用傳遞所用 GPU 平臺的正確模型路徑,如下所示:
// Pass parameter selector NVAFX_PARAM_SAMPLE_RATE and unsigned int
// Pass parameter selector NVAFX_PARAM_MODEL_PATH and character string
NvAFX_Status err;
err = NvAFX_SetU32(handle, NVAFX_PARAM_SAMPLE_RATE, sample_rate);
err = NvAFX_SetString(handle, NVAFX_PARAM_MODEL_PATH, model_file.c_str());
由于為每個效果預設了 I / O 音頻通道數和每幀采樣數,因此必須將這些參數傳遞給效果功能。要獲取支持的值列表,請調用NvAFX_GetU32函數,該函數返回預設值列表。
// Pass the selector string to get specific information like:
// NVAFX_PARAM_NUM_SAMPLES_PER_FRAME,
// NVAFX_PARAM_NUM_CHANNELS,
unsigned num_samples_per_frame, num_channels;
NvAFX_Status err;
err = NvAFX_GetU32(handle, NVAFX_PARAM_NUM_SAMPLES_PER_FRAME,
&num_samples_per_frame);
err = NvAFX_GetU32(handle, NVAFX_PARAM_NUM_CHANNELS, &num_channels);
要在 GPU 上運行效果,必須使用NvAFX_GetSupportedDevices函數獲取支持的設備列表,該函數獲取支持的 GPU 數量。
// The function fills the array with the CUDA device indices of devices
// that are supported by the model, in descending order of preference,
// where the first device is the most preferred device.
int numSupportedDevices = 0;
NvAFX_GetSupportedDevices(handle, &numSupportedDevices, nullptr);
std::vector《int》 ret(num);
NvAFX_GetSupportedDevices(handle, &numSupportedDevices, ret.data());
然后,您可以通過傳遞正確的 GPU 設備編號來設置要使用的 GPU 設備,如下所示:
NvAFX_SetU32(handle, NVAFX_PARAM_USE_DEFAULT_GPU, use_default_gpu_)
加載音頻效果
創建效果后,必須使用NvAFX_Load函數加載模型。加載效果選擇并加載模型,并驗證為效果設置的參數。此函數將模型加載到 GPU 內存中,并使其為推斷做好準備。要加載音頻效果,請調用NvAFX_Load函數并指定創建的效果句柄。
NvAFX_Status err = NvAFX_Load(handle);
運行音頻效果
最后,運行加載的音頻效果,將所需效果應用于輸入數據。運行效果后,讀取輸入內存緩沖區的內容,應用音頻效果,并將輸出寫入輸出內存緩沖區。調用NvAFX_Run函數在輸入緩沖區上運行加載的音頻效果。
// Pass the effect handle, input, and output memory buffer, and the parameters of the effect
NvAFX_Status err = NvAFX_Run(handle, input, output, num_samples,num_channels);
音頻效果應用于輸入內存緩沖區且不再需要后,通過傳遞效果句柄,使用NvAFX_DestroyEffect(handle)函數調用清理資源。
NvAFX_Status err = NvAFX_DestroyEffect(handle);
總結
現在,我們已經了解了 Maxine Audio Effects 功能的詳細信息,向您展示了如何使用適當的參數運行示例應用程序,并了解了易于使用的高性能 API ,您可以開始使用Maxine 容器或在窗戶上和在 Linux 上將這些驚人的 AI 音頻功能集成到您的應用程序中。
關于作者
About Abhishek Sawarkar
Abhishek Sawarkar 責在 NVIDIA Jarvis 框架上開發和展示以深度學習為重點的內容。他的背景是計算機視覺和機器學習,但目前他正致力于整個 Jarvis 多模式管道,包括 ASR 、 NLP 、 TTS 和 CV 。他是卡內基梅隆大學的一名應屆畢業生,具有電氣和計算機工程碩士學位。
About Gordana Neskovic
Gordana Neskovic 是AI/DL產品營銷團隊的成員,負責 NVIDIA Maxine。在加入 NVIDIA 之前,Gordana曾在VMware、Wells Fargo、Pinterest、SFO-ITT和KLA Tencor擔任過各種產品營銷、數據科學家、AI架構師和工程職位。她擁有博士學位。圣塔 Clara 大學,塞爾維亞貝爾格萊德大學電氣工程碩士和學士學位。
About Tanay Varshney
Tanay Varshney 是 NVIDIA 的一名深入學習的技術營銷工程師,負責廣泛的 DL 軟件產品。他擁有紐約大學計算機科學碩士學位,專注于計算機視覺、數據可視化和城市分析的橫斷面。
審核編輯:郭婷
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100739 -
NVIDIA
+關注
關注
14文章
4983瀏覽量
103008 -
SDK
+關注
關注
3文章
1036瀏覽量
45915
發布評論請先 登錄
相關推薦
評論