You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE4如何将录制的WAV音频从48kHz立体声转换为16kHz单声道

UE4 WAV音频采样率转换+声道合并实现方案

前置配置

修改项目的[YourProjectName].Build.cs文件,添加依赖模块:

PublicDependencyModuleNames.AddRange(new string[] {
    "Core", "CoreUObject", "Engine", "InputCore",
    "Audio",
    "AudioMixer",
    "SignalProcessing"
});

核心C++逻辑实现

1. 声道合并(立体声转单声道)

原始录制的48000Hz立体声PCM为交错式存储,每两个连续float分别对应左、右声道采样值,直接取平均值合并为单声道:

// OriginalStereoPCM为蓝图录制得到的原始立体声浮点PCM数据,范围[-1, 1]
TArray<float> MergeStereoToMono(const TArray<float>& OriginalStereoPCM)
{
    TArray<float> MonoPCM;
    if (OriginalStereoPCM.Num() % 2 != 0)
    {
        return MonoPCM;
    }
    MonoPCM.Reserve(OriginalStereoPCM.Num() / 2);
    for (int32 i = 0; i < OriginalStereoPCM.Num(); i += 2)
    {
        const float LeftSample = OriginalStereoPCM[i];
        const float RightSample = OriginalStereoPCM[i + 1];
        MonoPCM.Add((LeftSample + RightSample) * 0.5f);
    }
    return MonoPCM;
}

2. 采样率转换(48000Hz转16000Hz)

调用UE自带的重采样工具完成采样率转换,无需手动实现重采样算法:

TArray<float> ResampleAudio(const TArray<float>& Mono48KPCM)
{
    TArray<float> Resampled16KPCM;
    const float ResampleRatio = 16000.0f / 48000.0f;
    const int32 ExpectedOutputFrames = FMath::CeilToInt(Mono48KPCM.Num() * ResampleRatio);
    Resampled16KPCM.SetNumUninitialized(ExpectedOutputFrames);

    Audio::FResampler Resampler;
    Resampler.Init(48000.0f, 16000.0f, 1);
    
    int32 ProcessedInputFrames = 0;
    const int32 ActualOutputFrames = Resampler.Process(
        Mono48KPCM.GetData(), 
        Mono48KPCM.Num(), 
        Resampled16KPCM.GetData(), 
        ExpectedOutputFrames, 
        ProcessedInputFrames
    );
    Resampled16KPCM.SetNum(ActualOutputFrames);
    return Resampled16KPCM;
}

3. 导出为WAV文件

将处理完成的16000Hz单声道PCM数据写入WAV文件:

bool Save16KMonoToWav(const TArray<float>& Resampled16KPCM, const FString& SavePath)
{
    FWaveFileWriter WavWriter;
    if (!WavWriter.Open(SavePath, 16000, 1, 16))
    {
        return false;
    }
    WavWriter.AppendData(Resampled16KPCM.GetData(), Resampled16KPCM.Num());
    WavWriter.Close();
    return true;
}

蓝图联动方案

将上述逻辑封装为UBlueprintFunctionLibrary的静态函数,仅需暴露「原始PCM数据」「输出文件路径」两个输入参数和「处理结果」布尔值输出参数,即可在你现有蓝图录制逻辑的结束节点后直接调用,不会影响原有音频功能。

注意事项

  • 若你获取的原始录制数据为16位整数格式PCM,需先将其归一化到[-1,1]的浮点范围后再执行上述处理。
  • 对音频质量要求较高的场景可调整FResampler的滤波参数,默认参数可满足绝大多数普通业务场景需求。

内容的提问来源于stack exchange,提问作者Dimitrios Ververidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:27:03