gpt4 book ai didi

c# - 来自过滤器代码的音频点击/弹出

转载 作者:太空狗 更新时间:2023-10-30 01:22:43 32 4
gpt4 key购买 nike

我正在为 Unity 引擎中的音频过滤器创建一个 C# 脚本。

我的问题是,在通过我的过滤器运行后,生成的音频具有一致且频繁的“咔哒声”、“砰砰声”或“跳过声”。听起来有点像旧 radio 。
我不确定是什么原因造成的。

这是我的代码:

public float cutoff;
public float resonance;

int sampleRate;

void Start()
{
cutoff = 200;
resonance = 1;

sampleRate = AudioSettings.outputSampleRate;
}

void OnAudioFilterRead(float[] data, int channels)
{
float c = 2 * Mathf.PI * cutoff/sampleRate;
float r = 1 / resonance;

float v0 = 0;
float v1 = 0;

for (int i = 0; i < data.Length; i++)
{
v0 = (1 - r * c) * v0 - (c) * v1 + (c) * data[i];
v1 = (1 - r * c) * v1 + (c) * v0;

data[i] = v1;
}
}

这是 OnAudioFilterRead() 的文档.
这是我得到 original low-pass code 的地方.

随着截频值接近最大值 (127),咔哒声和爆裂声变得更小。

我对音频编程相当​​陌生,这可能很明显,所以我不确定是什么原因造成的。
有比我知识渊博的人能解释一下我做错了什么吗?

谢谢!

最佳答案

咔哒声和爆裂声的常见原因(按“常见程度”排序)是:

  • 错误的缓冲区长度(您重叠缓冲区或未能将其填充到边界)
  • 您的样本正在裁剪,您没有按照应有的方式处理它 - 例如,您正在计算 short 中的所有内容,并且不关心包装值
  • 您的 DSP 算法表现不佳
  • 您的算法由于某种原因太慢,音频样本未及时传送,导致音频间隙

一个很好的调试技术是尝试缩小问题的原因,例如,将 PCM 转储直接插入处理音频的例程中。这样,您就会知道例程的输出是否正常,并能够相应地集中调试工作。

关于c# - 来自过滤器代码的音频点击/弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12990423/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com