0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在SDK上使用容器构建高音频质量的应用程序

星星科技指导员 来源:NVIDIA 作者:About Abhishek Sawark 2022-03-31 16:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

随着音频和视频流、会议和电信的兴起,开发人员必须构建具有卓越音频质量的应用程序,并使最终用户能够有效地进行通信和协作。各种背景噪音会干扰通信,从交通和建筑到狗吠和婴儿哭闹。此外,用户可以在放大回声的大房间里讲话。

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

    文章

    4842

    浏览量

    108150
  • NVIDIA
    +关注

    关注

    14

    文章

    5685

    浏览量

    110111
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1111

    浏览量

    52003
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何构建蓝牙应用程序

    应用程序使用蓝牙(blueZ)。 我已经安装了 gcc-riscv64-linux-gnu。 但是,没有安装 blueZ 标头和库。 如何构建我的蓝牙应用程序
    发表于 04-01 07:31

    AD1853音频DAC芯片:高音音频设计的理想之选

    AD1853音频DAC芯片:高音音频设计的理想之选 在音频设备设计领域,一款高性能的数字模拟转换器(DAC)至关重要。AD1853作为一款24位、192kHz的立体声DAC,为
    的头像 发表于 03-30 14:55 107次阅读

    在图像,Debian 无法为 wifi 构建驱动程序,怎么解决?

    在图像,Debian 无法为 wifi 构建驱动程序。缺少一些内核包。是否可以发布它,我们可以通过 apt 安装它?所以我们对系统无能为力 无论我愿意什么,都是不可能的。这让我很生气。 make
    发表于 03-25 06:00

    请问如何构建和运行视频编解码器示例应用程序

    如何构建和运行视频编解码器示例应用程序
    发表于 03-10 06:27

    探索PCM3168A音频编解码器:高音质与多功能的完美融合

    探索PCM3168A音频编解码器:高音质与多功能的完美融合 在音频处理领域,一款性能卓越的编解码器对于实现高质量音频体验至关重要。今天,我
    的头像 发表于 02-02 14:30 424次阅读

    何在应用程序调试期间分析栈和堆使用情况

    ,并在 Unified IDE 中仍可使用。本文涵盖了如何在 Vitis 中使用分析工具在应用程序调试期间对栈和堆进行监控。
    的头像 发表于 10-24 16:54 1038次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>应用程序</b>调试期间分析栈和堆使用情况

    SDK音频替换失败记录过程

    在安信可离线语音模组 VC-01、VC-02 系列教程 【中级入门篇】中根据设置的不同回复词和命令字进行了固件生成。我出教程的时候在考虑有没有什么办法来替换到SDK中的音频,在我尝试了各种办法后发现很难办到 (建议直接使用云平台生成。 不要在
    的头像 发表于 09-25 15:50 2125次阅读
    <b class='flag-5'>SDK</b><b class='flag-5'>音频</b>替换失败记录过程

    何在 MA35 系列微处理器 (MPU) 开发 AMP(非对称多处理)应用程序

    何在 MA35 系列微处理器 (MPU) 开发 AMP(非对称多处理)应用程序,并通过建立多个端点的过程促进与其他内核的多通道数据传输。
    发表于 08-19 06:11

    如何下载 SDK构建 64 位版本的库?

    我正在尝试获取 64 位版本的 CySuiteUSB dll 文件,但是当我转到SuiteUSB 3.4 页面时,没有任何链接可以下载 SDK。如何下载 SDK构建 64 位版本的库?
    发表于 07-23 08:25

    请问是否可以在通用Windows平台中构建OpenVINO™ GenAI C++ 应用程序

    无法在通用 Windows 平台中构建OpenVINO™ GenAI C++ 应用程序
    发表于 06-24 07:35

    何在Android设备安装Cyusb3014芯片驱动?

    1.如何在Android设备安装Cyusb3014芯片驱动? 我们在 Windows 上有 FX3 驱动程序 SDK。 2.如何在Andr
    发表于 05-15 07:23

    如何使用CYUSB3KIT-003使用GPIO访问SRAM的应用程序

    你好。我是CYUSB3的初学者。 我想创建一个使用 CYUSB3KIT-003 使用 GPIO 访问 SRAM 的应用程序。 目前我已经在我的电脑安装了SDK,但是有什么参考资料吗?
    发表于 05-14 06:51

    SDK从版本1.3.4更新至1.3.5后,cyfx3s_msc应用程序中的看门狗定时器出现故障怎么解决?

    我的设备固件基于 SDK 示例 cyfx3s_msc。 将 SDK 从 1.3.4 版本更新到 1.3.5 版本后,看门狗定时器出现故障。 每当处理器由于看门狗而重置时,应用程序就会在重新启动后不久
    发表于 05-14 06:40

    使用SDK 1.3.5构建的固件出现-2 kV ESD导致USB传输失败怎么解决?

    使用基于 SDK 1.3.5 构建的固件,在进行 -2 kV ESD 测试时,USB 传输无法从 EP0 获取 UVC 探测器和提交控制数据,并且控制器无法从传感器接收帧。 因此,我们重置了 dma
    发表于 05-07 07:09

    何在Raspberry Pi OS安装SDK

    在 Raspberry Pi OS 安装 SDK
    发表于 04-30 06:45