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

如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 C 語(yǔ)言程序?

使用HDDL卡運(yùn)行OpenVINO應(yīng)用程序容器或HDDL daemon容器時(shí)遇到錯(cuò)誤,怎么解決?
基于HPM_SDK_ENV開(kāi)發(fā)應(yīng)用程序的升級(jí)處理

如何在TMS320C6727 DSP上創(chuàng)建基于延遲的音頻效果

如何在TMS320DM643x器件上使用EDMA3驅(qū)動(dòng)程序

通過(guò)通道求和提高音頻ADC的動(dòng)態(tài)范圍和SNR

NISSHINBO日清紡微推出面向高音質(zhì)音頻的600mA超低噪聲LDO “MUSES” 系列中首款適合高音質(zhì)的電源IC “MUSES100”新品上市
可以在單個(gè)esp8266上安裝兩個(gè)NON OS SDK應(yīng)用程序嗎?
讓smartconfig在ESP-03上運(yùn)行,在CWSMARTSTART不工作是哪里的問(wèn)題?
將應(yīng)用程序從NoOS SDK移植到RTOS SDK遇到異常怎么解決?
如何在不同應(yīng)用場(chǎng)景下構(gòu)建音頻測(cè)試環(huán)境

評(píng)論