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

Unity中AudioClip.Create生成WAV及解决唇同步GetData报错问题

解决方案:流式AudioClip + SALSA唇同步 + WAV生成的矛盾处理

核心矛盾是:流式AudioClip(stream=true)不支持GetData,但设为非流式(stream=false)又因内存过载崩溃,而SALSA必须调用GetData获取音频数据做唇同步。下面是几个可行的解决思路:

1. 双AudioClip分离职责

同时维护两个AudioClip,拆分播放与数据读取的职责:

  • 流式Clip(stream=true):仅用于AudioSource播放,不需要支持GetData,避免大音频带来的内存压力。
  • 非流式Clip(stream=false):专门给SALSA调用GetData,同时用于生成WAV文件。可按片段创建(比如每2秒生成一个),避免一次性占用过多内存导致崩溃。

具体实现:

  • 创建两个参数一致(采样率、声道数、单段采样数)仅stream属性不同的AudioClip。
  • 在OnAudioRead回调中,把要播放的音频数据同时写入两个Clip的缓冲区,维护非流式Clip的写入偏移量。
  • 流式Clip赋值给AudioSource.clip用于播放,非流式Clip赋值给SALSA的音频源参数。

示例代码片段:

int sampleRate = 44100;
int channels = 1;
int segmentSamples = sampleRate * 2; // 每段2秒
int currentWriteOffset = 0;

// 流式Clip,仅用于播放
AudioClip streamClip = AudioClip.Create("Speech_Play", int.MaxValue, channels, sampleRate, true, OnAudioRead);
// 非流式Clip,用于SALSA和WAV生成
AudioClip dataClip = AudioClip.Create("Speech_Data", segmentSamples, channels, sampleRate, false);

void OnAudioRead(float[] data)
{
    // 从音频流获取数据填充到data数组
    FillAudioDataFromStream(data);
    // 同步写入非流式Clip的对应位置
    dataClip.SetData(data, currentWriteOffset);
    currentWriteOffset += data.Length;
    
    // 当当前片段写满时,生成对应WAV片段,同时重置偏移量创建新的片段Clip
    if (currentWriteOffset >= segmentSamples)
    {
        GenerateWavSegment(dataClip);
        Destroy(dataClip);
        dataClip = AudioClip.Create("Speech_Data", segmentSamples, channels, sampleRate, false);
        currentWriteOffset = 0;
    }
}

2. 拦截SALSA的GetData调用,替换数据源

如果不想修改播放逻辑,可以给SALSA做数据转发:

  • 维护一个音频数据缓存(比如List<float>),在OnAudioRead回调中把每次的音频数据存入缓存。
  • 找到SALSA中调用AudioClip.GetData的代码,替换成从你的缓存数组读取对应位置的数据,完全绕开流式Clip的GetData限制。

3. 分段缓存音频数据,按需生成WAV

放弃额外创建非流式Clip,直接缓存音频数据:

  • 在OnAudioRead时把数据存入List<float>或本地临时文件,避免内存溢出。
  • 当SALSA需要数据时,直接从缓存中读取对应片段,而非调用流式Clip的GetData。
  • 生成WAV时,直接用缓存的完整数据(或合并临时文件)生成文件。

注意事项:

  • 处理长音频时,优先用本地临时文件缓存,避免内存占用过高。
  • 确保缓存数据的采样率、声道数与SALSA要求一致,避免唇同步错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:43