我正在开发一个同时播放 64 个音频源的音频工具。因此,我创建了四个数组,每个数组包含 16 个音频源。每个音频源数组都被路由到自己的混音器。此外,两个混音器输出到左声道,两个到右声道。我的 DSP 缓冲区大小设置为最佳性能,这意味着 1024 个样本,并且有足够的真实/虚拟声音可用。
一开始,60 个 Audiosource 设置为 Volume = 0,而其中四个以 Volume = 0.5 运行。每个 Update()-Frame,我将使用 0.5 播放的音量设置为零,因此将之前为零的四个新音频源设置为 0.5。
像这样的东西:
void SwitchSources()
{
noseposInd++;
if (noseposInd > 15) noseposInd = 0;
audioSources_Lm[noseposIndTemp].volume = 0.0f;
audioSources_Ln[noseposIndTemp].volume = 0.0f;
audioSources_Rm[noseposIndTemp].volume = 0.0f;
audioSources_Rn[noseposIndTemp].volume = 0.0f;
audioSources_Lm[noseposInd].volume = 0.5f;
audioSources_Ln[noseposInd].volume = 0.5f;
audioSources_Rm[noseposInd].volume = 0.5f;
audioSources_Rn[noseposInd].volume = 0.5f;
noseposIndTemp = noseposInd;
}
出于测试目的,我将 f = 2Hz 的矩形信号(导致每秒可听见的咔嗒声)加载到每个 Audiosource 中。用 Audacity 记录我的输出结果可以在附图中看到:
似乎四个信号之一的缓冲区没有写入输出,因为关于正脉冲或负脉冲的幅度只有一半。“槽口”的宽度正好是一个块长。这意味着 1024 个样本,采样率为 44.1kHz,因此大约 23ms 没有输出。
增加改变音量的速率也会增加凹槽/超时的发生率,或者这可以被调用。有没有人遇到过同样的问题,或者可以提供一些关于 Update()-Method 和混音器的音频块写入如何干扰的知识?
提前致谢!