ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OpenVINO Super Resolution:在 Audacity 中实现 24kHz 带宽 / 48kHz 采样率音频增强的扩散式超分辨率效果器

OpenVINO Super Resolution:在 Audacity 中实现 24kHz 带宽 / 48kHz 采样率音频增强的扩散式超分辨率效果器 人工智能AI 应用音频语音音乐生成本地部署【免费下载链接】openvino-plugins-ai-audacityA set of AI-enabled effects, generators, and analyzers for Audacity®.项目地址https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audacity点击查看免费下载Super Resolution超分辨率是本仓库中面向 Audacity® 的五个 AI 功能之一它把被压缩、降采样或带宽受限的音频重建为24kHz 带宽、48kHz 采样率的高保真音频适用于音乐、环境音、语音等多样化素材。本文以 功能说明文档 为主体结合 UI 实现、核心处理类 与 扩散管道 等源码完整讲解该效果器的每个配置项、默认值、取值范围及其背后的扩散模型实现原理。读完本文你将能够熟练操作该效果器、按需调参复现实验结果并理解一条音频从波形到梅尔频谱、经 DDIM 采样重建、再到波形输出的完整调用链。一、功能概述它能做什么Super Resolution 效果器接收 Audacity 轨道中选中的一段单声道或立体声音频通过 OpenVINO™ Runtime 在本机CPU / GPU / NPU上运行一系列 AI 模型将输入音频提升至 24kHz 带宽和 48kHz 采样率改善高频细节与整体清晰度。从实现角度看这是开源 Python 项目 AudioSR论文标题为AudioSR: Versatile Audio Super-resolution at Scale其 BibTeX 引用收录于仓库 顶层 README的Python → C、PyTorch → OpenVINO IR移植神经网络推理全部替换为 OpenVINO™ 推断请求而波形预处理、梅尔频谱计算、DDIM 采样调度、分段交叉淡化等数值逻辑则以 C 与 libtorch 张量运算重写见 audio_sr/audio_sr.cpp。全部推理均在本地完成不需要联网。在 OVAudioSR.cpp 中该效果器被注册为 Audacity 的一个处理型EffectTypeProcess交互效果器菜单名称为OpenVINO Super Resolution位于 Audacity 的Effect效果菜单下它可以接受最多两路输入GetAudioInCount()返回 2即单声道或立体声轨道均可处理。二、使用入口与前置条件2.1 操作步骤在 Audacity 中选中一段单声道或立体声轨道的音频范围打开Effect → OpenVINO Super Resolution按需调整参数详见第三节点击Apply应用等待处理完成后生成的新轨道会自动添加到工程中。处理结果不会覆盖原轨道。源码显示输出轨道由输入轨道复制而来并追加形如-AudioSR-( M: basic, CS: 10.24, steps: 50, GS: 3.5, S: 42, RMS_N: 1, D[CPU,CPU,CPU] )的命名后缀见 OVAudioSR.cpp 中的descriptor_str拼接逻辑该后缀完整记录了本次运行使用的模型、块大小、步数、引导系数、种子、RMS 归一化开关与三阶段设备映射方便复现与归档。2.2 模型文件前置条件效果器并非凭空可用它要求在 Audacity 安装目录BaseDir下的openvino-models/audiosr/子目录中放置完整模型集。源码 OVAudioSR.cpp 的FindAvailableModels()会逐一检查以下基础文件任一缺失即视为无模型、并禁用 Apply 按钮audiosr_decoder.xmlaudiosr_encoder.xmlmel_24000_cpu.raw预计算的 256×1025 梅尔滤波器矩阵详见第六节post_quant_conv.xmlvocoder.xmlvae_feature_extract.xml在此基础上若存在basic/ddpm.xml则显示Basic (General)模型选项若存在speech/ddpm.xml则显示Speech模型选项。也就是说DDPM 去噪网络按 Basic 与 Speech 分为两套权重而编码器、解码器、声码器等组件是共享的。此外模型推理产生的编译缓存会写入用户数据目录下的openvino-model-cache/文件夹用于加速后续的模型加载见 OVAudioSR.cpp 中cache_folder的创建逻辑。三、属性面板逐项详解效果器属性面板共提供 10 个可操作项与 功能说明文档 中的编号一一对应。下面逐项说明其行为并结合源码给出默认值与取值范围。1. Unload Models卸载模型由于模型加载与首次编译耗时较长效果器会在内存中缓存已加载的 AI 模型首次点击 Apply 时模型被加载进内存之后再次运行 Super Resolution 时若参数设备、模型、块大小未发生变化则直接复用缓存显著缩短等待时间源码中通过bNeedsInit判断是否需要重建_audioSR对象。当你完成实验、不再需要这些模型时点击Unload Models即可释放系统内存。源码 OVAudioSR.cpp 的OnUnloadModelsButtonClicked实现非常直接将_audioSR智能指针置空_audioSR {}并禁用该按钮直到下一次 Apply 重新创建。值得注意的边界条件更换块大小Chunk Size会强制销毁已缓存对象。因为 10.24s 与 5.12s 两种块大小对应不同的模型输入张量形状所有模型都必须重新 reshape 并编译代码注释明确指出“so might as well just destroy _audioSR”见 OVAudioSR.cpp。2. Model模型选择Basic (General)通用模型适用于音乐、环境声等各类音频的增强Speech针对孤立人声/语音优化的模型。两者的差异在于 DDPM 去噪网络权重不同源码在构造配置时把AudioSRModel::BASIC映射到basic/子目录下的ddpm.xmlAudioSRModel::SPEECH映射到speech/子目录见 ddpm_latent_diffusion.cpp 的_init_ddpm()。切换模型后DDPM 相关组件会被重新初始化。3. Device Selection设备选择Super Resolution 的扩散流水线由多个网络组成允许为不同阶段指定不同 OpenVINO™ 设备。面板上对应三个下拉框Encoder Device第一级编码器VAE Encoder与vae_feature_extract特征提取网络使用的设备DDPM DeviceDDPM 潜在扩散去噪网络使用的设备Decoder Device解码器Decoder与声码器Vocoder使用的设备。设备列表来自ov::Core::get_available_devices()见 OVAudioSR.cpp 构造函数因此只包含当前机器实际可用设备。一个重要限制NPU 目前不能用于 Encoder / Decoder 下拉框——源码在枚举设备时对NPU做了continue跳过注释为 NPU is not supported (yet) as a device to use for decoder / vocoderNPU 只出现在 DDPM 设备选项中。这种拆分的好处是让计算量最大的扩散去噪步骤可以跑在 GPU/NPU 上而其他步骤留在 CPU。4. Device Details设备详情点击该按钮会弹出一个信息对话框列出简化设备名 → 完整设备名的映射表如GPU.0 Intel(R) ...数据来自core.get_property(device, FULL_DEVICE_NAME)见 OVAudioSR.cpp 的OnDeviceInfoButtonClicked。当机器存在多块 GPU、需要确认哪个设备对应GPU.0/GPU.1时这个功能非常实用。5. Normalize Output RMS输出 RMS 归一化勾选后效果器会将增强后音频的响度归一化回输入音频的 RMS 电平避免扩散重建改变整体音量。该选项默认开启成员变量mbNormalizeOutputRMS true。实现细节见 OVAudioSR.cpp对每个处理块计算ratio input_rms / output_rms再将输出样本逐点乘以该比值。这里input_rms是原始输入块的均方根output_rms是扩散管道输出波形的均方根。取消勾选则保持模型输出的原始响度。6. Advanced Options高级选项点击该复选框可展开 / 收起高级设置区域Chunk Size、Seed、Steps、Guidance Scale 四项。UI 上通过advancedSizer-ShowItems(mbAdvanced)实现显隐并自动调整对话框尺寸见 OVAudioSR.cpp 的show_or_hide_advanced_options与OnAdvancedCheckboxChanged。默认折叠。7. Chunk Size块大小10.24 Seconds默认每个块 491520 个采样10.24 × 480005.12 Seconds每个块 245760 个采样5.12 × 48000。音频被切成上述大小的块逐一处理块之间带重叠与交叉淡化见第五节。文档明确指出更小的 5.12s 块在某些场景下可能得到更好结果但处理时间更长。从源码看选择 5.12s 后所有模型的输入形状都会被 reshape如 VAE 特征提取输入变为{1,512,256}、DDPM 输入变为{1,16,64,32}、声码器输入变为{1,256,512}见 ddpm_latent_diffusion.cpp 的三个_init_*函数因此切换块大小必然触发模型重新编译。8. Seed随机种子Seed 用于初始化扩散过程的随机数发生器RNG。留空时效果器使用当前系统时间作为种子因此每次运行结果都不同——这有利于参数实验显式填写种子则能复现之前的生成结果。源码中的具体逻辑见 OVAudioSR.cpp从文本框读取字符串若非空则std::stoul解析为种子为空则seed (unsigned)time(t)。种子随后被写入 torch CPU 随机数发生器gen.set_current_seed(seed)见 ddpm_latent_diffusion.cpp 的generate_batch_stage1用于对潜在变量 z 进行采样高斯重参数化采样。9. StepsDDPM 采样步数扩散去噪的 DDIM 采样步数默认 50UI 允许范围 1100校验器见 OVAudioSR.cpp 的IntegerValidatorint。该值作用于每个音频块因此总步数 步数 × 块数。一般来说步数越高增强质量越好但存在收益递减拐点文档原文“at least up to a certain point”。同时步数直接决定处理耗时与进度条粒度。10. Guidance Scale引导系数扩散过程中控制保真度与创造力之间的权衡默认 3.5UI 允许范围 1.010.0FloatingPointValidatorfloat见 OVAudioSR.cpp。更高的引导系数模型更严格地遵循输入特征得到更忠实、更贴近原始输入的重建更低的引导系数模型更具创造性可能引入新颖的增强效果或与输入不完全一致的伪影。从实现看当unconditional_guidance_scale ! 1.0时采样器会构造一个“无条件条件”张量其值填充为常数-11.4981源自 Python 版self.unconditional_cond -11.4981 vae_embed * 0.0并在每一步中按引导系数在条件预测与无条件预测之间加权见 ddpm_latent_diffusion.cpp 的generate_batch_stage2与 DDIMSampler 头文件。当系数恰好为 1.0 时无条件分支被完全跳过退化为纯条件生成。四、三阶段扩散管道从波形到波形理解了参数之后我们来看底层真正发生了什么。源码把整条流水线拆成三个可并行的阶段见 audio_sr.h 与 audio_sr.cpp这也是它能对相邻块进行流水线并行stage 1 处理下一块的同时stage 2/3 处理当前块的基础。阶段 0输入预处理normalize_and_pad在进入神经网络之前每个块先经过 audio_sr.cpp 的normalize_and_pad去均值waveform waveform - waveform.mean()峰值归一化waveform waveform / (max_abs 1e-8)随后整体乘以0.5补齐不足一个块长的片段用零填充到块长度的整数倍梅尔频谱提取使用 STFTFFT 长度 2048、hop 480、Hann 窗计算幅度谱乘以预计算的 256 维梅尔滤波器矩阵采样率 48000、fmin20、fmax24000再取对数压缩得到log_mel_spec代码注释完整复述了 Python 版对应的 librosa 参数带宽检测通过对 STFT 能量做累积和并取 0.985 百分位估计当前音频实际占用的截止频率cutoff_freq(locate_cutoff_freq / 1024.0) * 24000.0若计算值低于 1000Hz近乎静音则直接取 24000Hz 表示“无需限制”。该截止频率随后会指导低通滤波与梅尔替换操作。Stage 1编码与条件特征提取将log_mel_spec送入VAE 编码器AutoEncoder::encode从编码后验分布中采样得到潜在变量z并乘以缩放因子_scale_factor 0.334240138530731201f该常数是从 LatentDiffusion 的scale属性导出的注释提示需确认在 Basic 与 Speech 模型间一致对输入波形的低通滤波版本waveform_lowpass提取梅尔频谱lowpass_mel送入vae_feature_extract网络得到扩散条件c。编码器内部由 4 个 OpenVINO 推断请求组成audiosr_encoder、quant_conv、post_quant_conv、audiosr_decoder见 autoencoder.h。Stage 2DDIM 潜在空间采样DDIMSampler 在潜在空间中执行DDIMDenoising Diffusion Implicit Models迭代去噪共Steps步依据预设的linear_start / linear_end生成噪声调度表_betas、_alphas_cumprod等一系列预计算张量每步调用 DDPM 网络的apply_model(x_noisy, t, cond)输入张量x_noisy、时间步t、条件cond见 ddpm_latent_diffusion.cpp通过_p_sample_ddim反向去噪若设定了引导系数则同时预测条件与无条件-11.4981填充张量两种去噪方向并加权融合每完成一步都会触发CallbackParams回调驱动 Audacity 的进度条更新并支持用户取消回调返回 false 即中止。Stage 3解码、梅尔替换与波形重建潜在变量除以缩放因子后送入VAE 解码器还原为梅尔频谱梅尔替换_mel_replace_ops在检测到的截止频率对应的梅尔 bin 以下用输入音频的低通梅尔频谱直接替换生成结果以约束低频部分忠实于原始输入将梅尔频谱送入VocoderHiFi-GAN 类声码器合成 48kHz 波形后处理postprocessing对输出与输入计算 STFT在截止频率处比较能量并夹取比值到0.81.2然后重写低频 STFT 并 ISTFT 重建进一步保证低频能量一致最终归一化0.5 * waveform / max_amp后减去均值得到阶段输出波形。五、分块、重叠与交叉淡化长音频无法一次性送入扩散模型因此 OVAudioSR.cpp 将整段选中音频按块大小切分每个块nchunk_samples个采样由_audioSR-nchunk_samples()提供。为避免块边界出现可闻跳变实现采用0.1 秒重叠 线性交叉淡化除第一个块外每个块都向前回退0.1 × 48000 4800个采样再开始形成重叠区相邻块重叠区域按线性权值fade old*(1 - i*fade_step) new*(i*fade_step)逐采样混合代码注释说明 0.1 秒重叠“未观察到明显伪影”故暂以硬编码常量crossfade_overlap_seconds 0.1固定未暴露为可调参数。同时整个处理通过三槽位流水线intermediate[3]并行执行处理当前块的 Stage 3 时Stage 2 正在处理下一块、Stage 1 正在准备下下块从而显著隐藏模型加载之外的单块延迟见 OVAudioSR.cpp 的主循环。六、从 Python 移植到 OpenVINO实现要点与源码结构该功能是 AudioSR Python 项目的 C/OpenVINO 移植移植过程中有几个值得注意的工程决策梅尔滤波器矩阵预计算librosa的梅尔滤波器计算逻辑并未被移植而是将 256×1025 的常量矩阵离线导出为mel_24000_cpu.raw二进制文件运行时直接读入见 audio_sr.cpp 的构造函数既省去了依赖又保证了与 Python 版完全一致常量折叠无条件条件常数-11.4981、缩放因子0.334240138530731201f等均以字面量固化张量桥接libtorch 张量与 OpenVINO 张量通过wrap_torch_tensor_as_ov/wrap_ov_tensor_as_torch零拷贝桥接仅在需要持久化时clone()模块划分扩散逻辑集中在 audio_sr 目录其中 audiosr_common.h 定义了Batch结构、AudioSRModel/AudioSRModelChunkSize枚举与AudioSR_Config配置含四个阶段的默认设备均为CPUddpm_latent_diffusion.cpp 承载三阶段编排ddim_sampler.cpp 承载去噪调度autoencoder.cpp 承载编解码器distributions.h 提供高斯分布采样构建集成该模块在 mod-openvino/CMakeLists.txt 中以AUDIO_SR_SOURCES变量声明全部源文件依赖OpenVINO Runtime、libtorch 与 OpenCL最终以audacity_module方式编译进 Audacity 插件。七、使用建议与注意事项基于上文参数与实现细节给出以下实操建议首次运行较慢属正常现象模型加载与编译发生在首次 Apply 时进度条会提示“Loading Audio Super Resolution AI Models ...”若耗时超过 10 秒还会附加提示文字模型编译缓存写入openvino-model-cache/后后续运行会显著加快保持同一配置连续实验在设备、模型、块大小不变的前提下模型会驻留内存多轮试听只消耗扩散推理时间这正是Unload Models按钮存在的意义——实验完成后记得释放内存用 Seed 复现结果想要可复现实验时显式填写种子想要探索不同增强效果时留空自动按时间戳取种调试与故障排查处理失败时错误会写入日志可在 Audacity 的Help → Diagnostics → Show Log中查看输出轨名称中记录的完整参数描述符也可用于核对本次运行配置模型缺失时若openvino-models/audiosr/下缺少任一基础模型文件效果器会记录 no models installed 并禁用 Apply见TransferDataToWindow请先确保模型文件完整。结语Super Resolution 效果器把一篇扩散式音频超分辨率论文变成了 Audacity 里随手可用的菜单项三个设备下拉框让用户灵活编排 VAE / DDPM / Vocoder 的硬件加速Basic 与 Speech 双模型覆盖通用音频与语音两类场景而 Seed、Steps、Guidance Scale 这三个旋钮则共同决定了潜在空间采样的随机性与保真度。通过源码可以看到它并非简单的“加载模型跑一遍”而是包含带宽检测、低频约束、能量后处理、分块交叉淡化等一系列精心设计的信号处理环节——这也正是它在保持扩散模型创造力的同时仍能忠实保留原始音频低频信息的原因所在。赞分享人工智能AI 应用音频语音音乐生成本地部署【免费下载链接】openvino-plugins-ai-audacityA set of AI-enabled effects, generators, and analyzers for Audacity®.项目地址https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audacity点击查看免费下载相关推荐超分辨率图像增强神器 —— super-resolution 开源项目探秘超分辨率图像增强神器 —— super resolution 开源项目探秘 在数字化时代视觉体验的提升成为了众多领域追求的目标之一。 super resolu示例工程人工智能计算机视觉深度学习【亲测免费】 高效音频超分辨率技术Versatile Audio Super Resolution高效音频超分辨率技术Versatile Audio Super Resolution ! https://gitcode.net/mirrors/haohel人工智能音频深度学习媒体生成MXNet Gluon 超分辨率实战基于亚像素卷积的 Super-Resolution 训练与图像增强MXNet Gluon 超分辨率实战基于亚像素卷积的 Super Resolution 训练与图像增强 导读 本文围绕 example/gluon/super深度学习机器学习人工智能上一篇如何用Buzz实现完全离线的专业级语音转文字终极指南下一篇mergekit-tokensurgeon 词表移植指南用 OMP 等近似方法跨模型移植 Tokenizer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表