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

关于Unity中AudioClip.GetData方法的若干技术疑问

Unity AudioClip.GetData 常见疑问解析

先看官方示例代码:

float[] samples = new float[audioClip.samples * audioClip.channels];
audioClip.GetData(samples, 0);

针对提出的三个问题,解答如下:

1. samples数组和音频数据的对应关系

  • 数组里的每个float值对应一个音频采样点的振幅,取值范围固定在**[-1.0f, 1.0f]**,0代表无声音,正负对应声波的振动方向。
  • 多声道音频采用交错存储:比如双声道音频,数组顺序是「左声道第1采样 → 右声道第1采样 → 左声道第2采样 → 右声道第2采样」,以此循环;单声道的话,就按时间顺序依次存储每个采样点。

2. 为什么数组大小要乘以声道数

  • AudioClip.samples返回的是单声道的总采样数量,不是所有声道的总和。举个例子:2秒长、44100Hz采样率的双声道音频,单声道采样数是44100×2=88200,两个声道的总采样数就是88200×2=176400。
  • 如果数组大小不乘声道数,GetData只能读取单声道的部分数据,多声道的内容会被直接截断,导致获取的音频数据不完整。

3. samples数组是否和原音频完全对应?

  • 只要你按照audioClip.samples * audioClip.channels初始化数组,并且把offsetSamples参数设为0,那么数组第一个元素就是音频的起始采样点,最后一个元素就是音频的结尾采样点,和原音频数据完全匹配。
  • 如果出现不匹配的情况,要么是数组容量不够,要么是offsetSamples设了非0值(这个参数用来指定从音频的第N个采样点开始读取)。只要保证数组容量等于总采样数,且起始偏移为0,就能拿到完整的音频数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:42:11