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