C# 如何提取';特点';根据FFT数据

C# 如何提取';特点';根据FFT数据,c#,fft,bass,audio,C#,Fft,Bass,Audio,我有一个音频可视化器,目前通过Arduino代表3RGB LED。我为每个光通道发送一个值,目前效果良好 我根据音频的低音程度改变每个通道的强度,并在色调上从1循环到360,然后将HSV转换为RGB,然后发送到Arduino 有什么更好的方法来表示更“动态”的音频,而不仅仅是在1和360之间循环?您有很多方法来表示音频功能,这完全取决于您想要什么 我认为,节拍检测算法将是你想要做的事情的方向 你也有其他算法来检测音乐和其他东西,但我认为它不适合这里 还可以调整强度值,使其不是线性的。 尝试为

我有一个音频可视化器,目前通过Arduino代表3RGB LED。我为每个光通道发送一个值,目前效果良好

我根据音频的低音程度改变每个通道的强度,并在色调上从1循环到360,然后将HSV转换为RGB,然后发送到Arduino


有什么更好的方法来表示更“动态”的音频,而不仅仅是在1和360之间循环?您有很多方法来表示音频功能,这完全取决于您想要什么

  • 我认为,节拍检测算法将是你想要做的事情的方向
你也有其他算法来检测音乐和其他东西,但我认为它不适合这里

还可以调整强度值,使其不是线性的。
尝试为这些值设置一个对数刻度,它将提供更好的结果(因为人耳具有“对数感知”(如果我可以说)

节拍检测看起来非常复杂:(这并不复杂,你只需要检测光谱分析随时间的变化,我相信你可以很快找到一个简单的实现(假设你知道如何获得光谱分析)目前,我只是在我的FFT数组中得到0到15的平均值,它总是在更新,并使用一个HueToHSV函数,其中的平均值是给我所需值的饱和度。这就是频谱分析吗?实际上,你的FFT数组包含频谱分析的结果。正如你所说,它会定期更新,所以你需要找到大的v数组中的值与你得到的上一个值相比发生了变化,这不是真正的拍频检测,而是一个开始。所以我可以在每次重建平均值时检查之前的值,看看是否有大的变化,然后从那里我得到最大的变化,除以10左右,得到RGB颜色,然后乘以共同海损要达到某种程度的饱和吗?